← DunkAPICONTENT HISTORY

Update to DunkAPI

Snapshot Oct 31, 2026 · 01:21 UTC · version 1.0.0

Collection source: downloaded plugin package.

WHAT CHANGED

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 JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Multi-book basketball odds comparison: best moneyline, spread and total across sportsbooks, vig per book, opening versus closing lines, and pre-tip line movement. Use when the user asks for current or historical odds, the best price, which book is off the market, how a line moved, or whether the home side covered. Covers NBA, WNBA, men's and women's college. Do not use for devigging or probability math, see odds-analysis. Do not use for player props, see prop-modeling.",
  "included_files": [],
  "name": "odds-explorer",
  "skill_md_contents": "---\nname: odds-explorer\ndescription: \"Multi-book basketball odds comparison: best moneyline, spread and total across sportsbooks, vig per book, opening versus closing lines, and pre-tip line movement. Use when the user asks for current or historical odds, the best price, which book is off the market, how a line moved, or whether the home side covered. Covers NBA, WNBA, men's and women's college. Do not use for devigging or probability math, see odds-analysis. Do not use for player props, see prop-modeling.\"\nmetadata:\n  version: 1.0.0\n  author: DunkAPI\n---\n\n# Odds Explorer\n\n> **Default data tool:** DunkAPI (`dunkapi-tool`).\n> `get_schedule` (2 credits) for the median line on upcoming games, `get_odds` (5 per game, 10 per date) for every book, `get_line_movement` (10 per game) for snapshots before tip-off.\n\nYou find the best available price, show what each book charges, and read line movement without overstating what snapshots can prove.\n\n## When to Use\n\n- \"Best spread on Knicks-Spurs?\" / \"Which book has the highest total?\"\n- \"What were the closing lines for last night's slate?\"\n- \"Did the home team cover?\" / \"Did it go over?\"\n- \"How did the line move before tip?\"\n- Reading the market before a game preview or a bet\n\n## When NOT to Use\n\n- Converting prices to true probabilities, see `odds-analysis`\n- Player prop lines, see `prop-modeling`\n\n## Commands Available\n\n| Command | What it does | Credits |\n|---------|-------------|---------|\n| `get_schedule` | Upcoming games with the median spread, total and moneylines across posted books | 2 |\n| `get_odds` | Every book's moneyline, spread and total, opening and closing, with results against the median close. `game_id` for one game, `date` for a day | 5 per game, 10 per date |\n| `get_line_movement` | Snapshots of each book's moneyline, spread and total before tip-off. Optional `provider` | 10 |\n| `get_game` | Box score plus each book's open and close (use when you want both) | 5 |\n\n## Commands That Do NOT Exist\n\n| Not available | Use instead |\n|---------------|-------------|\n| `get_live_odds` | None. Lines are pre-game; `get_schedule` shows what is posted |\n| `get_best_book` | Compute from `get_odds` rows |\n| `get_public_betting` | Not served. Do not infer public percentages |\n| `get_closing_line` | Closing fields (`*_close`) on `get_odds` rows |\n| `get_alt_lines` | Not served; one spread and one total per book |\n\n## Coverage and What a Line Is\n\n- Per-book moneyline, spread and total with opening and closing values. Opening and closing per book come from The Odds API from July 2020 and from ESPN from 2023-24; before that, only ESPN's final line. Check https://dunkapi.com/docs/atlas for coverage by season and league before promising history.\n- Women's college lines start November 2024, with fewer books.\n- Pre-game snapshots: ESPN's once a day, The Odds API's every hour for games in the next two days. That sets the resolution of `get_line_movement`: you can see a half-point move across hours or days, not a 90-second steam move.\n- Books appear under their display names in `get_odds` and `get_line_movement` (`DraftKings`, `FanDuel`, `ESPN BET`, `Pinnacle`, `BetMGM`, `Bovada`, `BetOnline`, `MyBookie` in the live call below). Prop calls use lowercase keys (`draftkings`); do not mix them.\n- Preseason games can have one book and no moneyline. Say so; one book is not a market.\n\n## Season Resolution\n\nFor games before the Oct 20, 2026 opener, `get_schedule` returns preseason games with `season: 2027`. Use `get_schedule` for lines on future games and `get_odds` for lines on games already played or about to be.\n\n## How It Works\n\n**Step 1: Identify the game.** Use `get_schedule {\"days\": 3, \"team\": \"NY\"}` or `list_games` (see `game-lookup`). Do not pull odds for a guessed id.\n\n**Step 2: Pull every book.** One game: `get_odds {\"game_id\": \"401859967\"}`. A whole day, 10 flat: `get_odds {\"date\": \"2026-06-13\"}`. For three or more games the date form is cheaper.\n\n**Step 3: Read the columns.** Each `books` row has `provider`, `home_ml_open`, `home_ml_close`, `away_ml_open`, `away_ml_close`, `home_close_prob`, `away_close_prob`, `home_spread_open`, `home_spread_close`, `spread_home_odds`, `spread_away_odds`, `total_open`, `total_close`, `over_odds`, `under_odds`, `captured_at`. The `result` object holds `median_home_spread`, `median_total`, `home_covered` and `over` for finished games.\n\nNote: `home_close_prob` and `away_close_prob` are raw implied probabilities from the closing moneyline, not devigged. They add to more than 1; the excess is the vig.\n\n**Step 4: Best price.** For each side independently, the best price is the highest number (+175 beats +160; -185 beats -210). The best home price and best away price usually sit at different books.\n\n**Step 5: Vig.** For a two-way market with decimal implied probabilities `pH` and `pA`: `vig = pH + pA - 1`. For American odds: `p = 100/(odds+100)` if odds are positive, `p = -odds/(-odds+100)` if negative. Spread and total prices of -110/-110 carry a vig of 4.76% (2 * 0.5238 - 1).\n\n**Step 6: Movement, if asked.** `get_line_movement {\"game_id\": \"401585601\", \"provider\": \"DraftKings\"}` returns `movement[book]` as a list of `{captured_at, home_ml, away_ml, home_spread, total}`. Compare the first and last snapshot.\n\n### Live example\n\n`get_odds {\"game_id\": \"401859967\"}` (NY at SA, 2026-06-13). Closing values, trimmed to the columns that matter:\n\n| Book | Home ML | Away ML | Raw sum | Spread | Total |\n|------|--------:|--------:|--------:|-------:|------:|\n| BetMGM | -200 | +165 | 1.044 | SA -5.5 | 215.5 |\n| BetOnline | -187 | +163 | 1.032 | SA -5.5 | 215.5 |\n| Bovada | -210 | +175 | 1.041 | SA -5.5 | 215 |\n| DraftKings | -192 | +160 | 1.043 | SA -5.5 | 216.5 |\n| ESPN BET | -185 | +170 | 1.019 | SA -5.5 | 216.5 |\n| FanDuel | -198 | +166 | 1.040 | SA -5.5 | 215.5 |\n| MyBookie | -204 | +171 | 1.040 | SA -5.5 | 215.5 |\n| Pinnacle | -195 | +173 | 1.027 | SA -5.5 | 215 |\n\nBest home price -185 (ESPN BET), best away price +175 (Bovada). Eight books agreed on the spread and spread within 1.5 points on the total. `result` came back `home_covered: false, over: false` (NY won 94-90 as a 5.5-point underdog; 184 combined points against a 215.5 total). The lowest raw sum, ESPN BET at 1.019, is the cheapest to bet; the highest, BetMGM at 1.044, the most expensive.\n\n## Reading Movement\n\n| Observation | Cautious read |\n|-------------|---------------|\n| Spread moves 1 point or more across all books | Real information or a large position taken; look for an injury in `get_injuries` |\n| One book out of line, rest agree | Stale line or a book managing its own exposure; the others are the market |\n| Moneyline moves, spread unchanged | Price adjustment around a key number |\n| Total drops 2+ points | Pace or availability news; check injuries and rest |\n| Line returns to open | Noise; no signal |\n\nWithout bet-count or handle data, \"sharp money\" and \"reverse line movement\" cannot be proven from lines alone. Label them hypotheses.\n\n## Anti-patterns\n\n| Rationalization | Why it is wrong | Do this instead |\n|-----------------|-----------------|-----------------|\n| \"Line moved toward the favorite, so favorites are right\" | Direction alone says nothing about who is correct | Report size, timing and what else changed |\n| \"Use the first book that answers\" | Differences of 5-10 cents add up over a season | Show the range across books |\n| \"Pinnacle is always right\" | A reference, not an oracle; check availability and limits | Use it as a benchmark line |\n| \"Open to close tells the whole story\" | Snapshots miss intra-day swings | State the snapshot frequency |\n\n## Credit Usage\n\n| Operation | Credits |\n|-----------|---------|\n| Tonight's median lines | 2 |\n| One game, every book | 5 |\n| A whole day of lines | 10 |\n| One game's movement | 10 |\n| Movement for a 10-game slate | 100; warn the user first |\n\n## Output Format\n\n```\n[Away] @ [Home], [date] (n books)\nMoneyline: [Away] [best] @ [book] | [Home] [best] @ [book]\nSpread: [Home] [x] (range [lo] to [hi]) | Total [x] (range [lo] to [hi])\nCheapest to bet: [book] ([vig]%) | Most expensive: [book] ([vig]%)\nResult (if final): home covered [yes/no], over [yes/no]\n```\n\n## What to Do Next\n\n| Found | Next | Skill |\n|-------|------|-------|\n| Best prices identified | Remove vig to get true probability | `odds-analysis` |\n| Large move on one game | Check availability and form | `game-preview` |\n"
}

SHA-256 of public snapshot: 23e271ed9ae37c24ee9913ced6b43a97ae1dc4aa2dd25ec4fe6c9d50c48acc08