get_odds
Odds for one game, or a whole season of closing lines in one call, with bookmaker and snapshot filters.
When to use it
You want betting lines. Pass game_id for one game (10 credits). Pass season, optionally with team, for a season of closing lines with final scores in one call at 10 credits per game returned (a full season is about 13,700 credits, one team's season about 820); pages are 100 games by default, up to 500. Set estimate_only to see the price first without being charged.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| game_id | string | no | Game ID (e.g. "2025020887"). Omit and pass season for a whole season. |
| season | string | no | Season for a whole season of lines, e.g. "2025-26" |
| team | string | no | With season: one team's games (e.g. "BUF") |
| bookmaker | string | no | Filter by bookmaker (e.g. "draftkings") |
| snapshot_type | string | no | "opening" (game-day morning; for a game not yet played, the latest morning line) or "closing" (final pre-game). Single game: default both. Season: default closing. |
| all_books | boolean | no | With season: every book held (60+ from 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET |
| limit | integer | no | With season: games per page (default 100, max 500) |
| offset | integer | no | With season: next_offset from the previous page |
| estimate_only | boolean | no | Return the credit cost of this call without charging or running it |
Request
curl -X POST https://mcp.puckapi.com/v1/get_odds \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"game_id": "2025020887",
"bookmaker": "draftkings"
}'Over MCP, ask for it in plain English and the client calls get_odds itself. Point any MCP client at https://mcp.puckapi.com/mcp?key=YOUR_API_KEY.
Response
{
"game_id": "2025020887",
"home_team": "BUF",
"away_team": "TOR",
"game_date": "2026-03-15",
"odds": [
{
"bookmaker": "draftkings",
"snapshotType": "opening",
"mlHome": -115,
"mlAway": -105,
"mlHomeProb": 0.535,
"mlAwayProb": 0.512,
"spreadHome": -1.5,
"spreadHomeOdds": 170,
"spreadAway": 1.5,
"spreadAwayOdds": -200,
"total": 6,
"totalOverOdds": -110,
"totalUnderOdds": -110,
"capturedAt": "2026-03-14T12:00:00Z"
},
{
"bookmaker": "draftkings",
"snapshotType": "closing",
"mlHome": -125,
"mlAway": 105,
"mlHomeProb": 0.556,
"mlAwayProb": 0.488,
"spreadHome": -1.5,
"spreadHomeOdds": 165,
"spreadAway": 1.5,
"spreadAwayOdds": -195,
"total": 6.5,
"totalOverOdds": -110,
"totalUnderOdds": -110,
"capturedAt": "2026-03-15T18:50:00Z"
}
],
"bookmaker_count": 1
}Response fields
| Field | Type | Description |
|---|---|---|
| game_id | string | Game ID |
| home_team | string | Home team abbreviation |
| away_team | string | Away team abbreviation |
| odds[].bookmaker | string | Bookmaker name |
| odds[].snapshotType | string | opening or closing |
| odds[].mlHome | integer | Home moneyline |
| odds[].mlAway | integer | Away moneyline |
| odds[].mlHomeProb | number | Implied home win probability |
| odds[].mlAwayProb | number | Implied away win probability |
| odds[].spreadHome | number | Home puck line |
| odds[].spreadHomeOdds | integer | Home spread price |
| odds[].spreadAway | number | Away puck line |
| odds[].spreadAwayOdds | integer | Away spread price |
| odds[].total | number | Over/under total |
| odds[].totalOverOdds | integer | Over price |
| odds[].totalUnderOdds | integer | Under price |
| odds[].capturedAt | string | Timestamp of snapshot |
| bookmaker_count | integer | Number of bookmakers returned |
| games[] (season) | array | Season mode: each game with date, teams, final score and books |
| games[].books (season) | object | Season mode: bookmaker -> line array in the order of columns |
| columns (season) | array | ml_home, ml_away, spread_home, spread_home_odds, spread_away_odds, total, over_odds, under_odds |
| next_offset (season) | integer | Offset for the next page, or null on the last |
Related endpoints
Takes the game_id this one returns.
Full game detail including odds snapshots and the goalies who started, with time on ice.
Takes the game_id this one returns.
Time-series odds snapshots grouped by bookmaker. Shows how lines moved from open to close.
Returns the team this one takes.
All 32 active NHL teams with divisions, conferences, and arenas.
Returns the game_id this one takes.
Upcoming games for the next N days. Defaults to 7 days.
Try it
500 credits free on signup — 50 calls to get_odds — and no card.