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

ParameterTypeDescription
sportrequiredenumSport. ncaaf is FBS college football.mlbnflncaafnbanhl
fromstringGame date (America/New_York), inclusive. YYYY-MM-DD. e.g. 2024-09-08
tostringGame date (America/New_York), inclusive. YYYY-MM-DD. e.g. 2024-09-08
seasonintegerSeason label. MLB: calendar year. NFL/NCAAF: year the season started. NBA/NHL: year the season ENDED (2026 = 2025-26). e.g. 2024
teamstringTeam id or abbreviation (KC, kansas-city not accepted — use the abbreviation from /v1/teams). e.g. KC
game_idstringRestrict to one game.
bookstringComma-separated book slugs (draftkings,fanduel) or ids. Default: all US books.
marketenumOnly rows where this market was priced.moneylinespreadtotalteam_total
limitintegerPage size, 1–1000. Default 100. e.g. 100
cursorstringOpaque cursor from next_cursor.
formatenumResponse 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

FieldTypeDescription
game_idstring—
sportenumSport. ncaaf is FBS college football.mlbnflncaafnbanhl
game_datestring—
start_timestring—
homestring | nullHome abbreviation
awaystring | nullAway abbreviation
book_idinteger—
bookstring—
book_namestring—
moneylineobject—
moneyline.home_openinteger | null American odds (e.g. -110).
moneyline.home_closeinteger | null American odds (e.g. -110).
moneyline.away_openinteger | null American odds (e.g. -110).
moneyline.away_closeinteger | null American odds (e.g. -110).
spreadobject—
spread.opennumber | nullHome spread. Decimal line (e.g. -3.5, 47.5).
spread.closenumber | nullHome spread. Decimal line (e.g. -3.5, 47.5).
spread.home_juice_openinteger | null American odds (e.g. -110).
spread.home_juice_closeinteger | null American odds (e.g. -110).
spread.away_juice_openinteger | null American odds (e.g. -110).
spread.away_juice_closeinteger | null American odds (e.g. -110).
totalobject—
total.opennumber | null Decimal line (e.g. -3.5, 47.5).
total.closenumber | null Decimal line (e.g. -3.5, 47.5).
total.over_juice_openinteger | null American odds (e.g. -110).
total.over_juice_closeinteger | null American odds (e.g. -110).
total.under_juice_openinteger | null American odds (e.g. -110).
total.under_juice_closeinteger | null American odds (e.g. -110).
team_totalobject—
team_total.home_opennumber | null Decimal line (e.g. -3.5, 47.5).
team_total.home_closenumber | null Decimal line (e.g. -3.5, 47.5).
team_total.home_over_juice_closeinteger | null American odds (e.g. -110).
team_total.home_under_juice_closeinteger | null American odds (e.g. -110).
team_total.away_opennumber | null Decimal line (e.g. -3.5, 47.5).
team_total.away_closenumber | null Decimal line (e.g. -3.5, 47.5).
team_total.away_over_juice_closeinteger | null American odds (e.g. -110).
team_total.away_under_juice_closeinteger | null American odds (e.g. -110).
resultobjectGraded against THIS book's closing number.
result.home_coveredboolean | null—
result.spread_pushboolean | null—
result.went_overboolean | null—
result.total_pushboolean | null—

Errors

StatusWhen
400Invalid parameter
401Missing or unknown API key
403Key revoked or subscription inactive
429Rate limit or monthly quota exceeded (see Retry-After)

All errors share one envelope — see Errors.