Skip to content

Data

NHL player props by sportsbook, from 2023

NHL player prop lines by sportsbook since May 2023, opening and closing, with each player's history against his line. REST or MCP.

PuckAPI serves NHL player prop lines by sportsbook for the games The Odds API's archive holds, which starts May 3 2023: points, goals, assists, shots on goal, blocked shots, goalie saves and anytime goal scorer, each with the book's line and its over and under prices.

It is built for backtesting props models. One call returns every player's props for a game; another returns one player's lines across a date range; and get_prop_history sets a player's closing line beside what he actually recorded, game by game, with the over rate. Lines carry our NHL player id where the name matches a player in that game's play-by-play. The table below is read from the database.

Coverage by season

Counted from the database on October 10, 2026: finished regular-season and playoff games.

SeasonGamesCoveredProp lines
2026-27694%1,210
2025-261,3945%27,999
2024-251,39822%128,662
2023-241,40027%156,041
2022-231,4001%2,931

How to get it

get_player_props, 10 credits a call.

curl -X POST https://mcp.puckapi.com/v1/get_player_props \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
  "game_id": "2024020500",
  "market": "player_shots_on_goal"
}'

What comes back

snapshot_typeopening or closing
gamesGames the rows come from
props[]One row per book, market and player
props[].player_nameThe player as the book spells him
props[].player_idOur player id where the name matched a player in that game; null otherwise
props[].marketThe Odds API market key, e.g. player_shots_on_goal
props[].bookmakerBookmaker key
props[].lineThe line; null for anytime goal scorer
props[].over_oddsAmerican price on the over (the Yes price for anytime goal scorer)
props[].under_oddsAmerican price on the under
props[].captured_atWhen the book posted this line, always before puck drop
countRows returned

Every field and a real response: get_player_props docs.

Questions

How far back do the NHL player props go?

The archive starts May 3 2023, so nothing is earlier, and it holds the games it holds: the table on this page is the live coverage by season, counted from the database.

Which sportsbooks and markets?

Markets: points, goals, assists, shots on goal, blocked shots, goalie saves and anytime goal scorer. Books: DraftKings, FanDuel, BetMGM, ESPN BET, Pinnacle, BetOnline, MyBookie and Bovada, where the archive has them for a game. Pass bookmaker to filter to one.

Opening or closing line?

get_player_props returns the closing line by default, the last one captured before the game starts, or the opening line with snapshot_type: opening. For past games the archive was sampled once near the start, so the two are usually the same capture; an earlier capture exists only where one was taken.

What does it cost?

Priced per game returned: one game's props for every player, or one player's props for each game in a date range, at the credits a call shows above, and get_prop_history is a fixed price a call. estimate_only returns the price of any call before you run it. Every account starts with 500 free credits.

Can I match props to what actually happened?

Yes. get_prop_history takes a player id and a market and returns each game's closing line, what he recorded, and over, under or push. The same id works in the box score tools, so a game's result is one call away.

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 a player's props in plain English.

What it will not do

  • The markets above only: no alternate lines, no futures, no live in-game props and no fantasy-score props.
  • Pre-game lines only. A capture at or after the start of the game is never served.
  • A line carries a player id only when its name matches a player in that game's play-by-play; otherwise the name is still served, without one.
  • Nothing before May 3 2023. For past games the opening and closing line are usually one capture, as the archive was sampled once near the start.

Works with

Start with 500 free credits

No card. REST or MCP.