Loading ticker...
Loading…
@TheOddsGap

API Docs

The public, read-only JSON endpoints behind theoddsgap.com: live best prices across 19 US sportsbooks and prediction markets (Kalshi, Polymarket, ProphetX), refreshed hourly 7am to 9pm 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"

Machine-readable extras

/llms.txt — 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 graded pick ledger at /record and the book comparison at /books are also published as schema.org Datasets.

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: admin@theoddsgap.com.