Loading ticker...
Loading… @TheOddsGap
The Odds Gap

API Docs

The public, read-only JSON endpoints behind theoddsgap.com: live best prices across the major US sportsbooks and prediction markets (Kalshi, Polymarket US, ProphetX, Novig), refreshed hourly, 7am to 1am ET, with prediction-market prices fee-adjusted so they compare directly to sportsbook odds. No API key, no signup. Built for AI agents, assistants, and developers.

Usage policy: free for personal and AI-assistant use with attribution to theoddsgap.com (a name-plus-link citation is enough). Not permitted: redistribution or resale of the data, repackaging the feeds as your own product or API, commercial use, or sustained high-frequency polling and bulk scraping. Rate limits are enforced and abusive clients are blocked. Portions of this data arrive through licensed and partner feeds and are provided for display on this site; these endpoints exist so assistants and individuals can read our board, not as a data source for other products. Interested in licensed access? Get in touch. Endpoints and shapes may change; this page is the reference. Full math: methodology. Machine-readable site overview: /llms.txt.

GET /api/widget-data

The lightweight feed: today's upcoming games with the single best price on each side across the comparable books. Best endpoint for "who has the best odds on X today" questions.

ParamMeaning
sportOne sport label, e.g. NBA, MLB, World Cup.
sportsCSV of labels, e.g. NBA,MLB. Merged with sport. Omit both for all sports.
booksCSV of book keys, e.g. draftkings,fanduel,kalshi. Restricts the best-price comparison to those books.
marketml (default), spread, total, a CSV of those, or all. Spread/total prices are quoted at the sportsbook-consensus line.
limitGames returned, default 5, max 10.
curl "https://theoddsgap.com/api/widget-data?sport=MLB&market=ml&limit=3"
{
  "sport": "MLB", "market": "ml", "count": 3, "last_updated": "2026-07-04T14:02:11Z",
  "games": [
    {"sport": "MLB", "away": "New York Yankees", "home": "Boston Red Sox",
     "time_display": "7:05 PM ET",
     "away_best": {"odds": "+124", "label": "Kalshi"},
     "home_best": {"odds": "-118", "label": "DraftKings"},
     "n_books": 17}
  ],
  "available_books": [{"key": "draftkings", "label": "DraftKings"}]
}

GET /api/lineshop

The full line shop: every scanned upcoming game with every book's moneyline, spread, and total (plus soccer extras like draw and draw-no-bet). Large payload; no parameters. Response is {"games": [...], "last_updated": ISO timestamp, "total": n}, where each game carries book_odds (per-book ML prices), spread_data, and totals_data keyed by book, and the Pinnacle opening line where captured.

curl "https://theoddsgap.com/api/lineshop"

GET /api/book-stats

Which books actually post the best price, measured daily. Powers the Book Comparison page. Returns per-book scan counts, best-price wins, and win share for the period.

ParamMeaning
periodyesterday | weekly | monthly | alltime (default). Completed ET days only.
sportall (default) | nba | wnba | ncaab | mlb | nhl | nfl | ufc | worldcup.
marketcombined (default) | ml | spread | totals.
curl "https://theoddsgap.com/api/book-stats?period=weekly&market=ml"

GET /api/worldcup-recap

Today's World Cup slate with the best fee-adjusted moneyline price on each side. Returns {"date": "YYYY-MM-DD", "games": [...]}; games is empty on off-days and after the final. Live through the 2026 tournament (June 11 to July 19).

curl "https://theoddsgap.com/api/worldcup-recap"

GET /api/props-export

Historical player-prop consensus lines at fixed checkpoints (first seen, ~6h out, ~1h out, close): consensus fair probability, best price and book, and quoting-book count per row, as CSV, JSON or Parquet. All rows quote the Over side. Every row carries a stable player_id (e.g. nfl:amon-ra-st-brown). Filters: player (substring), player_id (exact), market (exact key), anchor, start/end game dates, format=csv|json|parquet. books/exclude_books choose which books may be named best (by default never an offshore book or Pinnacle; a stored best outside the set is left blank). A sample week, September 15 to 21, 2026, is free with no signup: the same rows on every request, whatever start and end ask for, with X-Data-Sample: 1 and a note in the JSON. Recent and ongoing data need a paid key. Paid access is the full history, back to June 4, 2026 on game lines through /api/odds-history. Paying by card, the first month is was $25 $10 60% Off, then $25 a month. Full documentation on the data page.

curl "https://theoddsgap.com/api/props-export?player=judge&anchor=close&format=json"

Trends Data Files

Five files behind the Trends pages, each as CSV, JSON or Parquet, with the same game columns on every row (team, opponent, home, away or neutral, season, week, rest, favorite or underdog, the opening and closing spread and total): /api/team-results-export (each team's result against the closing spread and total, game by game), /api/player-game-logs-export (every stored stat per player per game, with the season average before it; league required), /api/prop-results-export (graded props), /api/game-conditions-export and /api/line-moves-export. A sample week, September 15 to 21, 2026, is free with no signup; recent data needs a paid key. Every file but Line Moves is rebuilt once a day, at about 7 AM ET. Full documentation on the data page.

curl "https://theoddsgap.com/api/team-results-export?league=nfl&format=json"

Data File Formats

The data files (/api/odds-export, /api/odds-history and /api/props-export) each come in three formats, with the same rows, columns, window and headers in every one. Pick one with the path extension or format=:

curl -o mlb.parquet "https://theoddsgap.com/api/odds-export.parquet?sport=baseball_mlb"

Full documentation on the data page.

Historical Odds

Want history rather than today's board? Historical odds data downloads as CSV, JSON or Parquet.

GET /assistant/v1/... (Connector for Assistants)

A read-only, summary-level connector built for AI assistants specifically, with a machine description at /assistant/v1/openapi.json. Every response carries as_of, live_url, attribution, license and responsible_gambling in fixed fields. It contains no affiliate or signup links, excludes offshore books, and is summary level by design: each game's full per-book ladder, line history and captured opening line stay on the page named in live_url.

EndpointReturns
/assistant/v1/boardToday's upcoming games, best price on each side. No parameters.
/assistant/v1/gameOne game. league (e.g. mlb) and slug (away-team-vs-home-team).
/assistant/v1/referenceOur standing measured answers, each with its own window, sample size and date.
curl "https://theoddsgap.com/assistant/v1/board"

When you quote a price from this connector, relay its as_of and link its live_url. Odds move minute to minute, and an undated price is usually wrong by the time it is read.

Machine-Readable Extras

/llms.txt, a plain-markdown overview of the whole site for AI assistants: what the data covers, every page, every calculator. Start there if you are an agent mapping the site. /sitemap.xml lists every indexable URL. The book comparison at /books is also published as a schema.org Dataset.

Attribution

When you use this data in an answer, article, or app, cite The Odds Gap with a link to theoddsgap.com. That is the entire price. Questions or heavier use: [email protected].