API reference

Every endpoint. Real examples.

The complete reference for TheOddsAPI - live odds, player props, edge detection, intelligence, and historical snapshots from 50+ sportsbooks across 26 sports. Base URL: https://api.theoddsapi.com. Authenticate every request with your key in the x-api-key header.

Machine-readable spec: openapi.json · Try it live: interactive Swagger UI · New here? Quick start

Last updated 2026-07-03. Generated from the live OpenAPI spec.

Core Data

Sports, events, odds, and best lines.

GET /sports/Free / Pro / Business

List Sports

Return the list of supported sports available for your tier.

Free tier: NBA + MLB only · Pro/Business: 25+ sports including NBA, MLB, NFL, NHL, NCAAB, NCAAF, WNBA, UFC, MLS, EPL, Champions League, La Liga, Bundesliga, Serie A, Ligue 1, Liga MX, Eredivisie, Championship, Cricket, Boxing, Tennis, Euroleague, Europa League, AFL, NRL

Parameters

No query parameters. Authenticate with the x-api-key header.

Example request

curl "https://api.theoddsapi.com/sports/" \
  -H "x-api-key: YOUR_API_KEY"

GET /sports/{sport_key}

Get Sport

Return details for a specific sport.

Returns 404 if the sport doesn't exist or isn't available for this tier.

404 (not 403) is intentional - don't confirm a sport exists to a tier

that can't access it.

Parameters

ParameterDescription
sport_keyRequired

Example request

curl "https://api.theoddsapi.com/sports/baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /events/

List Events

Return cached event summaries for the given sport.

Parameters

ParameterDescription
sport_keyRequiredRequired. Use /sports/ for the full list. Examples: basketball_nba, baseball_mlb, americanfootball_nfl, icehockey_nhl, basketball_ncaab, basketball_wnba, americanfootball_ncaaf, soccer_epl, soccer_uefa_champs_league, soccer_spain_la_liga, soccer_mexico_ligamx, cricket, boxing_boxing, tennis, and more (25+ sports)
event_idOptionalOptional. Filter to a single event

Example request

curl "https://api.theoddsapi.com/events/?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /odds/Free / Pro / Business

List Odds

Return normalized odds from multiple sportsbooks for the given sport.

Live feed: returns upcoming and in-play games only; finished games

roll off the feed. Each game's start time is the start_time field

(ISO 8601 UTC). To pull a specific day's full slate regardless of when

you poll, use commenceTimeFrom / commenceTimeTo (they filter on

start_time). For games that have already concluded, use

/historical/odds (Business tier).

Markets: h2h (moneyline), spreads, totals. All three are returned

by default. Use ?markets=h2h or ?markets=spreads,totals to filter.

Note: MMA/UFC returns h2h + totals only (no spreads - fighter spreads

are not a standard US market).

Free tier: NBA + MLB · Pro/Business: All sports · All markets

Parameters

ParameterDescription
sport_keyRequiredRequired. Use /sports/ for the full list. Examples: basketball_nba, baseball_mlb, americanfootball_nfl, icehockey_nhl, basketball_ncaab, basketball_wnba, americanfootball_ncaaf, soccer_epl, soccer_uefa_champs_league, soccer_spain_la_liga, soccer_mexico_ligamx, cricket, boxing_boxing, tennis, and more (25+ sports)
event_idOptionalOptional. Filter to a single event.
marketsOptionalOptional. Comma-separated list of markets to include. One or more of: h2h, spreads, totals. Defaults to all available markets.
regionsOptionalOptional. Comma-separated list of bookmaker regions to include. One or more of: us, uk, eu, au. Defaults to all regions (every book the sport has).
bookmakersOptionalOptional. Comma-separated list of bookmaker keys to include. Examples: draftkings, fanduel, pinnacle, betmgm, williamhill_us. Unknown keys return 400 with the list of valid books. Composes with regions as an intersection.
commenceTimeFromOptionalOptional. Only return games starting at/after this time (ISO 8601 UTC, e.g. 2026-05-27T00:00:00Z). Filters the live upcoming/in-play feed by each game's start_time; does not return finished games (use /historical/odds for those).
commenceTimeToOptionalOptional. Only return games starting at/before this time (ISO 8601 UTC). Pair with commenceTimeFrom to pull a full day's slate.
oddsFormatOptionalOdds format for the price field: 'american' (default; e.g. -110, +145) or 'decimal' (e.g. 1.909, 2.45). Invalid values return 400. Currently applies to /odds/ only - other endpoints serve American.

Example request

curl "https://api.theoddsapi.com/odds/?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /best-lines/

Get Best Lines

Return best available line per outcome from cached normalized odds.

Parameters

ParameterDescription
sport_keyRequiredRequired. Use /sports/ for the full list. Examples: basketball_nba, baseball_mlb, americanfootball_nfl, icehockey_nhl, basketball_ncaab, basketball_wnba, americanfootball_ncaaf, soccer_epl, soccer_uefa_champs_league, soccer_spain_la_liga, soccer_mexico_ligamx, cricket, boxing_boxing, tennis, and more (25+ sports)
event_idOptionalOptional. Filter to a single event
oddsFormatOptionalOptional. american (default) or decimal.

Example request

curl "https://api.theoddsapi.com/best-lines/?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

Intelligence

Consensus odds · Fair value · Edge detection. Business plan required.

GET /intelligence/arbitrage

Get Arbitrage

Cross-book arbitrage opportunities (precomputed, refreshed with odds).

Each arb is flagged with likely_stale when profit_pct exceeds

STALE_ARB_PROFIT_PCT_THRESHOLD (5%). Real cross-book arbs are typically

0.5-3% - larger numbers usually indicate a stale line, limit-restricted

book, or a pricing error that will void.

Parameters

ParameterDescription
sport_keyRequiredSport key (e.g., basketball_nba)

Example request

curl "https://api.theoddsapi.com/intelligence/arbitrage?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /intelligence/value

Get Value Bets

Value bets vs vig-removed soft-market consensus (precomputed).

"Value" here is offered price vs vig-removed consensus across 30-50 books

including Pinnacle and other sharp/EU books. Consensus includes sharp-book

anchors on major sports.

Parameters

ParameterDescription
sport_keyRequiredSport key

Example request

curl "https://api.theoddsapi.com/intelligence/value?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /intelligence/market-analysis

Get Market Analysis

Per-event market health: hold %, efficiency, tightest/widest book (precomputed).

Parameters

ParameterDescription
sport_keyRequiredSport key

Example request

curl "https://api.theoddsapi.com/intelligence/market-analysis?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /intelligence/edges

Get Edges

Cross-book raw price deviations from market average (precomputed).

Raw price delta WITHOUT vig removal. Included for customers who want the

unprocessed delta for their own pipelines. For rigorous +EV signals use

/intelligence/value instead.

Parameters

ParameterDescription
sport_keyRequiredSport key

Example request

curl "https://api.theoddsapi.com/intelligence/edges?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /intelligence/fair-odds

Get Fair Odds

Vig-removed fair prices per outcome (precomputed). H2h moneyline only today.

Fair probability is the vig-removed consensus across 30-50 books including

Pinnacle and EU/UK sharp books on major sports. US-only sports (MLS, UFC)

use US retail/offshore books only.

Parameters

ParameterDescription
sport_keyRequiredSport key
marketOptionalOptional. Currently supports h2h (moneyline) only. Other markets (spreads, totals, player props) return 400 with Quant tier roadmap messaging. Quant tier launches July 2026.

Example request

curl "https://api.theoddsapi.com/intelligence/fair-odds?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /intelligence/consensus

Get Consensus

Median/mean market center per outcome (precomputed). H2h moneyline only today.

Parameters

ParameterDescription
sport_keyRequiredSport key
marketOptionalOptional. Currently supports h2h (moneyline) only. Other markets (spreads, totals, player props) return 400 with Quant tier roadmap messaging. Quant tier launches July 2026.

Example request

curl "https://api.theoddsapi.com/intelligence/consensus?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

Edge Detection

Cross-book edges vs Pinnacle (sharp anchor) - standard odds + NBA, NHL, MLB, WNBA, AFL & NRL player props. Business plan required.

GET /edges/Business

List Edges

Cross-book edges vs Pinnacle (sharp anchor), precomputed.

Tier: Business plan or higher. Pro keys receive a 403 with an

upgrade pointer.

Edge types:

  • line_gap - soft book has a different point/spread than Pinnacle.
  • price_gap - same line, soft book paying more than 10 cents over

Pinnacle.

  • dream_combo - line gap AND soft book paying more (rarest).

Sign convention: line_gap = sharp_line - soft_line; positive

when the soft book's line is lower than Pinnacle's. Whether a lower

line is favorable depends on the bet direction - Over wants lower,

Under wants higher, spreads want higher numerically for the side

being bet. The direction field is provided so callers can interpret

the sign correctly.

Coverage: every sport refreshed by the scheduler. For

basketball_nba, icehockey_nhl, and baseball_mlb, player-prop

edges are merged into the same response (distinguished by market).

Parameters

ParameterDescription
sport_keyRequiredRequired. Sport key, e.g. basketball_nba, soccer_epl, baseball_mlb. Sports without Pinnacle coverage (MLS, UFC, AFL, NRL) return an empty list with a message.
marketOptionalOptional. Filter to one market: h2h, spreads, totals, or a player-prop market like player_points, player_rebounds, player_assists, player_points_rebounds_assists. Omit to include every market.
min_edgeOptionalMinimum edge_score to include. Default 50 - filters out market-microstructure noise. Set to 0 to include everything detected above the internal noise floor (>10 cents price gap OR >=0.5 point line gap).
bookOptionalOptional. Filter to a single soft book by key (e.g. draftkings, fanduel, betmgm). Case-insensitive.
limitOptionalMax edges to return. Default 50, capped at 500.
oddsFormatOptionalOptional. american (default) or decimal. Applies to both soft_price and sharp_price.

Example request

curl "https://api.theoddsapi.com/edges/?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

Account

Your account info and usage stats.

GET /me/

Get My Info

Parameters

No query parameters. Authenticate with the x-api-key header.

Example request

curl "https://api.theoddsapi.com/me/" \
  -H "x-api-key: YOUR_API_KEY"

Historical

Archived odds snapshots for backtesting and model training. Business plan required.

GET /historical/oddsBusiness

Get Historical Odds

Historical odds snapshots from TheOddsAPI archive.

Returns timestamped price snapshots for completed and in-progress events.

Data collected since 2026-05-13, capturing price changes across 20+ sports

and 50+ sportsbooks including Pinnacle, Betfair Exchange, William Hill,

DraftKings, FanDuel, BetMGM, and Marathonbet.

Use cases: Backtesting, model training, line movement analysis.

Coverage: NBA, MLB, NHL, WNBA, NCAAF, NCAAB, Tennis, Cricket, MLS,

EPL, La Liga, Bundesliga, Serie A, Ligue 1, Eredivisie, EFL Championship,

Champions League, Europa League, Liga MX, Euroleague, Boxing, MMA.

More sports added regularly.

Markets: Standard markets (h2h, spreads, totals) for all sports.

Player props for NBA (player_points, player_rebounds, player_assists,

player_points_rebounds_assists), NHL (player_goals, player_shots_on_goal,

player_power_play_points), and MLB (batter_hits, batter_total_bases,

pitcher_strikeouts, batter_home_runs, batter_rbis, batter_runs_scored,

batter_hits_runs_rbis, pitcher_outs). Pass ?market= to filter to a single

market, or omit to receive all available markets for the sport.

Business plan required. Free and Pro tiers return 403.

Coverage gaps: The following sports are listed in /sports/ for live

odds but do NOT have historical snapshots collected: aussierules_afl,

rugbyleague_nrl. Querying these sport_keys will return a 200 with an

explanatory message. Historical coverage for these sports is on the

roadmap.

Parameters

ParameterDescription
sport_keyRequiredRequired. e.g., baseball_mlb, basketball_nba, icehockey_nhl, soccer_epl, etc.
fromOptionalStart of date range (ISO 8601). Default: 7 days ago.
toOptionalEnd of date range (ISO 8601). Default: now.
event_idOptionalFilter to a single event.
bookOptionalDeprecated. Use bookmakers instead. Single bookmaker filter (kept for backward compat).
bookmakersOptionalComma-separated bookmaker keys, max 3. Example: draftkings,fanduel,betmgm. Takes precedence over the deprecated book param.
marketOptionalFilter to a single market. Standard: h2h, spreads, totals. Player props - NBA: player_points, player_rebounds, player_assists, player_points_rebounds_assists. NHL: player_goals, player_shots_on_goal, player_power_play_points. MLB: batter_hits, batter_total_bases, pitcher_strikeouts, batter_home_runs, batter_rbis, batter_runs_scored, batter_hits_runs_rbis, pitcher_outs. Omit to receive all markets for the sport.
limitOptionalPagination limit (max 1000).
offsetOptionalPagination offset.
oddsFormatOptionalOptional. american (default) or decimal.

Example request

curl "https://api.theoddsapi.com/historical/odds?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

GET /historical/settlementsBusiness

Get Historical Settlements

Settlement results for graded edge snapshots - joins edge outcomes with

final scores from the scores table.

Each row shows the original edge (soft book/price/point + sharp reference),

the grading result (hit/miss/push/void), the realized payout (American

odds, 1.0 = +100), and the final score for the event.

Use cases: Strategy backtesting, P&L attribution, edge calibration.

Coverage: Graded edges available from 2026-04-25. Settlements are

written by the grading service after final scores arrive (typically

within a few hours of game end). Stale ungraded edges are voided after

7 days past commence_time.

Business plan required. Free and Pro tiers return 403.

Parameters

ParameterDescription
sport_keyRequiredRequired. e.g., baseball_mlb, basketball_nba, icehockey_nhl.
event_idOptionalFilter to a single event.
marketOptionalFilter by market: h2h, spreads, or totals.
resultOptionalFilter by grading result: hit, miss, push, or void. If omitted, void edges are excluded by default.
limitOptionalPagination limit (max 500).
offsetOptionalPagination offset.

Example request

curl "https://api.theoddsapi.com/historical/settlements?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

Player Props

Player prop markets. NBA, NHL, MLB, WNBA, AFL, NRL · NFL during NFL season. Business plan required.

GET /props/Business

List Props

Player props for the requested sport.

Tier: Business plan or higher. Pro keys receive a 403 with an

upgrade pointer.

Coverage:

  • NBA - 8 markets (points, rebounds, assists, PRA, threes, blocks, steals, double_double).
  • NHL - 5 markets (points, goals, assists, shots on goal, power-play points).
  • MLB - 8 markets (batter hits, batter total bases, pitcher strikeouts, batter home runs, batter RBIs, batter runs scored, batter hits+runs+RBIs, pitcher outs).
  • WNBA - 8 markets (same set as NBA Tier 1; US books only).
  • AFL - 4 Tier 1 markets (disposals_over, goals_scored_over, marks_over, tackles_over); AU books only.
  • NRL - 4 markets (try scorer first/last/anytime, tries scored); AU books only - try-related markets are the full available inventory.

Books include both US (DraftKings, FanDuel, BetMGM, ...) and EU sharps

(Pinnacle for NBA/NHL/MLB), refreshed every few minutes for events starting within 24h.

The regions= filter (us, uk, eu, au) is honored at the route layer and

narrows each market's book list to the requested regions.

Outcome shape:

{ "name": "Over", "description": "LeBron James",
  "price": -115, "point": 25.5 }

name is "Over" or "Under"; description is the player.

Parameters

ParameterDescription
sport_keyRequiredRequired. Supported: basketball_nba, icehockey_nhl, baseball_mlb, basketball_wnba, aussierules_afl, rugbyleague_nrl. Additional sports added based on customer demand.
event_idOptionalOptional. Filter the response to a single event.
marketsOptionalOptional. Comma-separated subset of the supported prop markets for the requested sport. NBA: player_points, player_rebounds, player_assists, player_points_rebounds_assists, player_threes, player_blocks, player_steals, player_double_double. NHL: player_points, player_goals, player_assists, player_shots_on_goal, player_power_play_points. MLB: batter_hits, batter_total_bases, pitcher_strikeouts, batter_home_runs, batter_rbis, batter_runs_scored, batter_hits_runs_rbis, pitcher_outs. WNBA: player_points, player_rebounds, player_assists, player_points_rebounds_assists, player_threes, player_blocks, player_steals, player_double_double. AFL: player_disposals_over, player_goals_scored_over, player_marks_over, player_tackles_over. NRL: player_try_scorer_first, player_try_scorer_last, player_try_scorer_anytime, player_try_scorer_over. Defaults to all markets for the sport.
regionsOptionalOptional. Comma-separated list of bookmaker regions to include. One or more of: us, uk, eu, au. Defaults to all regions (every book the sport has).
oddsFormatOptionalOptional. american (default) or decimal.

Example request

curl "https://api.theoddsapi.com/props/?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

Period Markets

Game-segment markets (e.g., MLB first-5-innings). v1: MLB only. Business plan required.

GET /period-markets/Business

List Period Markets

Period markets - game-segment markets scoped to a portion of a game.

v1 coverage: MLB first-5-innings (h2h_1st_5_innings,

spreads_1st_5_innings, totals_1st_5_innings,

alternate_totals_1st_5_innings).

Tier: Business plan or higher. Pro keys receive a 403 with an

upgrade pointer.

Refresh cadence: 5 minutes during the active window

(T-2h pregame through ~end of the 5th, T+1.5h). Outside that window

the cache is intentionally empty - active_window metadata makes the

"no games right now" vs "outage" distinction explicit.

Books: US sportsbooks plus Pinnacle (via us+eu region pull) as the

sharp anchor for line comparison.

Response shape:

{
  "success": true,
  "source": "cache",
  "data": [
    {
      "event_id":   "...",
      "home_team":  "...",
      "away_team":  "...",
      "start_time": "...",
      "markets": [
        { "market": "totals_1st_5_innings",
          "books": [ { "book": "pinnacle", "outcomes": [...] }, ... ] }
      ]
    }
  ],
  "active_window": {
    "start": "<ISO>",
    "end":   "<ISO>",
    "events_in_window": 0,
    "next_event_at":    "<ISO|null>"
  }
}

Parameters

ParameterDescription
sport_keyRequiredRequired. Supported in v1: baseball_mlb (first-5-innings markets). More sports added based on demand.
event_idOptionalOptional. Filter the response to a single event.

Example request

curl "https://api.theoddsapi.com/period-markets/?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

Additional Markets

Soccer match-level markets beyond h2h/spreads/totals: btts, double_chance, draw_no_bet. v1: FIFA World Cup 2026. Business plan required.

GET /additional/Business

List Additional Markets

Additional markets - soccer match-level markets beyond the standard

h2h / spreads / totals trio.

v1 coverage: World Cup 2026 (soccer_fifa_world_cup) with

btts (both teams to score), double_chance (1X / X2 / 12), and

draw_no_bet (match winner, draw refunds stake).

Tier: Business plan or higher. Pro keys receive a 403 with an

upgrade pointer.

Refresh cadence: 60 seconds during the active window

(T-12h pregame through ~T+2h in-play). Outside that window the cache

is intentionally empty - active_window metadata makes the

"no games right now" vs "outage" distinction explicit.

Books: US + UK + EU sportsbooks. Coverage varies by market -

btts has the widest book coverage (~16 books on a typical event),

draw_no_bet and double_chance are thinner (~10-11 books each).

Response shape:

{
  "success": true,
  "source": "cache",
  "data": [
    {
      "event_id":   "...",
      "home_team":  "...",
      "away_team":  "...",
      "start_time": "...",
      "markets": [
        { "market": "btts",
          "books": [ { "book": "pinnacle", "outcomes": [...] }, ... ] }
      ]
    }
  ],
  "active_window": {
    "start": "<ISO>",
    "end":   "<ISO>",
    "events_in_window": 0,
    "next_event_at":    "<ISO|null>"
  }
}

Parameters

ParameterDescription
sport_keyRequiredRequired. Supported in v1: soccer_fifa_world_cup (btts, double_chance, draw_no_bet).
event_idOptionalOptional. Filter the response to a single event.

Example request

curl "https://api.theoddsapi.com/additional/?sport_key=soccer_fifa_world_cup" \
  -H "x-api-key: YOUR_API_KEY"

Futures

Championship and futures markets - season-long winners and division/conference titles. Business plan required.

GET /futures/Business

List Futures

Futures markets - championship winners, season-long.

Tier: Business plan or higher. Pro keys receive a 403 with an

upgrade pointer.

Coverage (initial launch): NBA, NHL, MLB, World Cup - all currently in

active championship phase. Each response returns the active futures

markets for that sport: championship winners and (where books offer

them) conference / division winners.

Books include both US (DraftKings, FanDuel, BetMGM, ...) and EU sharps

(Pinnacle), refreshed every 30 minutes - futures lines move 1-3 times

per day, tighter cadence wastes credits with no signal gain.

Outcome shape: {"name": "Boston Celtics", "price": 250}. No

point/spread - outright winners are h2h-style team or player names

priced in American odds.

Parameters

ParameterDescription
sport_keyRequiredRequired. Supported: basketball_nba, icehockey_nhl, baseball_mlb, soccer_fifa_world_cup. Additional leagues add as their seasons activate.

Example request

curl "https://api.theoddsapi.com/futures/?sport_key=baseball_mlb" \
  -H "x-api-key: YOUR_API_KEY"

Errors & status codes

Every error returns JSON with a human-readable message.

Code Meaning
400Invalid parameter value. The message lists valid options (for example unknown bookmakers keys or a missing sport_key).
401Missing or unrecognized API key. Send your key in the x-api-key header.
403Endpoint not included in your plan. The response names the required tier.
404Sport or resource not found, or not available on your tier.
422Request failed validation. The response body pinpoints the parameter.
429Monthly request quota reached for your plan.