Odds
Per-book open/close for completed games
GET/v1/odds
Bearer keyCursor paginatedCSV availableReturns OddsRow[]
One row per (game, book). US sportsbooks only. Requires at least one of season, from/to, team, or game_id.
Request
curl
curl "https://api.thebettinginsider.com/v1/odds?sport=nba&game_id=NBA-20231024-LAL-DEN&market=spread" \
-H "Authorization: Bearer tbi_live_YOUR_KEY"Parameters
| Parameter | Type | Description |
|---|---|---|
| sportrequired | enum | Sport. ncaaf is FBS college football.mlbnflncaafnbanhl |
| from | string | Game date (America/New_York), inclusive. YYYY-MM-DD. e.g. 2024-09-08 |
| to | string | Game date (America/New_York), inclusive. YYYY-MM-DD. e.g. 2024-09-08 |
| season | integer | Season label. MLB: calendar year. NFL/NCAAF: year the season started. NBA/NHL: year the season ENDED (2026 = 2025-26). e.g. 2024 |
| team | string | Team id or abbreviation (KC, kansas-city not accepted — use the abbreviation from /v1/teams). e.g. KC |
| game_id | string | Restrict to one game. |
| book | string | Comma-separated book slugs (draftkings,fanduel) or ids. Default: all US books. |
| market | enum | Only rows where this market was priced.moneylinespreadtotalteam_total |
| limit | integer | Page size, 1–1000. Default 100. e.g. 100 |
| cursor | string | Opaque cursor from next_cursor. |
| format | enum | Response format. CSV also via Accept: text/csv.jsoncsv |
Paging and CSV behave the same on every list endpoint — see Pagination & CSV.
Response
Captured from production on 2026-10-13, trimmed to two rows. GET /v1/odds?sport=nba&game_id=NBA-20231024-LAL-DEN&market=spread
200 OK
{
"data": [
{
"game_id": "NBA-20231024-LAL-DEN",
"sport": "nba",
"game_date": "2023-10-24",
"start_time": "2023-10-24T23:30:00.000Z",
"home": "DEN",
"away": "LAL",
"book_id": 1001,
"book": "betonlineag",
"book_name": "BetOnline.ag",
"moneyline": {
"home_open": -189,
"home_close": -179,
"away_open": 165,
"away_close": 160
},
"spread": {
"open": -5,
"close": -5,
"home_juice_open": null,
"home_juice_close": -110,
"away_juice_open": null,
"away_juice_close": -110
},
"total": {
"open": 227.5,
"close": 229,
"over_juice_open": null,
"over_juice_close": -110,
"under_juice_open": null,
"under_juice_close": -110
},
"team_total": {
"home_open": 116.5,
"home_close": 116.5,
"home_over_juice_close": -110,
"home_under_juice_close": -110,
"away_open": 111.5,
"away_close": 112,
"away_over_juice_close": -110,
"away_under_juice_close": -110
},
"result": {
"home_covered": true,
"spread_push": false,
"went_over": false,
"total_push": false
}
},
{
"game_id": "NBA-20231024-LAL-DEN",
"sport": "nba",
"game_date": "2023-10-24",
"start_time": "2023-10-24T23:30:00.000Z",
"home": "DEN",
"away": "LAL",
"book_id": 1002,
"book": "betmgm",
"book_name": "BetMGM",
"moneyline": {
"home_open": -210,
"home_close": -200,
"away_open": 170,
"away_close": 165
},
"spread": {
"open": -4.5,
"close": -4.5,
"home_juice_open": null,
"home_juice_close": -115,
"away_juice_open": null,
"away_juice_close": -105
},
"total": {
"open": 227.5,
"close": 228.5,
"over_juice_open": null,
"over_juice_close": -110,
"under_juice_open": null,
"under_juice_close": -110
},
"team_total": {
"home_open": null,
"home_close": null,
"home_over_juice_close": null,
"home_under_juice_close": null,
"away_open": null,
"away_close": null,
"away_over_juice_close": null,
"away_under_juice_close": null
},
"result": {
"home_covered": true,
"spread_push": false,
"went_over": false,
"total_push": false
}
}
],
"next_cursor": null,
"meta": {
"count": 10,
"request_id": "d6d11e80-b753-41fc-b6eb-3e24ccfb6a0b"
}
}Envelope: { data: OddsRow[], next_cursor: string | null, meta: { count, request_id } }.
OddsRow fields
| Field | Type | Description |
|---|---|---|
| game_id | string | — |
| sport | enum | Sport. ncaaf is FBS college football.mlbnflncaafnbanhl |
| game_date | string | — |
| start_time | string | — |
| home | string | null | Home abbreviation |
| away | string | null | Away abbreviation |
| book_id | integer | — |
| book | string | — |
| book_name | string | — |
| moneyline | object | — |
| moneyline.home_open | integer | null | American odds (e.g. -110). |
| moneyline.home_close | integer | null | American odds (e.g. -110). |
| moneyline.away_open | integer | null | American odds (e.g. -110). |
| moneyline.away_close | integer | null | American odds (e.g. -110). |
| spread | object | — |
| spread.open | number | null | Home spread. Decimal line (e.g. -3.5, 47.5). |
| spread.close | number | null | Home spread. Decimal line (e.g. -3.5, 47.5). |
| spread.home_juice_open | integer | null | American odds (e.g. -110). |
| spread.home_juice_close | integer | null | American odds (e.g. -110). |
| spread.away_juice_open | integer | null | American odds (e.g. -110). |
| spread.away_juice_close | integer | null | American odds (e.g. -110). |
| total | object | — |
| total.open | number | null | Decimal line (e.g. -3.5, 47.5). |
| total.close | number | null | Decimal line (e.g. -3.5, 47.5). |
| total.over_juice_open | integer | null | American odds (e.g. -110). |
| total.over_juice_close | integer | null | American odds (e.g. -110). |
| total.under_juice_open | integer | null | American odds (e.g. -110). |
| total.under_juice_close | integer | null | American odds (e.g. -110). |
| team_total | object | — |
| team_total.home_open | number | null | Decimal line (e.g. -3.5, 47.5). |
| team_total.home_close | number | null | Decimal line (e.g. -3.5, 47.5). |
| team_total.home_over_juice_close | integer | null | American odds (e.g. -110). |
| team_total.home_under_juice_close | integer | null | American odds (e.g. -110). |
| team_total.away_open | number | null | Decimal line (e.g. -3.5, 47.5). |
| team_total.away_close | number | null | Decimal line (e.g. -3.5, 47.5). |
| team_total.away_over_juice_close | integer | null | American odds (e.g. -110). |
| team_total.away_under_juice_close | integer | null | American odds (e.g. -110). |
| result | object | Graded against THIS book's closing number. |
| result.home_covered | boolean | null | — |
| result.spread_push | boolean | null | — |
| result.went_over | boolean | null | — |
| result.total_push | boolean | null | — |
Errors
| Status | When |
|---|---|
| 400 | Invalid parameter |
| 401 | Missing or unknown API key |
| 403 | Key revoked or subscription inactive |
| 429 | Rate limit or monthly quota exceeded (see Retry-After) |
All errors share one envelope — see Errors.