← DunkAPICONTENT HISTORY
WHAT CHANGED
Update to DunkAPI
Snapshot Oct 31, 2026 · 01:21 UTC · version 1.0.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save DunkAPI and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Odds math for basketball betting markets: American, decimal and implied probability conversion, vig, and four devigging methods (multiplicative, additive/Shin, power) applied to moneylines, spreads, totals and player props, plus building a consensus no-vig line across sportsbooks. Use when the user asks what a price implies, how to remove the vig, what the true probability is, or what a fair line is. Do not use for finding the best price or line movement, see odds-explorer.",
"included_files": [],
"name": "odds-analysis",
"skill_md_contents": "---\nname: odds-analysis\ndescription: \"Odds math for basketball betting markets: American, decimal and implied probability conversion, vig, and four devigging methods (multiplicative, additive/Shin, power) applied to moneylines, spreads, totals and player props, plus building a consensus no-vig line across sportsbooks. Use when the user asks what a price implies, how to remove the vig, what the true probability is, or what a fair line is. Do not use for finding the best price or line movement, see odds-explorer.\"\nmetadata:\n version: 1.0.0\n author: DunkAPI\n---\n\n# Odds Analysis\n\n> **Default data tool:** DunkAPI (`dunkapi-tool`).\n> `get_odds` (5 credits per game) for moneylines, spreads and totals with prices. `get_player_props` (10) for prop prices. The math itself is local.\n\nPrices are not probabilities. A book's two sides add to more than 100%; the excess is its margin. Removing it gives the market's own view, which is the benchmark every edge claim has to beat.\n\n## When to Use\n\n- \"What probability does -195 imply?\"\n- \"Devig this moneyline: -200 / +165\"\n- \"What is the fair total if over is -108 and under is -112?\"\n- \"What's the no-vig line across all books?\"\n\n## When NOT to Use\n\n- Hunting the best number or reading line moves, see `odds-explorer`\n\n## Commands Available\n\n| Command | Role | Credits |\n|---------|------|---------|\n| `get_odds` | Per-book prices and closing implied probabilities | 5 per game, 10 per date |\n| `get_player_props` | Over and under prices for props | 10 |\n| `get_schedule` | Median line and `home_implied_prob` on upcoming games | 2 |\n\n## Commands That Do NOT Exist\n\n| Not available | Use instead |\n|---------------|-------------|\n| `get_no_vig_odds`, `get_fair_odds` | Compute locally with the methods below |\n| `get_true_probability` | Same |\n\n## Conversions\n\n```\nAmerican to implied probability:\n odds > 0: p = 100 / (odds + 100)\n odds < 0: p = -odds / (-odds + 100)\nDecimal odds = 1 / p (American +165 = 2.65; -195 = 1.513)\nAmerican from p:\n p < 0.5: odds = +100 * (1 - p) / p\n p >= 0.5: odds = -100 * p / (1 - p)\nPayout per 1 unit staked at American odds o:\n o > 0: o/100 o < 0: 100/(-o)\n```\n\nThe API returns `home_close_prob` and `away_close_prob` on `get_odds` rows: those are the raw implied probabilities of the closing moneyline (they sum above 1). Treat them as inputs to devigging, not as the answer.\n\n## Vig\n\n`overround = pA + pB - 1`. A -110/-110 spread is 4.76%. Sharper books run lower. In the live row set below, raw sums ranged from 1.019 (ESPN BET) to 1.044 (BetMGM) on one game's moneyline.\n\n## Devigging Methods\n\nGiven two raw probabilities `a` and `b` with `a + b = S > 1`:\n\n| Method | Formula | Behaviour |\n|--------|---------|-----------|\n| Multiplicative (proportional) | `a/S`, `b/S` | Simple default. Spreads the margin proportionally |\n| Additive | `a - (S-1)/2`, `b - (S-1)/2` | Equal cut from each side. Can push a longshot too low, so check it stays positive |\n| Shin | Solves for an insider-trading fraction `z` | Shifts more of the margin onto longshots. For a two-way market it equals the additive result |\n| Power | Find `k` so `a^k + b^k = 1`; use `a^k`, `b^k` | Takes relatively more off the longshot, which matches the favourite-longshot bias often seen in betting markets |\n\n### Worked example with live numbers\n\n`get_odds {\"game_id\": \"401859967\"}` returned Pinnacle's closing moneyline as SA (home) -195, NY (away) +173. Raw: `0.6610 + 0.3663 = 1.0273` (2.73% margin).\n\n| Method | Home (SA) | Away (NY) |\n|--------|----------:|----------:|\n| Raw | 0.6610 | 0.3663 |\n| Multiplicative | 0.6434 | 0.3566 |\n| Additive / Shin | 0.6474 | 0.3526 |\n| Power (k = 1.043) | 0.6493 | 0.3507 |\n\nThe methods differ by less than 1 point on a favourite priced near 65%, so for NBA sides the choice rarely changes a decision. The spread widens as the favourite gets shorter (-600 or more), where power and Shin cut the longshot harder. Pick one and keep it for the whole analysis; mixing methods inside one backtest adds noise that looks like signal.\n\nSpread and total pairs are devigged the same way. DraftKings' total in that game was over -108 / under -112: raw `0.5192 + 0.5283 = 1.0475`, multiplicative fair over probability `0.4957`.\n\n## Consensus No-Vig Line\n\nFor a game with many books:\n\n1. Devig each book's own two-way market (same method).\n2. Take the median across books. The median ignores an outlier book's stale price.\n3. Optionally weight a sharp reference (Pinnacle appears in the live rows) heavier than a retail book such as a recreational app.\n4. Report the range as well: the width of disagreement across books is part of the answer.\n\nFor the eight books on that game, multiplicative home probabilities ran from 0.631 to 0.651. Pinnacle at 0.643 sat in the middle of that range; the highest was Bovada at 0.651 and the lowest DraftKings at 0.631.\n\n## Converting Spread to Win Probability\n\nWhen a game has no moneyline (common in preseason, where one book may post only a spread and total), use the spread. An NBA spread of `s` points corresponds roughly to `Phi(-s / sigma)` for the favourite, with `sigma` near 12. A 5.5-point favourite: `Phi(5.5/12) = Phi(0.458) = 0.677`, a rough guide; the moneyline is better when you have it. When both a spread and a moneyline exist, compare the two; a large gap means a stale line or the wrong sigma.\n\n## Props\n\nA prop has a line and two prices. Devig the pair: with over -125 and under -105 (BetMGM's closing points prop in a call for Jalen Brunson on 2025-10-22), raw `0.5556 + 0.5122 = 1.0678`, fair over probability `0.5203`. Note the line also differs by book (23.5 or 24.5 for the same player that night), so compare prices only at the same line. See `prop-modeling`.\n\n## Pitfalls\n\n| Pitfall | Handling |\n|---------|----------|\n| Treating raw implied probability as true | Always devig |\n| Mixing opening and closing prices | Keep one snapshot type per analysis |\n| Using one retail book | Use the median or a sharp reference |\n| Different lines treated as the same market | Compare only identical lines (or adjust for the line) |\n| Three-way markets | Basketball has none; do not apply soccer logic |\n| Tiny overrounds | A raw sum under 1 means a stale or mistaken row; discard |\n| Null prices | `home_spread_open` and similar fields can be `null`; skip those rows |\n\n## Credit Usage\n\n| Operation | Credits |\n|-----------|---------|\n| One game, all books | 5 |\n| A day, all games | 10 |\n| One game's player props | 10 |\n| The conversions themselves | 0 |\n\n## Output Format\n\n```\n[Game] closing moneyline, [method]\n[Book]: [home odds]/[away odds] -> raw [x]+[y] = [S] -> fair [h]% / [a]%\nConsensus (median of [n] books): home [x]% (range [lo]% to [hi]%)\nFair price: home [odds], away [odds]\n```\n\n## What to Do Next\n\n| Found | Next | Skill |\n|-------|------|-------|\n| Need the best number to bet | Line shop | `odds-explorer` |\n"
}SHA-256 of public snapshot: a57a2389e087ea075cdcb9a6df92565ea0954cfdde6fb465b9e71c9317e4a397