Skip to main content
Use this page to get betting odds for a match: before kickoff, in play, and for player props.
Fastest way: ask your AI. Set up your coding tool once with Build with AI, then paste:
Prompt

Bookmakers

On pre-match and player-prop odds, pass one or more slugs, comma-separated, to filter (?bookmaker=bet365,pinnacle). Leave it out to get every bookmaker. An unknown slug returns 400. Live odds come from Bet365, Paddy Power, BetMGM UK and Betfair Exchange. Prices are decimal odds only; convert them yourself if you need fractional or American. Pre-match and live prices are strings such as "1.380"; player-prop prices are numbers.

Check the flags first

/odds and /odds/live return 404 when the match has no odds of that kind. The JavaScript examples run on your server and read your key from the THESTATSAPI_API_KEY environment variable.

Pre-match odds

Each selection has an opening price (the first price seen before kickoff, or null if none was recorded) and a last_seen price (the latest one).
Response (Arsenal v Leeds United, trimmed):
Response
Markets include match result (full time and half time), both teams to score, goals, corners and cards lines, Asian and European handicaps, team totals, shots, correct score, to qualify and penalty specials. A market only appears when that bookmaker prices it, so check that a key exists before you read it. The endpoint works for upcoming and finished matches.

Live (in-play) odds

Poll this during the match when live_odds_available is true. Bookmakers and markets come and go as books suspend and reopen.
Response (West Ham United v Queens Park Rangers, in play, trimmed):
Response
Each price has a single live value. Betfair Exchange also returns the order book: up to 3 levels of available_to_back and available_to_lay, best price first. After full time this endpoint returns 404 (“Match is already completed”). See Live matches for polling tips.

Player-prop odds

Use the v2 endpoint. It returns the latest prices grouped by bookmaker (Bet365 first), then by market.
Response (trimmed):
Response
  • Markets cover goalscorers, shots, assists, cards, tackles, fouls, passes, goalkeeper saves and player of the match. Which ones you get depends on the bookmaker and the match.
  • Line markets (such as player_shots_on_target or player_passes) have one entry per player, line and direction, with line and market_type. Other markets have neither field.
  • Join players to other endpoints on id, not name: names can be spelled differently (here “Viktor Gyokeres”, but “Viktor Gyökeres” in /football/players). id can be null when the player can’t be matched to one ID; fall back to name then.
/football/matches/{match_id}/odds/players (v1, Bet365 only, 5 markets) is deprecated. Use /v2/football/matches/{match_id}/odds/players.

Check odds coverage before you build

Odds history varies by competition and season. Use the coverage endpoints to see what each season has. opening_odds and closing_odds are separate data types.
Response (two seasons, trimmed):
Response
So for the Premier League, 26/27 has opening and closing prices, while 25/26 has closing prices only. Older matches mostly have Bet365 closing prices only: opening is null and last_seen holds the closing price. Counts only include finished matches. See Odds history for more. To list every competition with a given odds data type, use GET /coverage/leagues?data_type=closing_odds (or odds, opening_odds). See Coverage.

API reference