NHL historical odds and closing lines
Moneyline, puck line and total for every NHL game since 2019-20, by sportsbook: 16 to 18 books a game to 2023-24, 8 since, 60+ on about 300 in 2025-26. REST or MCP.
PuckAPI serves historical NHL betting odds: moneyline, puck line and total for every regular-season and playoff game since 2019-20, plus part of the 2019 playoffs, by sportsbook: about 16 to 18 books a game from 2020-21 to 2023-24, about 6 in 2019-20, 8 in 2024-25, and in 2025-26 eight on every game and more than 60, the exchanges included, on about 300.
It is built for backtesting. Pull a whole season of closing lines in one call, line them up against your own projections, and measure closing line value, which is the only honest scoreboard for a betting model. The table below is read from the database, so it is what you will actually get.
Coverage by season
Counted from the database on November 10, 2026: finished regular-season and playoff games.
| Season | Games | Covered |
|---|---|---|
| 2026-27 | 285 | 100% |
| 2025-26 | 1,394 | 100% |
| 2024-25 | 1,398 | 100% |
| 2023-24 | 1,400 | 100% |
| 2022-23 | 1,400 | 100% |
| 2021-22 | 1,401 | 100% |
| 2020-21 | 952 | 100% |
| 2019-20 | 1,212 | 100% |
| 2018-19 | 1,358 | 1% |
How to get it
get_odds, 10 credits a call. A full 2025-26 season is 3 calls and 13,940 credits, which fits in one month of Pro ($49/mo). In Python, pip install puckapi and set PUCKAPI_API_KEY.
curl -X POST https://mcp.puckapi.com/v1/get_odds \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"season": "2025-26",
"team": "BUF"
}'What comes back
| game_id | Game ID |
| home_team | Home team abbreviation |
| away_team | Away team abbreviation |
| odds[].bookmaker | Bookmaker name |
| odds[].snapshotType | opening, closing, first (each book's first posted line, from October 2026) or a time-of-day snapshot |
| odds[].mlHome | Home moneyline |
| odds[].mlAway | Away moneyline |
| odds[].mlHomeProb | Implied home win probability |
| odds[].mlAwayProb | Implied away win probability |
| odds[].spreadHome | Home puck line |
| odds[].spreadHomeOdds | Home spread price |
| odds[].spreadAway | Away puck line |
| odds[].spreadAwayOdds | Away spread price |
| odds[].total | Over/under total |
Every field and a real response: get_odds docs.
Questions
How far back do the NHL odds go?
Every regular-season and playoff game from 2019-20 on, plus 18 games of the 2019 playoffs. Nothing earlier: the sources keep no NHL lines before that. The table on this page is the live coverage by season.
Which sportsbooks are included?
Seven books, among them DraftKings, FanDuel, BetMGM and Pinnacle, every season from 2020-21 with opening and closing lines (one of them on about 60% of games in 2023-24 and 2024-25), ESPN BET from 2023-24, Bet365, Caesars, Betfair, Unibet, PointsBet and others with closing lines from 2019-20 to 2023-24, and in 2025-26 more than 60 books on about 300 games, including Pinnacle and the exchanges. You can filter to one book.
How do I get a whole season?
Call get_odds with a season, optionally with a team, and every closing line comes back with the final scores in one call, 100 games a page (up to 500). It costs 10 credits per game returned, the same as asking one game at a time: a full season is about 13,700 credits, inside one month of the Pro plan. Add estimate_only to see the price first for free.
Can I use it from Claude or ChatGPT?
Yes. PuckAPI is an MCP server as well as a REST API: add one URL to Claude, Cursor or any MCP client and ask for the closing lines in plain English.
Is it free?
Every account gets 500 free credits every month and no card. Plans start at $19 a month for 10,000 credits.
What it will not do
- Opening and closing prices only for past seasons. Line movement is recorded from September 2026 on, as up to seven snapshots a day per book.
- Before 2023-24 the opening line comes from the seven books the sportsbook odds archive carries (among them DraftKings, FanDuel, BetMGM and Pinnacle); the extra books carry the closing line only. Game lines only: no futures. Player props are a separate dataset (get_player_props, from May 2023).
Works with
Start with 500 free credits every month
No card. REST or MCP.