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 anopening price (the first price seen before kickoff, or null if none was recorded) and a last_seen price (the latest one).
Response
Live (in-play) odds
Poll this during the match whenlive_odds_available is true. Bookmakers and markets come and go as books suspend and reopen.
Response
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
- 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_targetorplayer_passes) have one entry per player, line and direction, withlineandmarket_type. Other markets have neither field. - Join players to other endpoints on
id, notname: names can be spelled differently (here “Viktor Gyokeres”, but “Viktor Gyökeres” in/football/players).idcan benullwhen the player can’t be matched to one ID; fall back tonamethen.
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
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.