NHL play-by-play
Pro plan or higher: all NHL play-by-play requires Pro; Free / Solo / Trio / Edge receive a 403 naming the tier and linking the docs and pricing pages. Mirrors NFL and NBA play-by-play's tier ("all play by play is pro"); NBA's Edge-and-up gate was retired on 2026-09-18.
nhl_play_by_play mirrors nba_play_by_play's schema (migration 057). Two columns the migration declares are 0% populated in production (verified against all 434,815 rows) and are never served: text and score_value. team_id (~84%) and coordinate_x/ coordinate_y (~83%) are null on faceoffs/stoppages with no team or spatial attribution; home_score/away_score (~2%) are stamped only on the goal event itself. shooting_only=true turns the response into a shot-chart feed and adds our licensed play-derived xG, distance, angle, rebound, rush and empty-net fields where the xG model covers the event. Coverage includes the complete 2025-26 season; the licensed 2026-27 feed begins with the September 29 regular-season opener.
Request
- Base URL: https://api.bigballsdata.com
- URL: https://api.bigballsdata.com/v1/nhl/games/{game_id}/plays
- Auth: one of:
- API key in header x-api-key
- HTTP bearer
Path parameters
Query parameters
Return scoring plays only. Accepted: true|1|yes|on and false|0|no|off; anything else is a 400 naming the parameter.
Return shot events only; rows include shot geometry and computed xG fields when available. Accepted: true|1|yes|on and false|0|no|off; anything else is a 400 naming the parameter. false means OFF. Measured 2026-09-20 on game 9aac43c2-...-d4127f1f7147, ?shooting_only=false returned 119 of 361 plays because Boolean("false") is true.
Response
ok. { data, pagination, meta }; meta.pbp_available: false when the match exists but this vendor never covered it.
Changes
No recorded changes to this operation across all 3 revisions of this API.