NHL (coming soon)

Coming soon22 tables

Every NHL game across the 82-game regular season and the four-round Stanley Cup Playoffs — with the players, forward lines, defensive pairings, goalie depth, scoring plays, penalties, and game-odds behind them. Data coming soon to production.

Machine-readable spec: /api/openapi/public.json (OpenAPI 3.1)

Main· 4 tables

seasonsnhl.seasons
Each NHL season — preseason exhibitions, the 82-game regular season, and the Stanley Cup Playoffs (Wild Card, Divisional, Conference Finals, Stanley Cup Finals).
Fields10
FieldTypeReferencesDescription
idkeybigintPrimary Key
league_idstringnullableOfficial NHL season identifier
e.g. — (all-null in sample)
short_idstring
e.g. — (all-null in sample)
descriptionstringnullable
e.g. — (all-null in sample)
end_datetimestamptznullable
e.g. — (all-null in sample)
post_season_start_datetimestamptznullable
e.g. — (all-null in sample)
regular_season_start_datetimestamptznullable
e.g. — (all-null in sample)
stanley_cup_finals_datetimestamptznullable
e.g. — (all-null in sample)
start_datetimestamptz
e.g. — (all-null in sample)
start_yearinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/seasons
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/seasons?limit=3'
Responses
200seasons rows matching the declared filter set, wrapped in { seasons, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/seasons/{id}
Parameters
idpathbigintrequired
Primary key (id) of the season row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/seasons/{pk_value}'
Responses
200Single season row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
teamsnhl.teams
The 32 NHL franchises, organized into the Eastern and Western Conferences with two divisions each (Atlantic, Metropolitan, Central, Pacific).
Fields18
FieldTypeReferencesDescription
idkeybigintPrimary Key
arena_idbigintnullable
e.g. — (all-null in sample)
league_team_idintegernullableOfficial NHL team ID from api-web.nhle.com
e.g. — (all-null in sample)
abbreviationstring
e.g. — (all-null in sample)
activeboolean
e.g. — (all-null in sample)
citystring
e.g. — (all-null in sample)
conferencestring
e.g. — (all-null in sample)
divisionstring
e.g. — (all-null in sample)
full_namestring
e.g. — (all-null in sample)
head_coachstringnullable
e.g. — (all-null in sample)
logo_urlstringnullableURL to team logo image
e.g. — (all-null in sample)
namestring
e.g. — (all-null in sample)
primary_colorstringnullable
e.g. — (all-null in sample)
quaternary_colorstringnullable
e.g. — (all-null in sample)
secondary_colorstringnullable
e.g. — (all-null in sample)
tertiary_colorstringnullable
e.g. — (all-null in sample)
wikipedia_logo_urlstringnullable
e.g. — (all-null in sample)
wikipedia_wordmark_urlstringnullable
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/teams
Parameters
activequerybooleanoptional
Filter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/teams?limit=3'
Responses
200teams rows matching the declared filter set, wrapped in { teams, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/teams/{id}
Parameters
idpathbigintrequired
Primary key (id) of the team row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/teams/{pk_value}'
Responses
200Single team row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
playersnhl.players
Every individual who has played in the NHL — current rosters, AHL call-ups, free agents, and retired players, with their shooting hand, position, and home country.
Fields35
FieldTypeReferencesDescription
idkeybigintPrimary Key
draft_team_idbigintnullable
e.g. — (all-null in sample)
league_idstringnullableOfficial NHL player identifier
e.g. — (all-null in sample)
league_player_idintegerOfficial NHL player ID from api-web.nhle.com
e.g. — (all-null in sample)
team_idbigintnullable
e.g. — (all-null in sample)
birth_citystringnullable
e.g. — (all-null in sample)
birth_countrystringnullable
e.g. — (all-null in sample)
birth_datedatenullable
e.g. — (all-null in sample)
birth_statestringnullable
e.g. — (all-null in sample)
catchesstringnullable
e.g. — (all-null in sample)
collegestringnullable
e.g. — (all-null in sample)
draft_overall_pickintegernullable
e.g. — (all-null in sample)
draft_pickintegernullable
e.g. — (all-null in sample)
draft_roundintegernullable
e.g. — (all-null in sample)
draft_yearintegernullable
e.g. — (all-null in sample)
experienceintegernullableYears of NHL experience
e.g. — (all-null in sample)
first_namestring
e.g. — (all-null in sample)
full_namestring
e.g. — (all-null in sample)
heightintegernullableHeight in inches
e.g. — (all-null in sample)
injury_body_partstringnullable
e.g. — (all-null in sample)
injury_notesstringnullable
e.g. — (all-null in sample)
injury_start_datetimestamptznullable
e.g. — (all-null in sample)
injury_statusstringnullable
e.g. — (all-null in sample)
jerseystringnullable
e.g. — (all-null in sample)
last_namestring
e.g. — (all-null in sample)
nationalitystringnullable
e.g. — (all-null in sample)
photo_urlstringnullableURL to player headshot image
e.g. — (all-null in sample)
position_categorystringnullable
e.g. — (all-null in sample)
primary_positionstring
e.g. — (all-null in sample)
rookie_yearintegernullable
e.g. — (all-null in sample)
shootsstringnullable
e.g. — (all-null in sample)
statusstringnullable
e.g. — (all-null in sample)
weightintegernullableWeight in pounds
e.g. — (all-null in sample)
youth_leaguestringnullable
e.g. — (all-null in sample)
youth_teamstringnullable
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/players
Parameters
team_idquerybigintoptional
Filter to players whose current team_id matches. Null team_id rows (free agents, retired) are excluded when this filter is applied.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/players?limit=3'
Responses
200players rows matching the declared filter set, wrapped in { players, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/players/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/players/{pk_value}'
Responses
200Single player row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
gamesnhl.games
Every scheduled and played NHL game — preseason, the 82-game regular season, and the four-round Stanley Cup Playoffs through the Stanley Cup Final.
Fields37
FieldTypeReferencesDescription
idkeybigintPrimary Key
arena_idbigintnullable
e.g. — (all-null in sample)
away_team_idbigint
e.g. — (all-null in sample)
home_team_idbigint
e.g. — (all-null in sample)
league_game_idintegernullableOfficial NHL game ID from api-web.nhle.com
e.g. — (all-null in sample)
league_idstringnullableOfficial NHL game identifier
e.g. — (all-null in sample)
season_idbigint
e.g. — (all-null in sample)
attendanceintegernullable
e.g. — (all-null in sample)
away_team_scoreintegernullable
e.g. — (all-null in sample)
away_team_score_overtimeintegernullable
e.g. — (all-null in sample)
away_team_score_period1integernullable
e.g. — (all-null in sample)
away_team_score_period2integernullable
e.g. — (all-null in sample)
away_team_score_period3integernullable
e.g. — (all-null in sample)
away_team_series_winsintegernullable
e.g. — (all-null in sample)
channelstringnullable
e.g. — (all-null in sample)
date_timetimestamptz
e.g. — (all-null in sample)
date_time_utctimestamptznullable
e.g. — (all-null in sample)
dayintegerCalendar day as a YYYYMMDD integer (e.g. 20240915), US Eastern.
e.g. — (all-null in sample)
game_timetimestamptz
e.g. — (all-null in sample)
home_team_scoreintegernullable
e.g. — (all-null in sample)
home_team_score_overtimeintegernullable
e.g. — (all-null in sample)
home_team_score_period1integernullable
e.g. — (all-null in sample)
home_team_score_period2integernullable
e.g. — (all-null in sample)
home_team_score_period3integernullable
e.g. — (all-null in sample)
home_team_series_winsintegernullable
e.g. — (all-null in sample)
is_overtimeboolean
e.g. — (all-null in sample)
is_shootoutboolean
e.g. — (all-null in sample)
last_playstringnullable
e.g. — (all-null in sample)
neutral_siteboolean
e.g. — (all-null in sample)
overtime_periodsintegernullable
e.g. — (all-null in sample)
periodstringnullableCurrent period (1, 2, 3, OT, SO, Final)
e.g. — (all-null in sample)
playoff_roundstringnullableFirst Round, Second Round, Conference Finals, Stanley Cup Final
e.g. — (all-null in sample)
season_typeinteger1=Regular, 2=Preseason, 3=Postseason, 4=All-Star
e.g. — (all-null in sample)
series_game_numberintegernullable
e.g. — (all-null in sample)
statusstring
e.g. — (all-null in sample)
time_remaining_minutesintegernullable
e.g. — (all-null in sample)
time_remaining_secondsintegernullable
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/games
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
home_team_idquerybigintoptional
Filter by home team.
away_team_idquerybigintoptional
Filter by away team.
statusquerystringoptional
Filter by game status.
dayqueryintegeroptional
Filter by calendar day (YYYY-MM-DD date) — e.g. day=2026-06-09 for today's slate. season_id defaults to the current season; pass it explicitly for past-season days. Range syntax: day__gte=, day__lte=, day__between=.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/games?season_id=2025'
Responses
200games rows matching the declared filter set, wrapped in { games, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/games/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/games/{pk_value}'
Responses
200Single game row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.

Plays· 3 tables

penaltiesnhl.penalties
Every penalty assessed in every NHL game — the player penalized, the infraction (hooking, tripping, slashing, etc.), the minutes assessed (2-minute minor, 4-minute double minor, 5-minute major, game misconduct, match penalty), and the resulting power play.
Fields12
FieldTypeReferencesDescription
idkeybigintPrimary Key
drawn_by_player_idbigintnullable
e.g. — (all-null in sample)
game_idbigint
e.g. — (all-null in sample)
penalty_idinteger
e.g. — (all-null in sample)
player_idbigintnullable
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
descriptionstringnullable
e.g. — (all-null in sample)
is_bench_penaltyboolean
e.g. — (all-null in sample)
penalty_minutesinteger
e.g. — (all-null in sample)
penalty_typestring
e.g. — (all-null in sample)
period_numberinteger
e.g. — (all-null in sample)
time_remainingstringTime remaining in period (MM:SS)
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/penalties
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
team_idquerybigintoptional
Filter by penalized team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/penalties?game_id=1'
Responses
200penalties rows matching the declared filter set, wrapped in { penalties, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/penalties/{id}
Parameters
idpathbigintrequired
Primary key (id) of the penalty row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/penalties/{pk_value}'
Responses
200Single penalty row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
periodsnhl.periods
Per-period scores for every NHL game — the three regulation periods plus any overtime and the shootout, with the away and home goals in each. (Shots and penalties per period are not carried here.)
Fields8
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
e.g. — (all-null in sample)
league_game_idinteger
e.g. — (all-null in sample)
period_idinteger
e.g. — (all-null in sample)
away_team_scoreinteger
e.g. — (all-null in sample)
home_team_scoreinteger
e.g. — (all-null in sample)
namestring1, 2, 3, OT, OT2, SO
e.g. — (all-null in sample)
period_numberinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/periods
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/periods?game_id=1'
Responses
200periods rows matching the declared filter set, wrapped in { periods, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/periods/{id}
Parameters
idpathbigintrequired
Primary key (id) of the period row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/periods/{pk_value}'
Responses
200Single period row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
scoring_playsnhl.scoring_plays
Every goal scored in every NHL game — the scorer, the assists, the goaltender beaten, the strength (even strength, power play, short-handed), and the score state when the goal went in.
Fields13
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
e.g. — (all-null in sample)
primary_assist_player_idbigintnullable
e.g. — (all-null in sample)
scored_by_player_idbigintnullable
e.g. — (all-null in sample)
scoring_play_idinteger
e.g. — (all-null in sample)
secondary_assist_player_idbigintnullable
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
away_team_scoreinteger
e.g. — (all-null in sample)
descriptionstringnullable
e.g. — (all-null in sample)
goal_typestringnullable
e.g. — (all-null in sample)
home_team_scoreinteger
e.g. — (all-null in sample)
period_numberinteger
e.g. — (all-null in sample)
time_remainingstringTime remaining in period (MM:SS)
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/scoring_plays
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
team_idquerybigintoptional
Filter by scoring team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/scoring_plays?game_id=1'
Responses
200scoring_plays rows matching the declared filter set, wrapped in { scoring_plays, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/scoring_plays/{id}
Parameters
idpathbigintrequired
Primary key (id) of the scoring_play row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/scoring_plays/{pk_value}'
Responses
200Single scoring_play row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.

Stats· 7 tables

operator_team_lookupsnhl.operator_team_lookups
How each sportsbook and fantasy operator names every NHL team — the mapping from each operator's team code to the unified franchise record.
Fields6
FieldTypeReferencesDescription
idkeybigintPrimary Key
operator_idbigintOperator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io.
e.g. — (all-null in sample)
operator_team_idstringExternal team ID from operator
e.g. — (all-null in sample)
team_idbigintInternal nhl.teams.id reference
e.g. — (all-null in sample)
abbreviationstringnullableTeam abbreviation for reconciliation
e.g. — (all-null in sample)
team_namestringnullableTeam name for reconciliation
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/operator_team_lookups
Requires one of: operator_id — requests satisfying none of these return 400.
Parameters
operator_idquerybigintoptional
Filter by operator.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/operator_team_lookups?operator_id=1'
Responses
200operator_team_lookups rows matching the declared filter set, wrapped in { operator_team_lookups, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/operator_team_lookups/{id}
Parameters
idpathbigintrequired
Primary key (id) of the operator_team_lookup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/operator_team_lookups/{pk_value}'
Responses
200Single operator_team_lookup row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
season_team_statsnhl.season_team_stats
Season totals for each NHL team — wins, losses, overtime losses, points, goals for and against, shooting percentage, save percentage, power-play and penalty-kill efficiency, faceoff percentages.
Fields36
FieldTypeReferencesDescription
idkeybigintPrimary Key
season_idbigint
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
blocked_shotsinteger
e.g. — (all-null in sample)
faceoff_lossesinteger
e.g. — (all-null in sample)
faceoff_percentagedecimal
e.g. — (all-null in sample)
faceoff_winsinteger
e.g. — (all-null in sample)
games_playedinteger
e.g. — (all-null in sample)
giveawaysinteger
e.g. — (all-null in sample)
goal_differentialinteger
e.g. — (all-null in sample)
goals_againstinteger
e.g. — (all-null in sample)
goals_against_averagedecimal
e.g. — (all-null in sample)
goals_against_per_gamedecimal
e.g. — (all-null in sample)
goals_forinteger
e.g. — (all-null in sample)
goals_per_gamedecimal
e.g. — (all-null in sample)
hitsinteger
e.g. — (all-null in sample)
lossesinteger
e.g. — (all-null in sample)
overtime_lossesinteger
e.g. — (all-null in sample)
penalty_kill_goals_againstinteger
e.g. — (all-null in sample)
penalty_kill_percentagedecimal
e.g. — (all-null in sample)
penalty_minutesinteger
e.g. — (all-null in sample)
power_play_goalsinteger
e.g. — (all-null in sample)
power_play_opportunitiesinteger
e.g. — (all-null in sample)
power_play_percentagedecimal
e.g. — (all-null in sample)
ptsinteger
e.g. — (all-null in sample)
pts_percentagedecimal
e.g. — (all-null in sample)
save_percentagedecimal
e.g. — (all-null in sample)
season_typeinteger1=Regular, 2=Preseason, 3=Postseason
e.g. — (all-null in sample)
shooting_percentagedecimal
e.g. — (all-null in sample)
short_handed_goalsinteger
e.g. — (all-null in sample)
shots_againstinteger
e.g. — (all-null in sample)
shots_forinteger
e.g. — (all-null in sample)
shutoutsinteger
e.g. — (all-null in sample)
takeawaysinteger
e.g. — (all-null in sample)
times_shorthandedinteger
e.g. — (all-null in sample)
winsinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/season_team_stats
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a single season. Defaults to the current season.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/season_team_stats?season_id=2025'
Responses
200season_team_stats rows matching the declared filter set, wrapped in { season_team_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/season_team_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the season_team_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/season_team_stats/{pk_value}'
Responses
200Single season_team_stat row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
standingsnhl.standings
Current conference and division standings for the NHL season — wins, losses, overtime losses, points, points percentage, games behind, and home/away splits. One snapshot per team per season (no as-of-date history).
Fields36
FieldTypeReferencesDescription
idkeybigintPrimary Key
season_idbigint
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
away_lossesinteger
e.g. — (all-null in sample)
away_overtime_lossesinteger
e.g. — (all-null in sample)
away_winsinteger
e.g. — (all-null in sample)
clinched_conferenceboolean
e.g. — (all-null in sample)
clinched_divisionboolean
e.g. — (all-null in sample)
clinched_playoffsboolean
e.g. — (all-null in sample)
clinched_presidents_trophyboolean
e.g. — (all-null in sample)
conferencestring
e.g. — (all-null in sample)
conference_rankinteger
e.g. — (all-null in sample)
divisionstring
e.g. — (all-null in sample)
division_rankinteger
e.g. — (all-null in sample)
games_playedinteger
e.g. — (all-null in sample)
goal_differentialinteger
e.g. — (all-null in sample)
goals_againstinteger
e.g. — (all-null in sample)
goals_forinteger
e.g. — (all-null in sample)
home_lossesinteger
e.g. — (all-null in sample)
home_overtime_lossesinteger
e.g. — (all-null in sample)
home_winsinteger
e.g. — (all-null in sample)
last_10_lossesinteger
e.g. — (all-null in sample)
last_10_overtime_lossesinteger
e.g. — (all-null in sample)
last_10_winsinteger
e.g. — (all-null in sample)
lossesinteger
e.g. — (all-null in sample)
overtime_lossesinteger
e.g. — (all-null in sample)
ptsinteger
e.g. — (all-null in sample)
pts_percentagedecimal
e.g. — (all-null in sample)
rankinteger
e.g. — (all-null in sample)
regulation_winsinteger
e.g. — (all-null in sample)
season_typeinteger
e.g. — (all-null in sample)
shootout_lossesinteger
e.g. — (all-null in sample)
shootout_winsinteger
e.g. — (all-null in sample)
streakstringnullableCurrent streak (W3, L2, OTL1)
e.g. — (all-null in sample)
wild_card_rankintegernullable
e.g. — (all-null in sample)
winsinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/standings
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a single season. Defaults to the current season.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/standings?season_id=2025'
Responses
200standings rows matching the declared filter set, wrapped in { standings, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/standings/{id}
Parameters
idpathbigintrequired
Primary key (id) of the standing row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/standings/{pk_value}'
Responses
200Single standing row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
game_player_statsnhl.game_player_stats
Each NHL player's stat line for each game — goals, assists, plus-minus, shots on goal, hits, blocks, penalties in minutes, power-play points, time on ice, plus the goaltender line (saves, shots against, goals against, save percentage).
Fields67
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
e.g. — (all-null in sample)
opponent_idbigintnullable
e.g. — (all-null in sample)
player_idbigint
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
assistsinteger
e.g. — (all-null in sample)
blocked_shotsinteger
e.g. — (all-null in sample)
empty_net_goalsinteger
e.g. — (all-null in sample)
even_strength_assistsinteger
e.g. — (all-null in sample)
even_strength_goalsinteger
e.g. — (all-null in sample)
even_strength_time_on_ice_secondsinteger
e.g. — (all-null in sample)
faceoff_percentagedecimal
e.g. — (all-null in sample)
faceoffs_lostinteger
e.g. — (all-null in sample)
faceoffs_woninteger
e.g. — (all-null in sample)
first_period_goals_againstinteger
e.g. — (all-null in sample)
game_winning_goalsinteger
e.g. — (all-null in sample)
gamesinteger1 if player appeared, 0 if not
e.g. — (all-null in sample)
giveawaysinteger
e.g. — (all-null in sample)
goalsinteger
e.g. — (all-null in sample)
goals_againstinteger
e.g. — (all-null in sample)
goals_against_averagedecimal
e.g. — (all-null in sample)
hitsinteger
e.g. — (all-null in sample)
home_or_awaystringnullable
e.g. — (all-null in sample)
is_game_overboolean
e.g. — (all-null in sample)
lossesinteger
e.g. — (all-null in sample)
major_penaltiesinteger
e.g. — (all-null in sample)
minor_penaltiesinteger
e.g. — (all-null in sample)
minutes_playedintegerGoalie minutes played
e.g. — (all-null in sample)
overtime_goalsinteger
e.g. — (all-null in sample)
overtime_goals_againstinteger
e.g. — (all-null in sample)
overtime_lossesinteger
e.g. — (all-null in sample)
penaltiesinteger
e.g. — (all-null in sample)
penalty_minutesinteger
e.g. — (all-null in sample)
plus_minusinteger
e.g. — (all-null in sample)
power_play_assistsinteger
e.g. — (all-null in sample)
power_play_goalsinteger
e.g. — (all-null in sample)
power_play_goals_againstinteger
e.g. — (all-null in sample)
power_play_ptsinteger
e.g. — (all-null in sample)
power_play_savesinteger
e.g. — (all-null in sample)
power_play_shots_againstinteger
e.g. — (all-null in sample)
power_play_time_on_ice_secondsinteger
e.g. — (all-null in sample)
ptsinteger
e.g. — (all-null in sample)
save_percentagedecimal
e.g. — (all-null in sample)
savesinteger
e.g. — (all-null in sample)
second_period_goals_againstinteger
e.g. — (all-null in sample)
shiftsinteger
e.g. — (all-null in sample)
shooting_percentagedecimal
e.g. — (all-null in sample)
shootout_attemptsinteger
e.g. — (all-null in sample)
shootout_goalsinteger
e.g. — (all-null in sample)
shootout_goals_againstinteger
e.g. — (all-null in sample)
shootout_savesinteger
e.g. — (all-null in sample)
short_handed_assistsinteger
e.g. — (all-null in sample)
short_handed_goalsinteger
e.g. — (all-null in sample)
short_handed_goals_againstinteger
e.g. — (all-null in sample)
short_handed_ptsinteger
e.g. — (all-null in sample)
short_handed_savesinteger
e.g. — (all-null in sample)
short_handed_shots_againstinteger
e.g. — (all-null in sample)
short_handed_time_on_ice_secondsinteger
e.g. — (all-null in sample)
shotsinteger
e.g. — (all-null in sample)
shots_againstinteger
e.g. — (all-null in sample)
shots_on_goalinteger
e.g. — (all-null in sample)
shutoutsinteger
e.g. — (all-null in sample)
startedinteger
e.g. — (all-null in sample)
takeawaysinteger
e.g. — (all-null in sample)
third_period_goals_againstinteger
e.g. — (all-null in sample)
time_on_ice_secondsinteger
e.g. — (all-null in sample)
winsinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/game_player_stats
Requires one of: game_id or player_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
player_idquerybigintoptional
Filter to a single player.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/game_player_stats?game_id=1'
Responses
200game_player_stats rows matching the declared filter set, wrapped in { game_player_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/game_player_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_player_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/game_player_stats/{pk_value}'
Responses
200Single game_player_stat row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
game_team_statsnhl.game_team_stats
Each NHL team's stat line for each game — goals scored and allowed, shots on goal, power-play and penalty-kill performance, faceoff percentage, hits, blocks, and time-on-ice splits.
Fields30
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
assistsinteger
e.g. — (all-null in sample)
blocked_shotsinteger
e.g. — (all-null in sample)
faceoff_percentagedecimal
e.g. — (all-null in sample)
faceoffs_lostinteger
e.g. — (all-null in sample)
faceoffs_woninteger
e.g. — (all-null in sample)
giveawaysinteger
e.g. — (all-null in sample)
goalsinteger
e.g. — (all-null in sample)
goals_againstinteger
e.g. — (all-null in sample)
hitsinteger
e.g. — (all-null in sample)
lossesinteger
e.g. — (all-null in sample)
overtime_lossesinteger
e.g. — (all-null in sample)
penaltiesinteger
e.g. — (all-null in sample)
penalty_kill_goals_againstinteger
e.g. — (all-null in sample)
penalty_kill_percentagedecimal
e.g. — (all-null in sample)
penalty_minutesinteger
e.g. — (all-null in sample)
power_play_attemptsinteger
e.g. — (all-null in sample)
power_play_goalsinteger
e.g. — (all-null in sample)
power_play_percentagedecimal
e.g. — (all-null in sample)
save_percentagedecimal
e.g. — (all-null in sample)
savesinteger
e.g. — (all-null in sample)
shooting_percentagedecimal
e.g. — (all-null in sample)
short_handed_goalsinteger
e.g. — (all-null in sample)
shotsinteger
e.g. — (all-null in sample)
shots_on_goalinteger
e.g. — (all-null in sample)
takeawaysinteger
e.g. — (all-null in sample)
times_shorthandedinteger
e.g. — (all-null in sample)
winsinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/game_team_stats
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/game_team_stats?game_id=1'
Responses
200game_team_stats rows matching the declared filter set, wrapped in { game_team_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/game_team_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_team_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/game_team_stats/{pk_value}'
Responses
200Single game_team_stat row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
operator_player_lookupsnhl.operator_player_lookups
How each sportsbook and fantasy operator names every NHL player — the mapping from each operator's player identifier to a unified player record.
Fields6
FieldTypeReferencesDescription
idkeybigintPrimary Key
operator_idbigintOperator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io.
e.g. — (all-null in sample)
operator_player_idstringExternal player ID from operator
e.g. — (all-null in sample)
player_idbigintInternal nhl.players.id reference
e.g. — (all-null in sample)
player_namestringnullablePlayer name for reconciliation
e.g. — (all-null in sample)
positionstringnullablePosition for reconciliation
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/operator_player_lookups
Requires one of: operator_id — requests satisfying none of these return 400.
Parameters
operator_idquerybigintoptional
Filter by operator.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/operator_player_lookups?operator_id=1'
Responses
200operator_player_lookups rows matching the declared filter set, wrapped in { operator_player_lookups, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/operator_player_lookups/{id}
Parameters
idpathbigintrequired
Primary key (id) of the operator_player_lookup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/operator_player_lookups/{pk_value}'
Responses
200Single operator_player_lookup row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
season_player_statsnhl.season_player_stats
Season totals for each NHL player — goals, assists, points, plus-minus, shots on goal, hits, blocks, penalty minutes, power-play and short-handed contributions, plus goaltender stats (wins, saves, shutouts, save percentage, goals-against average).
Fields62
FieldTypeReferencesDescription
idkeybigintPrimary Key
player_idbigint
e.g. — (all-null in sample)
season_idbigint
e.g. — (all-null in sample)
team_idbigintnullable
e.g. — (all-null in sample)
assistsinteger
e.g. — (all-null in sample)
assists_per_gamedecimal
e.g. — (all-null in sample)
blocked_shotsinteger
e.g. — (all-null in sample)
empty_net_goalsinteger
e.g. — (all-null in sample)
even_strength_assistsinteger
e.g. — (all-null in sample)
even_strength_goalsinteger
e.g. — (all-null in sample)
even_strength_time_on_ice_secondsinteger
e.g. — (all-null in sample)
faceoff_percentagedecimal
e.g. — (all-null in sample)
faceoffs_lostinteger
e.g. — (all-null in sample)
faceoffs_woninteger
e.g. — (all-null in sample)
game_winning_goalsinteger
e.g. — (all-null in sample)
games_playedinteger
e.g. — (all-null in sample)
games_startedinteger
e.g. — (all-null in sample)
giveawaysinteger
e.g. — (all-null in sample)
goalsinteger
e.g. — (all-null in sample)
goals_againstinteger
e.g. — (all-null in sample)
goals_against_averagedecimal
e.g. — (all-null in sample)
goals_per_gamedecimal
e.g. — (all-null in sample)
hat_tricksinteger
e.g. — (all-null in sample)
hitsinteger
e.g. — (all-null in sample)
lossesinteger
e.g. — (all-null in sample)
major_penaltiesinteger
e.g. — (all-null in sample)
minor_penaltiesinteger
e.g. — (all-null in sample)
minutes_playedinteger
e.g. — (all-null in sample)
overtime_goalsinteger
e.g. — (all-null in sample)
overtime_lossesinteger
e.g. — (all-null in sample)
penaltiesinteger
e.g. — (all-null in sample)
penalty_minutesinteger
e.g. — (all-null in sample)
plus_minusinteger
e.g. — (all-null in sample)
positionstringnullable
e.g. — (all-null in sample)
power_play_assistsinteger
e.g. — (all-null in sample)
power_play_goalsinteger
e.g. — (all-null in sample)
power_play_ptsinteger
e.g. — (all-null in sample)
power_play_time_on_ice_secondsinteger
e.g. — (all-null in sample)
ptsinteger
e.g. — (all-null in sample)
pts_per_gamedecimal
e.g. — (all-null in sample)
save_percentagedecimal
e.g. — (all-null in sample)
savesinteger
e.g. — (all-null in sample)
season_typeinteger1=Regular, 2=Preseason, 3=Postseason
e.g. — (all-null in sample)
shiftsinteger
e.g. — (all-null in sample)
shooting_percentagedecimal
e.g. — (all-null in sample)
shootout_attemptsinteger
e.g. — (all-null in sample)
shootout_goalsinteger
e.g. — (all-null in sample)
shootout_goals_againstinteger
e.g. — (all-null in sample)
shootout_missesinteger
e.g. — (all-null in sample)
shootout_savesinteger
e.g. — (all-null in sample)
short_handed_assistsinteger
e.g. — (all-null in sample)
short_handed_goalsinteger
e.g. — (all-null in sample)
short_handed_ptsinteger
e.g. — (all-null in sample)
short_handed_time_on_ice_secondsinteger
e.g. — (all-null in sample)
shotsinteger
e.g. — (all-null in sample)
shots_againstinteger
e.g. — (all-null in sample)
shots_on_goalinteger
e.g. — (all-null in sample)
shutoutsinteger
e.g. — (all-null in sample)
takeawaysinteger
e.g. — (all-null in sample)
time_on_ice_per_gamedecimal
e.g. — (all-null in sample)
time_on_ice_secondsinteger
e.g. — (all-null in sample)
winsinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/season_player_stats
Requires one of: season_id or player_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a single season. Defaults to the current season.
player_idquerybigintoptional
Filter to a single player.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/season_player_stats?season_id=2025'
Responses
200season_player_stats rows matching the declared filter set, wrapped in { season_player_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/season_player_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the season_player_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/season_player_stats/{pk_value}'
Responses
200Single season_player_stat row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.

Odds· 1 table

game_oddsnhl.game_odds
NHL game betting lines — moneylines, puck lines (the hockey point-spread equivalent), and over/under totals from sportsbooks, captured over time as the lines move from opening to closing.
Fields13
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
e.g. — (all-null in sample)
away_money_lineintegernullable
e.g. — (all-null in sample)
away_point_spreaddecimalnullable
e.g. — (all-null in sample)
away_point_spread_payoutintegernullable
e.g. — (all-null in sample)
draw_money_lineintegernullable
e.g. — (all-null in sample)
home_money_lineintegernullable
e.g. — (all-null in sample)
home_point_spreaddecimalnullable
e.g. — (all-null in sample)
home_point_spread_payoutintegernullable
e.g. — (all-null in sample)
over_payoutintegernullable
e.g. — (all-null in sample)
over_underdecimalnullable
e.g. — (all-null in sample)
sportsbookstringnullableDraftKings, FanDuel, BetMGM, etc.
e.g. — (all-null in sample)
under_payoutintegernullable
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/game_odds
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
sportsbookquerystringoptional
Filter by sportsbook.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/game_odds?game_id=1'
Responses
200game_odds rows matching the declared filter set, wrapped in { game_odds, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/game_odds/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_odd row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/game_odds/{pk_value}'
Responses
200Single game_odd row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.

Lineups & Roster· 2 tables

line_combinationsnhl.line_combinations
NHL forward and defensive pair groupings — which players skate together as a line (first, second, third, fourth) or defensive pairing for each team.
Fields11
FieldTypeReferencesDescription
idkeybigintPrimary Key
player1_idbigint
e.g. — (all-null in sample)
player2_idbigintnullable
e.g. — (all-null in sample)
player3_idbigintnullable
e.g. — (all-null in sample)
player4_idbigintnullable
e.g. — (all-null in sample)
player5_idbigintnullable
e.g. — (all-null in sample)
season_idbigint
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
daydate
e.g. — (all-null in sample)
line_numberinteger
e.g. — (all-null in sample)
line_typestring
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/line_combinations
Requires one of: team_id + season_id — requests satisfying none of these return 400.
Parameters
team_idquerybigintoptional
Filter by team.
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/line_combinations?team_id=1&season_id=2025'
Responses
200line_combinations rows matching the declared filter set, wrapped in { line_combinations, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/line_combinations/{id}
Parameters
idpathbigintrequired
Primary key (id) of the line_combination row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/line_combinations/{pk_value}'
Responses
200Single line_combination row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
goalie_depth_chartsnhl.goalie_depth_charts
Each NHL team's goaltender depth — the starter, backup, and any third-string netminders, with the date the depth was last updated.
Fields6
FieldTypeReferencesDescription
idkeybigintPrimary Key
player_idbigint
e.g. — (all-null in sample)
season_idbigint
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
daydate
e.g. — (all-null in sample)
depth_orderinteger1=Starter, 2=Backup, 3=Third string
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/goalie_depth_charts
Requires one of: team_id + season_id — requests satisfying none of these return 400.
Parameters
team_idquerybigintoptional
Filter by team.
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
player_idquerybigintoptional
Filter to a single goaltender.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/goalie_depth_charts?team_id=1&season_id=2025'
Responses
200goalie_depth_charts rows matching the declared filter set, wrapped in { goalie_depth_charts, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/goalie_depth_charts/{id}
Parameters
idpathbigintrequired
Primary key (id) of the goalie_depth_chart row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/goalie_depth_charts/{pk_value}'
Responses
200Single goalie_depth_chart row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.

Misc· 5 tables

arenasnhl.arenas
NHL arenas — current home venues and historical buildings, with capacity, surface type, and ice-rink dimensions.
Fields19
FieldTypeReferencesDescription
idkeybigintPrimary Key
league_arena_idintegernullableOfficial NHL arena ID from api-web.nhle.com
e.g. — (all-null in sample)
addressstringnullable
e.g. — (all-null in sample)
capacityintegernullable
e.g. — (all-null in sample)
citystring
e.g. — (all-null in sample)
closed_datetimestamptznullable
e.g. — (all-null in sample)
countrystringnullable
e.g. — (all-null in sample)
descriptionstringnullable
e.g. — (all-null in sample)
elevationfloatnullableElevation in feet above sea level
e.g. — (all-null in sample)
image_urlstringnullableURL to aerial/overview image of arena
e.g. — (all-null in sample)
latitudefloatnullable
e.g. — (all-null in sample)
longitudefloatnullable
e.g. — (all-null in sample)
namestring
e.g. — (all-null in sample)
opened_datetimestamptznullable
e.g. — (all-null in sample)
roof_typestringnullableArena roof type (all indoor)
e.g. — (all-null in sample)
statestringnullable
e.g. — (all-null in sample)
surfacestringPlaying surface type
e.g. — (all-null in sample)
team_namestringnullable
e.g. — (all-null in sample)
timezonestringnullableIANA timezone (e.g., America/New_York)
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/arenas
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/arenas?limit=3'
Responses
200arenas rows matching the declared filter set, wrapped in { arenas, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/arenas/{id}
Parameters
idpathbigintrequired
Primary key (id) of the arena row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/arenas/{pk_value}'
Responses
200Single arena row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
playoff_seriesnhl.playoff_series
NHL Stanley Cup Playoff series — best-of-seven matchups in each round (First Round, Second Round, Conference Finals, Stanley Cup Final), with seeds, wins, and series outcomes.
Fields15
FieldTypeReferencesDescription
idkeybigintPrimary Key
away_team_idbigint
e.g. — (all-null in sample)
home_team_idbigint
e.g. — (all-null in sample)
season_idbigint
e.g. — (all-null in sample)
series_idintegernullable
e.g. — (all-null in sample)
winner_team_idbigintnullable
e.g. — (all-null in sample)
away_team_seedinteger
e.g. — (all-null in sample)
away_team_winsinteger
e.g. — (all-null in sample)
conferencestringnullable
e.g. — (all-null in sample)
games_playedinteger
e.g. — (all-null in sample)
home_team_seedinteger
e.g. — (all-null in sample)
home_team_winsinteger
e.g. — (all-null in sample)
max_gamesinteger
e.g. — (all-null in sample)
playoff_roundstring
e.g. — (all-null in sample)
statusstring
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/playoff_series
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a single season. Defaults to the current season.
home_team_idquerybigintoptional
Filter by home team.
away_team_idquerybigintoptional
Filter by away team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/playoff_series?season_id=2025'
Responses
200playoff_series rows matching the declared filter set, wrapped in { playoff_series, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/playoff_series/{id}
Parameters
idpathbigintrequired
Primary key (id) of the playoff_sery row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/playoff_series/{pk_value}'
Responses
200Single playoff_sery row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
draft_picksnhl.draft_picks
Every NHL Draft selection — round, pick number, drafting team, the league/country the player came from, and the career stats that followed.
Fields9
FieldTypeReferencesDescription
idkeybigintPrimary Key
draft_idintegernullable
e.g. — (all-null in sample)
original_team_idintegernullableTeam that originally owned the pick
e.g. — (all-null in sample)
player_idbigintnullable
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
overall_pickinteger
e.g. — (all-null in sample)
pick_in_roundinteger
e.g. — (all-null in sample)
roundinteger
e.g. — (all-null in sample)
yearinteger
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/draft_picks
Requires one of: year — requests satisfying none of these return 400.
Parameters
yearqueryintegeroptional
Filter to a single draft year.
team_idquerybigintoptional
Filter by drafting team.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/draft_picks?year=1'
Responses
200draft_picks rows matching the declared filter set, wrapped in { draft_picks, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/draft_picks/{id}
Parameters
idpathbigintrequired
Primary key (id) of the draft_pick row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/draft_picks/{pk_value}'
Responses
200Single draft_pick row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
player_injuriesnhl.player_injuries
The ongoing injury record for each NHL player — body part, severity, designation (day-to-day, IR, LTIR), and expected return timeline.
Fields16
FieldTypeReferencesDescription
idkeybigintPrimary Key
player_idbigint
e.g. — (all-null in sample)
season_idbigint
e.g. — (all-null in sample)
team_idbigint
e.g. — (all-null in sample)
body_partstring
e.g. — (all-null in sample)
descriptionstringnullable
e.g. — (all-null in sample)
end_datetimestamptznullable
e.g. — (all-null in sample)
expected_return_datetimestamptznullable
e.g. — (all-null in sample)
games_missedinteger
e.g. — (all-null in sample)
injury_typestringnullable
e.g. — (all-null in sample)
is_surgery_requiredbooleannullable
e.g. — (all-null in sample)
sidestringnullable
e.g. — (all-null in sample)
sourcestringnullable
e.g. — (all-null in sample)
start_datetimestamptz
e.g. — (all-null in sample)
statusstring
e.g. — (all-null in sample)
updated_datetimestamptz
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/player_injuries
Requires one of: player_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
team_idquerybigintoptional
Filter by team.
season_idquerybigintoptional
Filter to a season.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/player_injuries?player_id=1'
Responses
200player_injuries rows matching the declared filter set, wrapped in { player_injuries, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/player_injuries/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player_injury row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/player_injuries/{pk_value}'
Responses
200Single player_injury row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
player_newsnhl.player_news
News about NHL players — trades, IR placements, line changes, suspensions, and general beat-reporter updates.
Fields20
FieldTypeReferencesDescription
idkeybigintPrimary Key
external_idstringnullable
e.g. — (all-null in sample)
news_idintegernullable
e.g. — (all-null in sample)
player_idbigintnullable
e.g. — (all-null in sample)
team_idbigintnullable
e.g. — (all-null in sample)
ai_processedboolean
e.g. — (all-null in sample)
authorstringnullable
e.g. — (all-null in sample)
categoriesstringnullable
e.g. — (all-null in sample)
categorystringnullableinjury, transaction, lineup, general
e.g. — (all-null in sample)
contentstringnullable
e.g. — (all-null in sample)
news_timetimestamptz
e.g. — (all-null in sample)
original_sourcestringnullable
e.g. — (all-null in sample)
original_source_urlstringnullable
e.g. — (all-null in sample)
priorityinteger
e.g. — (all-null in sample)
situational_impactjsonbnullable
e.g. — (all-null in sample)
sourcestringnullable
e.g. — (all-null in sample)
terms_of_usestringnullable
e.g. — (all-null in sample)
titlestring
e.g. — (all-null in sample)
updated_timetimestamptznullable
e.g. — (all-null in sample)
urlstringnullable
e.g. — (all-null in sample)
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/player_news
Requires one of: player_id or team_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
team_idquerybigintoptional
Filter by team.
news_timequerytimestamptzoptional
Filter by publication time (ISO 8601). Use news_time__gte to poll for items since your last check. Range syntax: news_time__gte=, news_time__lte=, news_time__between=.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/player_news?player_id=1'
Responses
200player_news rows matching the declared filter set, wrapped in { player_news, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/nhl/player_news/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player_new row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/player_news/{pk_value}'
Responses
200Single player_new row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.