STAT-API

NHL API Reference

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.

Main

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).
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(8 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
league_id
stringnullable—Official NHL season identifier
e.g. — (all-null in sample)
end_date
timestamptznullable——
e.g. — (all-null in sample)
post_season_start_date
timestamptznullable——
e.g. — (all-null in sample)
regular_season_start_date
timestamptznullable——
e.g. — (all-null in sample)
stanley_cup_finals_date
timestamptznullable——
e.g. — (all-null in sample)
start_date
timestamptz——
e.g. — (all-null in sample)
start_year
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(8 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
league_id
stringnullable—Official NHL season identifier
e.g. — (all-null in sample)
end_date
timestamptznullable——
e.g. — (all-null in sample)
post_season_start_date
timestamptznullable——
e.g. — (all-null in sample)
regular_season_start_date
timestamptznullable——
e.g. — (all-null in sample)
stanley_cup_finals_date
timestamptznullable——
e.g. — (all-null in sample)
start_date
timestamptz——
e.g. — (all-null in sample)
start_year
integer——
e.g. — (all-null in sample)
teamsnhl.teams
The 32 NHL franchises, organized into the Eastern and Western Conferences with two divisions each (Atlantic, Metropolitan, Central, Pacific).
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(18 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
arena_id
bigintnullable—
e.g. — (all-null in sample)
league_team_id
integernullable—Official NHL team ID from api-web.nhle.com
e.g. — (all-null in sample)
abbreviation
string——
e.g. — (all-null in sample)
active
boolean——
e.g. — (all-null in sample)
city
string——
e.g. — (all-null in sample)
conference
string——
e.g. — (all-null in sample)
division
string——
e.g. — (all-null in sample)
full_name
string——
e.g. — (all-null in sample)
head_coach
stringnullable——
e.g. — (all-null in sample)
logo_url
stringnullable—URL to team logo image
e.g. — (all-null in sample)
name
string——
e.g. — (all-null in sample)
primary_color
stringnullable——
e.g. — (all-null in sample)
quaternary_color
stringnullable——
e.g. — (all-null in sample)
secondary_color
stringnullable——
e.g. — (all-null in sample)
tertiary_color
stringnullable——
e.g. — (all-null in sample)
wikipedia_logo_url
stringnullable——
e.g. — (all-null in sample)
wikipedia_wordmark_url
stringnullable——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(18 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
arena_id
bigintnullable—
e.g. — (all-null in sample)
league_team_id
integernullable—Official NHL team ID from api-web.nhle.com
e.g. — (all-null in sample)
abbreviation
string——
e.g. — (all-null in sample)
active
boolean——
e.g. — (all-null in sample)
city
string——
e.g. — (all-null in sample)
conference
string——
e.g. — (all-null in sample)
division
string——
e.g. — (all-null in sample)
full_name
string——
e.g. — (all-null in sample)
head_coach
stringnullable——
e.g. — (all-null in sample)
logo_url
stringnullable—URL to team logo image
e.g. — (all-null in sample)
name
string——
e.g. — (all-null in sample)
primary_color
stringnullable——
e.g. — (all-null in sample)
quaternary_color
stringnullable——
e.g. — (all-null in sample)
secondary_color
stringnullable——
e.g. — (all-null in sample)
tertiary_color
stringnullable——
e.g. — (all-null in sample)
wikipedia_logo_url
stringnullable——
e.g. — (all-null in sample)
wikipedia_wordmark_url
stringnullable——
e.g. — (all-null in sample)
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.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/players
Requires one of: team_id or roster_status — requests satisfying none of these return 400.
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.
roster_statusquerystringoptional
Filter by canonical roster status. NHL source granularity is coarse: "active" (on a current team roster), "free_agent" (no team), "inactive" (not currently rostered); injured_reserve appears where derivable. The "on a team now" set is {active, injured_reserve}. Values: active, injured_reserve, inactive, free_agent.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/players?team_id=1'
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.
Response Schema(35 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
draft_team_id
bigintnullable—
e.g. — (all-null in sample)
league_id
stringnullable—Official NHL player identifier
e.g. — (all-null in sample)
league_player_id
integer—Official NHL player ID from api-web.nhle.com
e.g. — (all-null in sample)
team_id
bigintnullable—
e.g. — (all-null in sample)
birth_city
stringnullable——
e.g. — (all-null in sample)
birth_country
stringnullable——
e.g. — (all-null in sample)
birth_date
datenullable——
e.g. — (all-null in sample)
birth_state
stringnullable——
e.g. — (all-null in sample)
catches
stringnullable——
e.g. — (all-null in sample)
college
stringnullable——
e.g. — (all-null in sample)
draft_overall_pick
integernullable——
e.g. — (all-null in sample)
draft_pick
integernullable——
e.g. — (all-null in sample)
draft_round
integernullable——
e.g. — (all-null in sample)
draft_year
integernullable——
e.g. — (all-null in sample)
experience
integernullable—Years of NHL experience
e.g. — (all-null in sample)
first_name
string——
e.g. — (all-null in sample)
full_name
string——
e.g. — (all-null in sample)
height
integernullable—Height in inches
e.g. — (all-null in sample)
injury_body_part
stringnullable——
e.g. — (all-null in sample)
injury_notes
stringnullable——
e.g. — (all-null in sample)
injury_start_date
timestamptznullable——
e.g. — (all-null in sample)
injury_status
stringnullable——
e.g. — (all-null in sample)
jersey
stringnullable——
e.g. — (all-null in sample)
last_name
string——
e.g. — (all-null in sample)
nationality
stringnullable——
e.g. — (all-null in sample)
photo_url
stringnullable—URL to player headshot image
e.g. — (all-null in sample)
position_category
stringnullable——
e.g. — (all-null in sample)
primary_position
string——
e.g. — (all-null in sample)
rookie_year
integernullable——
e.g. — (all-null in sample)
roster_status
stringnullable—Canonical roster status, shared across leagues. NHL source granularity is coarse: "active" (on a current api-web team roster), "free_agent" (no team), "inactive" (not currently rostered); injured_reserve where derivable. The "on a team now" set is {active, injured_reserve}.
shoots
stringnullable——
e.g. — (all-null in sample)
weight
integernullable—Weight in pounds
e.g. — (all-null in sample)
youth_league
stringnullable——
e.g. — (all-null in sample)
youth_team
stringnullable——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(35 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
draft_team_id
bigintnullable—
e.g. — (all-null in sample)
league_id
stringnullable—Official NHL player identifier
e.g. — (all-null in sample)
league_player_id
integer—Official NHL player ID from api-web.nhle.com
e.g. — (all-null in sample)
team_id
bigintnullable—
e.g. — (all-null in sample)
birth_city
stringnullable——
e.g. — (all-null in sample)
birth_country
stringnullable——
e.g. — (all-null in sample)
birth_date
datenullable——
e.g. — (all-null in sample)
birth_state
stringnullable——
e.g. — (all-null in sample)
catches
stringnullable——
e.g. — (all-null in sample)
college
stringnullable——
e.g. — (all-null in sample)
draft_overall_pick
integernullable——
e.g. — (all-null in sample)
draft_pick
integernullable——
e.g. — (all-null in sample)
draft_round
integernullable——
e.g. — (all-null in sample)
draft_year
integernullable——
e.g. — (all-null in sample)
experience
integernullable—Years of NHL experience
e.g. — (all-null in sample)
first_name
string——
e.g. — (all-null in sample)
full_name
string——
e.g. — (all-null in sample)
height
integernullable—Height in inches
e.g. — (all-null in sample)
injury_body_part
stringnullable——
e.g. — (all-null in sample)
injury_notes
stringnullable——
e.g. — (all-null in sample)
injury_start_date
timestamptznullable——
e.g. — (all-null in sample)
injury_status
stringnullable——
e.g. — (all-null in sample)
jersey
stringnullable——
e.g. — (all-null in sample)
last_name
string——
e.g. — (all-null in sample)
nationality
stringnullable——
e.g. — (all-null in sample)
photo_url
stringnullable—URL to player headshot image
e.g. — (all-null in sample)
position_category
stringnullable——
e.g. — (all-null in sample)
primary_position
string——
e.g. — (all-null in sample)
rookie_year
integernullable——
e.g. — (all-null in sample)
roster_status
stringnullable—Canonical roster status, shared across leagues. NHL source granularity is coarse: "active" (on a current api-web team roster), "free_agent" (no team), "inactive" (not currently rostered); injured_reserve where derivable. The "on a team now" set is {active, injured_reserve}.
shoots
stringnullable——
e.g. — (all-null in sample)
weight
integernullable—Weight in pounds
e.g. — (all-null in sample)
youth_league
stringnullable——
e.g. — (all-null in sample)
youth_team
stringnullable——
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/games?season_id=2026'
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.
Response Schema(35 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
arena_id
bigintnullable—
e.g. — (all-null in sample)
away_team_id
bigint—
e.g. — (all-null in sample)
home_team_id
bigint—
e.g. — (all-null in sample)
league_game_id
integernullable—Official NHL game ID from api-web.nhle.com
e.g. — (all-null in sample)
league_id
stringnullable—Official NHL game identifier
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
attendance
integernullable——
e.g. — (all-null in sample)
away_team_score
integernullable——
e.g. — (all-null in sample)
away_team_score_overtime
integernullable——
e.g. — (all-null in sample)
away_team_score_period1
integernullable——
e.g. — (all-null in sample)
away_team_score_period2
integernullable——
e.g. — (all-null in sample)
away_team_score_period3
integernullable——
e.g. — (all-null in sample)
away_team_series_wins
integernullable——
e.g. — (all-null in sample)
channel
stringnullable——
e.g. — (all-null in sample)
day
integer—Calendar day as a YYYYMMDD integer (e.g. 20240915), US Eastern.
e.g. — (all-null in sample)
game_time
timestamptz—Scheduled puck drop (timezone-aware).
e.g. — (all-null in sample)
home_team_score
integernullable——
e.g. — (all-null in sample)
home_team_score_overtime
integernullable——
e.g. — (all-null in sample)
home_team_score_period1
integernullable——
e.g. — (all-null in sample)
home_team_score_period2
integernullable——
e.g. — (all-null in sample)
home_team_score_period3
integernullable——
e.g. — (all-null in sample)
home_team_series_wins
integernullable——
e.g. — (all-null in sample)
is_overtime
boolean——
e.g. — (all-null in sample)
is_shootout
boolean——
e.g. — (all-null in sample)
last_play
stringnullable——
e.g. — (all-null in sample)
neutral_site
boolean——
e.g. — (all-null in sample)
overtime_periods
integernullable——
e.g. — (all-null in sample)
period
stringnullable—Current period (1, 2, 3, OT, SO, Final)
e.g. — (all-null in sample)
playoff_round
stringnullable—First Round, Second Round, Conference Finals, Stanley Cup Final
e.g. — (all-null in sample)
season_type
string—Canonical season phase (text). Was integer 1/2/3/4 before the 2026-06-29 normalization.
e.g. — (all-null in sample)
series_game_number
integernullable——
e.g. — (all-null in sample)
status
string——
e.g. — (all-null in sample)
time_remaining_minutes
integernullable——
e.g. — (all-null in sample)
time_remaining_seconds
integernullable——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(35 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
arena_id
bigintnullable—
e.g. — (all-null in sample)
away_team_id
bigint—
e.g. — (all-null in sample)
home_team_id
bigint—
e.g. — (all-null in sample)
league_game_id
integernullable—Official NHL game ID from api-web.nhle.com
e.g. — (all-null in sample)
league_id
stringnullable—Official NHL game identifier
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
attendance
integernullable——
e.g. — (all-null in sample)
away_team_score
integernullable——
e.g. — (all-null in sample)
away_team_score_overtime
integernullable——
e.g. — (all-null in sample)
away_team_score_period1
integernullable——
e.g. — (all-null in sample)
away_team_score_period2
integernullable——
e.g. — (all-null in sample)
away_team_score_period3
integernullable——
e.g. — (all-null in sample)
away_team_series_wins
integernullable——
e.g. — (all-null in sample)
channel
stringnullable——
e.g. — (all-null in sample)
day
integer—Calendar day as a YYYYMMDD integer (e.g. 20240915), US Eastern.
e.g. — (all-null in sample)
game_time
timestamptz—Scheduled puck drop (timezone-aware).
e.g. — (all-null in sample)
home_team_score
integernullable——
e.g. — (all-null in sample)
home_team_score_overtime
integernullable——
e.g. — (all-null in sample)
home_team_score_period1
integernullable——
e.g. — (all-null in sample)
home_team_score_period2
integernullable——
e.g. — (all-null in sample)
home_team_score_period3
integernullable——
e.g. — (all-null in sample)
home_team_series_wins
integernullable——
e.g. — (all-null in sample)
is_overtime
boolean——
e.g. — (all-null in sample)
is_shootout
boolean——
e.g. — (all-null in sample)
last_play
stringnullable——
e.g. — (all-null in sample)
neutral_site
boolean——
e.g. — (all-null in sample)
overtime_periods
integernullable——
e.g. — (all-null in sample)
period
stringnullable—Current period (1, 2, 3, OT, SO, Final)
e.g. — (all-null in sample)
playoff_round
stringnullable—First Round, Second Round, Conference Finals, Stanley Cup Final
e.g. — (all-null in sample)
season_type
string—Canonical season phase (text). Was integer 1/2/3/4 before the 2026-06-29 normalization.
e.g. — (all-null in sample)
series_game_number
integernullable——
e.g. — (all-null in sample)
status
string——
e.g. — (all-null in sample)
time_remaining_minutes
integernullable——
e.g. — (all-null in sample)
time_remaining_seconds
integernullable——
e.g. — (all-null in sample)

Plays

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.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(12 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
drawn_by_player_id
bigintnullable—
e.g. — (all-null in sample)
game_id
bigint—
e.g. — (all-null in sample)
penalty_id
integer——
e.g. — (all-null in sample)
player_id
bigintnullable—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
is_bench_penalty
boolean——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
penalty_type
string——
e.g. — (all-null in sample)
period_number
integer——
e.g. — (all-null in sample)
time_remaining
string—Time remaining in period (MM:SS)
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(12 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
drawn_by_player_id
bigintnullable—
e.g. — (all-null in sample)
game_id
bigint—
e.g. — (all-null in sample)
penalty_id
integer——
e.g. — (all-null in sample)
player_id
bigintnullable—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
is_bench_penalty
boolean——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
penalty_type
string——
e.g. — (all-null in sample)
period_number
integer——
e.g. — (all-null in sample)
time_remaining
string—Time remaining in period (MM:SS)
e.g. — (all-null in sample)
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.)
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(8 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
league_game_id
integer—Official NHL game ID from api-web.nhle.com (matches nhl.games.league_game_id).
e.g. — (all-null in sample)
period_id
integer——
e.g. — (all-null in sample)
away_team_score
integer——
e.g. — (all-null in sample)
home_team_score
integer——
e.g. — (all-null in sample)
name
string—1, 2, 3, OT, OT2, SO
e.g. — (all-null in sample)
period_number
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(8 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
league_game_id
integer—Official NHL game ID from api-web.nhle.com (matches nhl.games.league_game_id).
e.g. — (all-null in sample)
period_id
integer——
e.g. — (all-null in sample)
away_team_score
integer——
e.g. — (all-null in sample)
home_team_score
integer——
e.g. — (all-null in sample)
name
string—1, 2, 3, OT, OT2, SO
e.g. — (all-null in sample)
period_number
integer——
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(13 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
primary_assist_player_id
bigintnullable—
e.g. — (all-null in sample)
scored_by_player_id
bigintnullable—
e.g. — (all-null in sample)
scoring_play_id
integer——
e.g. — (all-null in sample)
secondary_assist_player_id
bigintnullable—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
away_team_score
integer——
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
goal_type
stringnullable——
e.g. — (all-null in sample)
home_team_score
integer——
e.g. — (all-null in sample)
period_number
integer——
e.g. — (all-null in sample)
time_remaining
string—Time remaining in period (MM:SS)
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(13 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
primary_assist_player_id
bigintnullable—
e.g. — (all-null in sample)
scored_by_player_id
bigintnullable—
e.g. — (all-null in sample)
scoring_play_id
integer——
e.g. — (all-null in sample)
secondary_assist_player_id
bigintnullable—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
away_team_score
integer——
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
goal_type
stringnullable——
e.g. — (all-null in sample)
home_team_score
integer——
e.g. — (all-null in sample)
period_number
integer——
e.g. — (all-null in sample)
time_remaining
string—Time remaining in period (MM:SS)
e.g. — (all-null in sample)

Stats

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.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(6 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
operator_id
bigintOperator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io.
e.g. — (all-null in sample)
operator_team_id
string—External team ID from operator
e.g. — (all-null in sample)
team_id
bigintInternal nhl.teams.id reference
e.g. — (all-null in sample)
abbreviation
stringnullable—Team abbreviation for reconciliation
e.g. — (all-null in sample)
team_name
stringnullable—Team name for reconciliation
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(6 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
operator_id
bigintOperator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io.
e.g. — (all-null in sample)
operator_team_id
string—External team ID from operator
e.g. — (all-null in sample)
team_id
bigintInternal nhl.teams.id reference
e.g. — (all-null in sample)
abbreviation
stringnullable—Team abbreviation for reconciliation
e.g. — (all-null in sample)
team_name
stringnullable—Team name for reconciliation
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/season_team_stats?season_id=2026'
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.
Response Schema(36 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
faceoff_losses
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoff_wins
integer——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goal_differential
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_against_average
decimal——
e.g. — (all-null in sample)
goals_against_per_game
decimal——
e.g. — (all-null in sample)
goals_for
integer——
e.g. — (all-null in sample)
goals_per_game
decimal——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalty_kill_goals_against
integer——
e.g. — (all-null in sample)
penalty_kill_percentage
decimal——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_opportunities
integer——
e.g. — (all-null in sample)
power_play_percentage
decimal——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
pts_percentage
decimal——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
season_type
string—Canonical season phase (text). Was integer 1/2/3 before the 2026-06-29 normalization.
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
shots_against
integer——
e.g. — (all-null in sample)
shots_for
integer——
e.g. — (all-null in sample)
shutouts
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
times_shorthanded
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(36 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
faceoff_losses
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoff_wins
integer——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goal_differential
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_against_average
decimal——
e.g. — (all-null in sample)
goals_against_per_game
decimal——
e.g. — (all-null in sample)
goals_for
integer——
e.g. — (all-null in sample)
goals_per_game
decimal——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalty_kill_goals_against
integer——
e.g. — (all-null in sample)
penalty_kill_percentage
decimal——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_opportunities
integer——
e.g. — (all-null in sample)
power_play_percentage
decimal——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
pts_percentage
decimal——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
season_type
string—Canonical season phase (text). Was integer 1/2/3 before the 2026-06-29 normalization.
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
shots_against
integer——
e.g. — (all-null in sample)
shots_for
integer——
e.g. — (all-null in sample)
shutouts
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
times_shorthanded
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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).
⚠️ 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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/standings?season_id=2026'
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.
Response Schema(36 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
away_losses
integer——
e.g. — (all-null in sample)
away_overtime_losses
integer——
e.g. — (all-null in sample)
away_wins
integer——
e.g. — (all-null in sample)
clinched_conference
boolean——
e.g. — (all-null in sample)
clinched_division
boolean——
e.g. — (all-null in sample)
clinched_playoffs
boolean——
e.g. — (all-null in sample)
clinched_presidents_trophy
boolean——
e.g. — (all-null in sample)
conference
string——
e.g. — (all-null in sample)
conference_rank
integer——
e.g. — (all-null in sample)
division
string——
e.g. — (all-null in sample)
division_rank
integer——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
goal_differential
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_for
integer——
e.g. — (all-null in sample)
home_losses
integer——
e.g. — (all-null in sample)
home_overtime_losses
integer——
e.g. — (all-null in sample)
home_wins
integer——
e.g. — (all-null in sample)
last_10_losses
integer——
e.g. — (all-null in sample)
last_10_overtime_losses
integer——
e.g. — (all-null in sample)
last_10_wins
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
pts_percentage
decimal——
e.g. — (all-null in sample)
rank
integer——
e.g. — (all-null in sample)
regulation_wins
integer——
e.g. — (all-null in sample)
season_type
string——
e.g. — (all-null in sample)
shootout_losses
integer——
e.g. — (all-null in sample)
shootout_wins
integer——
e.g. — (all-null in sample)
streak
stringnullable—Current streak (W3, L2, OTL1)
e.g. — (all-null in sample)
wild_card_rank
integernullable——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(36 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
away_losses
integer——
e.g. — (all-null in sample)
away_overtime_losses
integer——
e.g. — (all-null in sample)
away_wins
integer——
e.g. — (all-null in sample)
clinched_conference
boolean——
e.g. — (all-null in sample)
clinched_division
boolean——
e.g. — (all-null in sample)
clinched_playoffs
boolean——
e.g. — (all-null in sample)
clinched_presidents_trophy
boolean——
e.g. — (all-null in sample)
conference
string——
e.g. — (all-null in sample)
conference_rank
integer——
e.g. — (all-null in sample)
division
string——
e.g. — (all-null in sample)
division_rank
integer——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
goal_differential
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_for
integer——
e.g. — (all-null in sample)
home_losses
integer——
e.g. — (all-null in sample)
home_overtime_losses
integer——
e.g. — (all-null in sample)
home_wins
integer——
e.g. — (all-null in sample)
last_10_losses
integer——
e.g. — (all-null in sample)
last_10_overtime_losses
integer——
e.g. — (all-null in sample)
last_10_wins
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
pts_percentage
decimal——
e.g. — (all-null in sample)
rank
integer——
e.g. — (all-null in sample)
regulation_wins
integer——
e.g. — (all-null in sample)
season_type
string——
e.g. — (all-null in sample)
shootout_losses
integer——
e.g. — (all-null in sample)
shootout_wins
integer——
e.g. — (all-null in sample)
streak
stringnullable—Current streak (W3, L2, OTL1)
e.g. — (all-null in sample)
wild_card_rank
integernullable——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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).
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(67 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
opponent_id
bigintnullable——
e.g. — (all-null in sample)
player_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
assists
integer——
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
empty_net_goals
integer——
e.g. — (all-null in sample)
even_strength_assists
integer——
e.g. — (all-null in sample)
even_strength_goals
integer——
e.g. — (all-null in sample)
even_strength_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoffs_lost
integer——
e.g. — (all-null in sample)
faceoffs_won
integer——
e.g. — (all-null in sample)
first_period_goals_against
integer——
e.g. — (all-null in sample)
game_winning_goals
integer——
e.g. — (all-null in sample)
games
integer—1 if player appeared, 0 if not
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goals
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_against_average
decimal——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
home_or_away
stringnullable——
e.g. — (all-null in sample)
is_game_over
boolean——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
major_penalties
integer——
e.g. — (all-null in sample)
minor_penalties
integer——
e.g. — (all-null in sample)
minutes_played
integer—Goalie minutes played
e.g. — (all-null in sample)
overtime_goals
integer——
e.g. — (all-null in sample)
overtime_goals_against
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalties
integer——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
plus_minus
integer——
e.g. — (all-null in sample)
power_play_assists
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_goals_against
integer——
e.g. — (all-null in sample)
power_play_pts
integer——
e.g. — (all-null in sample)
power_play_saves
integer——
e.g. — (all-null in sample)
power_play_shots_against
integer——
e.g. — (all-null in sample)
power_play_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
saves
integer——
e.g. — (all-null in sample)
second_period_goals_against
integer——
e.g. — (all-null in sample)
shifts
integer——
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
shootout_attempts
integer——
e.g. — (all-null in sample)
shootout_goals
integer——
e.g. — (all-null in sample)
shootout_goals_against
integer——
e.g. — (all-null in sample)
shootout_saves
integer——
e.g. — (all-null in sample)
short_handed_assists
integer——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
short_handed_goals_against
integer——
e.g. — (all-null in sample)
short_handed_pts
integer——
e.g. — (all-null in sample)
short_handed_saves
integer——
e.g. — (all-null in sample)
short_handed_shots_against
integer——
e.g. — (all-null in sample)
short_handed_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
shots
integer——
e.g. — (all-null in sample)
shots_against
integer——
e.g. — (all-null in sample)
shots_on_goal
integer——
e.g. — (all-null in sample)
shutouts
integer——
e.g. — (all-null in sample)
started
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
third_period_goals_against
integer——
e.g. — (all-null in sample)
time_on_ice_seconds
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(67 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
opponent_id
bigintnullable——
e.g. — (all-null in sample)
player_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
assists
integer——
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
empty_net_goals
integer——
e.g. — (all-null in sample)
even_strength_assists
integer——
e.g. — (all-null in sample)
even_strength_goals
integer——
e.g. — (all-null in sample)
even_strength_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoffs_lost
integer——
e.g. — (all-null in sample)
faceoffs_won
integer——
e.g. — (all-null in sample)
first_period_goals_against
integer——
e.g. — (all-null in sample)
game_winning_goals
integer——
e.g. — (all-null in sample)
games
integer—1 if player appeared, 0 if not
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goals
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_against_average
decimal——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
home_or_away
stringnullable——
e.g. — (all-null in sample)
is_game_over
boolean——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
major_penalties
integer——
e.g. — (all-null in sample)
minor_penalties
integer——
e.g. — (all-null in sample)
minutes_played
integer—Goalie minutes played
e.g. — (all-null in sample)
overtime_goals
integer——
e.g. — (all-null in sample)
overtime_goals_against
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalties
integer——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
plus_minus
integer——
e.g. — (all-null in sample)
power_play_assists
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_goals_against
integer——
e.g. — (all-null in sample)
power_play_pts
integer——
e.g. — (all-null in sample)
power_play_saves
integer——
e.g. — (all-null in sample)
power_play_shots_against
integer——
e.g. — (all-null in sample)
power_play_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
saves
integer——
e.g. — (all-null in sample)
second_period_goals_against
integer——
e.g. — (all-null in sample)
shifts
integer——
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
shootout_attempts
integer——
e.g. — (all-null in sample)
shootout_goals
integer——
e.g. — (all-null in sample)
shootout_goals_against
integer——
e.g. — (all-null in sample)
shootout_saves
integer——
e.g. — (all-null in sample)
short_handed_assists
integer——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
short_handed_goals_against
integer——
e.g. — (all-null in sample)
short_handed_pts
integer——
e.g. — (all-null in sample)
short_handed_saves
integer——
e.g. — (all-null in sample)
short_handed_shots_against
integer——
e.g. — (all-null in sample)
short_handed_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
shots
integer——
e.g. — (all-null in sample)
shots_against
integer——
e.g. — (all-null in sample)
shots_on_goal
integer——
e.g. — (all-null in sample)
shutouts
integer——
e.g. — (all-null in sample)
started
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
third_period_goals_against
integer——
e.g. — (all-null in sample)
time_on_ice_seconds
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(30 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
assists
integer——
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoffs_lost
integer——
e.g. — (all-null in sample)
faceoffs_won
integer——
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goals
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalties
integer——
e.g. — (all-null in sample)
penalty_kill_goals_against
integer——
e.g. — (all-null in sample)
penalty_kill_percentage
decimal——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
power_play_attempts
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_percentage
decimal——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
saves
integer——
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
shots
integer——
e.g. — (all-null in sample)
shots_on_goal
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
times_shorthanded
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(30 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
assists
integer——
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoffs_lost
integer——
e.g. — (all-null in sample)
faceoffs_won
integer——
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goals
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalties
integer——
e.g. — (all-null in sample)
penalty_kill_goals_against
integer——
e.g. — (all-null in sample)
penalty_kill_percentage
decimal——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
power_play_attempts
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_percentage
decimal——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
saves
integer——
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
shots
integer——
e.g. — (all-null in sample)
shots_on_goal
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
times_shorthanded
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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.
⚠️ 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 100
Page size. Defaults to 100; max 5000.
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 --compressed \
  -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.
Response Schema(9 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
operator_id
bigintOperator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io.
e.g. — (all-null in sample)
operator_player_id
string—External player ID from operator
e.g. — (all-null in sample)
player_id
bigintnullableInternal nhl.players.id reference
e.g. — (all-null in sample)
decided_at
timestamptznullable—When the pin or block was decided.
decided_reason
stringnullable—Evidence behind a pinned or blocked decision.
decision
stringnullable—How this mapping was decided: 'derived' (finder answer, overwritable), 'pinned' (decided on evidence, trigger-protected), 'blocked' (no player we hold is this id; player_id NULL, never retried). DB default 'derived'; a BEFORE UPDATE trigger preserves non-derived rows.
player_name
stringnullable—Player name for reconciliation
e.g. — (all-null in sample)
position
stringnullable—Position for reconciliation
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(9 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
operator_id
bigintOperator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io.
e.g. — (all-null in sample)
operator_player_id
string—External player ID from operator
e.g. — (all-null in sample)
player_id
bigintnullableInternal nhl.players.id reference
e.g. — (all-null in sample)
decided_at
timestamptznullable—When the pin or block was decided.
decided_reason
stringnullable—Evidence behind a pinned or blocked decision.
decision
stringnullable—How this mapping was decided: 'derived' (finder answer, overwritable), 'pinned' (decided on evidence, trigger-protected), 'blocked' (no player we hold is this id; player_id NULL, never retried). DB default 'derived'; a BEFORE UPDATE trigger preserves non-derived rows.
player_name
stringnullable—Player name for reconciliation
e.g. — (all-null in sample)
position
stringnullable—Position for reconciliation
e.g. — (all-null in sample)
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).
⚠️ 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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/season_player_stats?season_id=2026'
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.
Response Schema(62 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigintnullable—
e.g. — (all-null in sample)
assists
integer——
e.g. — (all-null in sample)
assists_per_game
decimal——
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
empty_net_goals
integer——
e.g. — (all-null in sample)
even_strength_assists
integer——
e.g. — (all-null in sample)
even_strength_goals
integer——
e.g. — (all-null in sample)
even_strength_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoffs_lost
integer——
e.g. — (all-null in sample)
faceoffs_won
integer——
e.g. — (all-null in sample)
game_winning_goals
integer——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
games_started
integer——
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goals
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_against_average
decimal——
e.g. — (all-null in sample)
goals_per_game
decimal——
e.g. — (all-null in sample)
hat_tricks
integer——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
major_penalties
integer——
e.g. — (all-null in sample)
minor_penalties
integer——
e.g. — (all-null in sample)
minutes_played
integer——
e.g. — (all-null in sample)
overtime_goals
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalties
integer——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
plus_minus
integer——
e.g. — (all-null in sample)
position
stringnullable——
e.g. — (all-null in sample)
power_play_assists
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_pts
integer——
e.g. — (all-null in sample)
power_play_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
pts_per_game
decimal——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
saves
integer——
e.g. — (all-null in sample)
season_type
string—Canonical season phase (text). Was integer 1/2/3 before the 2026-06-29 normalization.
e.g. — (all-null in sample)
shifts
integer——
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
shootout_attempts
integer——
e.g. — (all-null in sample)
shootout_goals
integer——
e.g. — (all-null in sample)
shootout_goals_against
integer——
e.g. — (all-null in sample)
shootout_misses
integer——
e.g. — (all-null in sample)
shootout_saves
integer——
e.g. — (all-null in sample)
short_handed_assists
integer——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
short_handed_pts
integer——
e.g. — (all-null in sample)
short_handed_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
shots
integer——
e.g. — (all-null in sample)
shots_against
integer——
e.g. — (all-null in sample)
shots_on_goal
integer——
e.g. — (all-null in sample)
shutouts
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
time_on_ice_per_game
decimal——
e.g. — (all-null in sample)
time_on_ice_seconds
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(62 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigintnullable—
e.g. — (all-null in sample)
assists
integer——
e.g. — (all-null in sample)
assists_per_game
decimal——
e.g. — (all-null in sample)
blocked_shots
integer——
e.g. — (all-null in sample)
empty_net_goals
integer——
e.g. — (all-null in sample)
even_strength_assists
integer——
e.g. — (all-null in sample)
even_strength_goals
integer——
e.g. — (all-null in sample)
even_strength_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
faceoff_percentage
decimal——
e.g. — (all-null in sample)
faceoffs_lost
integer——
e.g. — (all-null in sample)
faceoffs_won
integer——
e.g. — (all-null in sample)
game_winning_goals
integer——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
games_started
integer——
e.g. — (all-null in sample)
giveaways
integer——
e.g. — (all-null in sample)
goals
integer——
e.g. — (all-null in sample)
goals_against
integer——
e.g. — (all-null in sample)
goals_against_average
decimal——
e.g. — (all-null in sample)
goals_per_game
decimal——
e.g. — (all-null in sample)
hat_tricks
integer——
e.g. — (all-null in sample)
hits
integer——
e.g. — (all-null in sample)
losses
integer——
e.g. — (all-null in sample)
major_penalties
integer——
e.g. — (all-null in sample)
minor_penalties
integer——
e.g. — (all-null in sample)
minutes_played
integer——
e.g. — (all-null in sample)
overtime_goals
integer——
e.g. — (all-null in sample)
overtime_losses
integer——
e.g. — (all-null in sample)
penalties
integer——
e.g. — (all-null in sample)
penalty_minutes
integer——
e.g. — (all-null in sample)
plus_minus
integer——
e.g. — (all-null in sample)
position
stringnullable——
e.g. — (all-null in sample)
power_play_assists
integer——
e.g. — (all-null in sample)
power_play_goals
integer——
e.g. — (all-null in sample)
power_play_pts
integer——
e.g. — (all-null in sample)
power_play_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
pts
integer——
e.g. — (all-null in sample)
pts_per_game
decimal——
e.g. — (all-null in sample)
save_percentage
decimal——
e.g. — (all-null in sample)
saves
integer——
e.g. — (all-null in sample)
season_type
string—Canonical season phase (text). Was integer 1/2/3 before the 2026-06-29 normalization.
e.g. — (all-null in sample)
shifts
integer——
e.g. — (all-null in sample)
shooting_percentage
decimal——
e.g. — (all-null in sample)
shootout_attempts
integer——
e.g. — (all-null in sample)
shootout_goals
integer——
e.g. — (all-null in sample)
shootout_goals_against
integer——
e.g. — (all-null in sample)
shootout_misses
integer——
e.g. — (all-null in sample)
shootout_saves
integer——
e.g. — (all-null in sample)
short_handed_assists
integer——
e.g. — (all-null in sample)
short_handed_goals
integer——
e.g. — (all-null in sample)
short_handed_pts
integer——
e.g. — (all-null in sample)
short_handed_time_on_ice_seconds
integer——
e.g. — (all-null in sample)
shots
integer——
e.g. — (all-null in sample)
shots_against
integer——
e.g. — (all-null in sample)
shots_on_goal
integer——
e.g. — (all-null in sample)
shutouts
integer——
e.g. — (all-null in sample)
takeaways
integer——
e.g. — (all-null in sample)
time_on_ice_per_game
decimal——
e.g. — (all-null in sample)
time_on_ice_seconds
integer——
e.g. — (all-null in sample)
wins
integer——
e.g. — (all-null in sample)

Odds

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.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(13 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
away_money_line
integernullable——
e.g. — (all-null in sample)
away_point_spread
decimalnullable——
e.g. — (all-null in sample)
away_point_spread_payout
integernullable——
e.g. — (all-null in sample)
draw_money_line
integernullable——
e.g. — (all-null in sample)
home_money_line
integernullable——
e.g. — (all-null in sample)
home_point_spread
decimalnullable——
e.g. — (all-null in sample)
home_point_spread_payout
integernullable——
e.g. — (all-null in sample)
over_payout
integernullable——
e.g. — (all-null in sample)
over_under
decimalnullable——
e.g. — (all-null in sample)
sportsbook
stringnullable—DraftKings, FanDuel, BetMGM, etc.
e.g. — (all-null in sample)
under_payout
integernullable——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(13 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
game_id
bigint—
e.g. — (all-null in sample)
away_money_line
integernullable——
e.g. — (all-null in sample)
away_point_spread
decimalnullable——
e.g. — (all-null in sample)
away_point_spread_payout
integernullable——
e.g. — (all-null in sample)
draw_money_line
integernullable——
e.g. — (all-null in sample)
home_money_line
integernullable——
e.g. — (all-null in sample)
home_point_spread
decimalnullable——
e.g. — (all-null in sample)
home_point_spread_payout
integernullable——
e.g. — (all-null in sample)
over_payout
integernullable——
e.g. — (all-null in sample)
over_under
decimalnullable——
e.g. — (all-null in sample)
sportsbook
stringnullable—DraftKings, FanDuel, BetMGM, etc.
e.g. — (all-null in sample)
under_payout
integernullable——
e.g. — (all-null in sample)

Lineups & Roster

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.
⚠️ 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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/line_combinations?team_id=1&season_id=2026'
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.
Response Schema(11 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player1_id
bigint——
e.g. — (all-null in sample)
player2_id
bigintnullable——
e.g. — (all-null in sample)
player3_id
bigintnullable——
e.g. — (all-null in sample)
player4_id
bigintnullable——
e.g. — (all-null in sample)
player5_id
bigintnullable——
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
day
date——
e.g. — (all-null in sample)
line_number
integer——
e.g. — (all-null in sample)
line_type
string——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(11 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player1_id
bigint——
e.g. — (all-null in sample)
player2_id
bigintnullable——
e.g. — (all-null in sample)
player3_id
bigintnullable——
e.g. — (all-null in sample)
player4_id
bigintnullable——
e.g. — (all-null in sample)
player5_id
bigintnullable——
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
day
date——
e.g. — (all-null in sample)
line_number
integer——
e.g. — (all-null in sample)
line_type
string——
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/goalie_depth_charts?team_id=1&season_id=2026'
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.
Response Schema(6 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
day
date——
e.g. — (all-null in sample)
depth_order
integer—1=Starter, 2=Backup, 3=Third string
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(6 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
day
date——
e.g. — (all-null in sample)
depth_order
integer—1=Starter, 2=Backup, 3=Third string
e.g. — (all-null in sample)

Misc

arenasnhl.arenas
NHL arenas — current home venues and historical buildings, with capacity, surface type, and ice-rink dimensions.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(19 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
league_arena_id
integernullable—Official NHL arena ID from api-web.nhle.com
e.g. — (all-null in sample)
address
stringnullable——
e.g. — (all-null in sample)
capacity
integernullable——
e.g. — (all-null in sample)
city
string——
e.g. — (all-null in sample)
closed_date
timestamptznullable——
e.g. — (all-null in sample)
country
stringnullable——
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
elevation
floatnullable—Elevation in feet above sea level
e.g. — (all-null in sample)
image_url
stringnullable—URL to aerial/overview image of arena
e.g. — (all-null in sample)
latitude
floatnullable——
e.g. — (all-null in sample)
longitude
floatnullable——
e.g. — (all-null in sample)
name
string——
e.g. — (all-null in sample)
opened_date
timestamptznullable——
e.g. — (all-null in sample)
roof_type
stringnullable—Arena roof type (all indoor)
e.g. — (all-null in sample)
state
stringnullable——
e.g. — (all-null in sample)
surface
string—Playing surface type
e.g. — (all-null in sample)
team_name
stringnullable——
e.g. — (all-null in sample)
timezone
stringnullable—IANA timezone (e.g., America/New_York)
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(19 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
league_arena_id
integernullable—Official NHL arena ID from api-web.nhle.com
e.g. — (all-null in sample)
address
stringnullable——
e.g. — (all-null in sample)
capacity
integernullable——
e.g. — (all-null in sample)
city
string——
e.g. — (all-null in sample)
closed_date
timestamptznullable——
e.g. — (all-null in sample)
country
stringnullable——
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
elevation
floatnullable—Elevation in feet above sea level
e.g. — (all-null in sample)
image_url
stringnullable—URL to aerial/overview image of arena
e.g. — (all-null in sample)
latitude
floatnullable——
e.g. — (all-null in sample)
longitude
floatnullable——
e.g. — (all-null in sample)
name
string——
e.g. — (all-null in sample)
opened_date
timestamptznullable——
e.g. — (all-null in sample)
roof_type
stringnullable—Arena roof type (all indoor)
e.g. — (all-null in sample)
state
stringnullable——
e.g. — (all-null in sample)
surface
string—Playing surface type
e.g. — (all-null in sample)
team_name
stringnullable——
e.g. — (all-null in sample)
timezone
stringnullable—IANA timezone (e.g., America/New_York)
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/playoff_series?season_id=2026'
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.
Response Schema(15 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
away_team_id
bigint—
e.g. — (all-null in sample)
home_team_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
series_id
integernullable——
e.g. — (all-null in sample)
winner_team_id
bigintnullable—
e.g. — (all-null in sample)
away_team_seed
integer——
e.g. — (all-null in sample)
away_team_wins
integer——
e.g. — (all-null in sample)
conference
stringnullable——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
home_team_seed
integer——
e.g. — (all-null in sample)
home_team_wins
integer——
e.g. — (all-null in sample)
max_games
integer——
e.g. — (all-null in sample)
playoff_round
string——
e.g. — (all-null in sample)
status
string——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(15 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
away_team_id
bigint—
e.g. — (all-null in sample)
home_team_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
series_id
integernullable——
e.g. — (all-null in sample)
winner_team_id
bigintnullable—
e.g. — (all-null in sample)
away_team_seed
integer——
e.g. — (all-null in sample)
away_team_wins
integer——
e.g. — (all-null in sample)
conference
stringnullable——
e.g. — (all-null in sample)
games_played
integer——
e.g. — (all-null in sample)
home_team_seed
integer——
e.g. — (all-null in sample)
home_team_wins
integer——
e.g. — (all-null in sample)
max_games
integer——
e.g. — (all-null in sample)
playoff_round
string——
e.g. — (all-null in sample)
status
string——
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(9 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
draft_id
integernullable——
e.g. — (all-null in sample)
original_team_id
integernullableTeam that originally owned the pick
e.g. — (all-null in sample)
player_id
bigintnullable—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
overall_pick
integer——
e.g. — (all-null in sample)
pick_in_round
integer——
e.g. — (all-null in sample)
round
integer——
e.g. — (all-null in sample)
year
integer——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(9 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
draft_id
integernullable——
e.g. — (all-null in sample)
original_team_id
integernullableTeam that originally owned the pick
e.g. — (all-null in sample)
player_id
bigintnullable—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
overall_pick
integer——
e.g. — (all-null in sample)
pick_in_round
integer——
e.g. — (all-null in sample)
round
integer——
e.g. — (all-null in sample)
year
integer——
e.g. — (all-null in sample)
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.
⚠️ 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 5000.
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 --compressed \
  -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.
Response Schema(16 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
body_part
string——
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
end_date
timestamptznullable——
e.g. — (all-null in sample)
expected_return_date
timestamptznullable——
e.g. — (all-null in sample)
games_missed
integer——
e.g. — (all-null in sample)
injury_type
stringnullable——
e.g. — (all-null in sample)
is_surgery_required
booleannullable——
e.g. — (all-null in sample)
side
stringnullable——
e.g. — (all-null in sample)
source
stringnullable——
e.g. — (all-null in sample)
start_date
timestamptz——
e.g. — (all-null in sample)
status
string——
e.g. — (all-null in sample)
updated_date
timestamptz——
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(16 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
player_id
bigint—
e.g. — (all-null in sample)
season_id
bigint—
e.g. — (all-null in sample)
team_id
bigint—
e.g. — (all-null in sample)
body_part
string——
e.g. — (all-null in sample)
description
stringnullable——
e.g. — (all-null in sample)
end_date
timestamptznullable——
e.g. — (all-null in sample)
expected_return_date
timestamptznullable——
e.g. — (all-null in sample)
games_missed
integer——
e.g. — (all-null in sample)
injury_type
stringnullable——
e.g. — (all-null in sample)
is_surgery_required
booleannullable——
e.g. — (all-null in sample)
side
stringnullable——
e.g. — (all-null in sample)
source
stringnullable——
e.g. — (all-null in sample)
start_date
timestamptz——
e.g. — (all-null in sample)
status
string——
e.g. — (all-null in sample)
updated_date
timestamptz——
e.g. — (all-null in sample)
player_newsnhl.player_news
News about NHL players — trades, IR placements, line changes, suspensions, and general beat-reporter updates.
⚠️ 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.
categoryquerystringoptional
Filter by news category (injury, transaction, lineup, general). Values: general, injury, lineup, transaction.
status_enumquerystringoptional
Filter by player status designation. Values: RULED_OUT, DOUBTFUL, QUESTIONABLE, PROBABLE, CLEARED, MINUTES_LIMIT, MINUTES_LIFTED, STARTING, BENCHED, INACTIVE, ACTIVE, IR_PLACED, IR_ACTIVATED, OUT_SEASON, TRADED, RELEASED, SIGNED, ROUTINE, UNSIGNED.
urgencyquerystringoptional
Filter by news urgency. Values: BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE.
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 5000.
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 --compressed \
  -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.
Response Schema(28 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
external_id
stringnullable—Unique identifier from the news provider.
e.g. — (all-null in sample)
game_id
bigintnullableAssociated game ID when this news item relates to a specific game.
news_id
integernullable—External news item ID from the provider.
e.g. — (all-null in sample)
opponent_team_id
bigintnullableOpponent team ID when this news item relates to an upcoming or active game matchup.
player_id
bigintnullablePlayer ID associated with the news report.
e.g. — (all-null in sample)
team_id
bigintnullableTeam ID of the player at the time of publication.
e.g. — (all-null in sample)
ai_processed
boolean—Whether this story was generated or enriched via LLM summarization.
e.g. — (all-null in sample)
author
stringnullable—Reporter or author of the article.
e.g. — (all-null in sample)
categories
stringnullable—Comma-separated raw topic tags.
e.g. — (all-null in sample)
category
stringnullable—injury, transaction, lineup, general
e.g. — (all-null in sample)
content
stringnullable—Full text content of the news report.
e.g. — (all-null in sample)
description
stringnullable—Brief synopsis or summary of the news event.
first_reported_at
timestamptznullable—Timestamp when this story was first reported before multi-source compaction.
link
stringnullable—URL link to the original article or source video.
news_time
timestamptz—Publication timestamp of the news story.
e.g. — (all-null in sample)
original_source
stringnullable—Original publishing outlet or syndicate.
e.g. — (all-null in sample)
original_source_url
stringnullable—Canonical permalink on the original publisher.
e.g. — (all-null in sample)
priority
integer—Display priority score (1-10).
e.g. — (all-null in sample)
situational_impact
jsonbnullable—Structured situational impact assessment and fantasy implications for the player.
e.g. — (all-null in sample)
↳type
situational_impact.type
stringnullable—Impact direction: positive, negative, or neutral.
↳impact_enum
situational_impact.impact_enum
stringnullable—Standardized impact state (ACTIVE, CLEARED, QUESTIONABLE, etc.).
↳reason
situational_impact.reason
stringnullable—Narrative explaining the fantasy and playing-time impact.
↳ripple_effect
situational_impact.ripple_effect
stringnullable—Downstream tactical or fantasy consequences.
↳affected_players
situational_impact.affected_players
listnullable—Teammates whose opportunity or role is impacted.
↳affected_player_ids
situational_impact.affected_player_ids
listnullable—IDs of impacted teammates.
source
stringnullable—Primary news source or publication.
e.g. — (all-null in sample)
sources
jsonbnullable—Source citations with source name, URL, author, and published timestamp.
↳url
sources.url
stringnullable—Source article or media link.
↳source
sources.source
stringnullable—Publisher or feed identifier.
↳author
sources.author
stringnullable—Reporting journalist or source author.
↳published_at
sources.published_at
timestamptznullable—Source publication timestamp.
status_enum
stringnullable—Standardized player status designation (RULED_OUT, DOUBTFUL, QUESTIONABLE, PROBABLE, CLEARED, MINUTES_LIMIT, MINUTES_LIFTED, STARTING, BENCHED, INACTIVE, ACTIVE, IR_PLACED, IR_ACTIVATED, TRADED, RELEASED, SIGNED, ROUTINE).
terms_of_use
stringnullable—Syndication terms and attribution.
e.g. — (all-null in sample)
title
string—Headline of the news report.
e.g. — (all-null in sample)
updated_time
timestamptznullable—Timestamp when the story was last revised.
e.g. — (all-null in sample)
urgency
stringnullable—Urgency level of the news event (BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE).
url
stringnullable—Original source URL.
e.g. — (all-null in sample)
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 --compressed \
  -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.
Response Schema(28 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
external_id
stringnullable—Unique identifier from the news provider.
e.g. — (all-null in sample)
game_id
bigintnullableAssociated game ID when this news item relates to a specific game.
news_id
integernullable—External news item ID from the provider.
e.g. — (all-null in sample)
opponent_team_id
bigintnullableOpponent team ID when this news item relates to an upcoming or active game matchup.
player_id
bigintnullablePlayer ID associated with the news report.
e.g. — (all-null in sample)
team_id
bigintnullableTeam ID of the player at the time of publication.
e.g. — (all-null in sample)
ai_processed
boolean—Whether this story was generated or enriched via LLM summarization.
e.g. — (all-null in sample)
author
stringnullable—Reporter or author of the article.
e.g. — (all-null in sample)
categories
stringnullable—Comma-separated raw topic tags.
e.g. — (all-null in sample)
category
stringnullable—injury, transaction, lineup, general
e.g. — (all-null in sample)
content
stringnullable—Full text content of the news report.
e.g. — (all-null in sample)
description
stringnullable—Brief synopsis or summary of the news event.
first_reported_at
timestamptznullable—Timestamp when this story was first reported before multi-source compaction.
link
stringnullable—URL link to the original article or source video.
news_time
timestamptz—Publication timestamp of the news story.
e.g. — (all-null in sample)
original_source
stringnullable—Original publishing outlet or syndicate.
e.g. — (all-null in sample)
original_source_url
stringnullable—Canonical permalink on the original publisher.
e.g. — (all-null in sample)
priority
integer—Display priority score (1-10).
e.g. — (all-null in sample)
situational_impact
jsonbnullable—Structured situational impact assessment and fantasy implications for the player.
e.g. — (all-null in sample)
↳type
situational_impact.type
stringnullable—Impact direction: positive, negative, or neutral.
↳impact_enum
situational_impact.impact_enum
stringnullable—Standardized impact state (ACTIVE, CLEARED, QUESTIONABLE, etc.).
↳reason
situational_impact.reason
stringnullable—Narrative explaining the fantasy and playing-time impact.
↳ripple_effect
situational_impact.ripple_effect
stringnullable—Downstream tactical or fantasy consequences.
↳affected_players
situational_impact.affected_players
listnullable—Teammates whose opportunity or role is impacted.
↳affected_player_ids
situational_impact.affected_player_ids
listnullable—IDs of impacted teammates.
source
stringnullable—Primary news source or publication.
e.g. — (all-null in sample)
sources
jsonbnullable—Source citations with source name, URL, author, and published timestamp.
↳url
sources.url
stringnullable—Source article or media link.
↳source
sources.source
stringnullable—Publisher or feed identifier.
↳author
sources.author
stringnullable—Reporting journalist or source author.
↳published_at
sources.published_at
timestamptznullable—Source publication timestamp.
status_enum
stringnullable—Standardized player status designation (RULED_OUT, DOUBTFUL, QUESTIONABLE, PROBABLE, CLEARED, MINUTES_LIMIT, MINUTES_LIFTED, STARTING, BENCHED, INACTIVE, ACTIVE, IR_PLACED, IR_ACTIVATED, TRADED, RELEASED, SIGNED, ROUTINE).
terms_of_use
stringnullable—Syndication terms and attribution.
e.g. — (all-null in sample)
title
string—Headline of the news report.
e.g. — (all-null in sample)
updated_time
timestamptznullable—Timestamp when the story was last revised.
e.g. — (all-null in sample)
urgency
stringnullable—Urgency level of the news event (BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE).
url
stringnullable—Original source URL.
e.g. — (all-null in sample)
team_newsnhl.team_news
News and updates about NHL teams — game previews, coaching changes, front-office moves, and beat reports.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/nhl/team_news
Requires one of: team_id — requests satisfying none of these return 400.
Parameters
team_idquerybigintoptional
Filter by team.
categoryquerystringoptional
Filter by category (game_preview, coaching, transaction, general, draft, depth_chart). Values: game_preview, coaching, transaction, general, draft, depth_chart.
urgencyquerystringoptional
Filter by news urgency. Values: BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE.
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 5000.
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 --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/team_news?team_id=1'
Responses
200team_news rows matching the declared filter set, wrapped in { team_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.
Response Schema(12 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
external_id
stringnullable—Canonical external identifier for deduplication.
game_id
bigintnullableAssociated game ID when news relates to a specific game.
opponent_team_id
bigintnullableOpponent team ID when news relates to an upcoming or completed game matchup.
team_id
bigintTeam ID that this news event pertains to.
ai_processed
booleannullable—Whether this story was generated or enriched via LLM summarization.
category
stringnullable—game_preview, coaching, transaction, general
news_time
timestamptz—Publication timestamp of the team story.
sources
jsonbnullable—Source citations with publisher name, URL, author, and published timestamp.
↳url
sources.url
stringnullable—Source article or media link.
↳source
sources.source
stringnullable—Publisher or feed identifier.
↳author
sources.author
stringnullable—Reporting journalist or source author.
↳published_at
sources.published_at
timestamptznullable—Source publication timestamp.
summary
string—Concise journalistic summary of the team news event.
title
string—Headline of the team news story.
urgency
stringnullable—ROUTINE, MEDIUM, HIGH, BREAKING_GAME_TIME
GET/api/v1/nhl/team_news/{id}
Parameters
idpathbigintrequired
Primary key (id) of the team_new row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/nhl/team_news/{pk_value}'
Responses
200Single team_new row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(12 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
external_id
stringnullable—Canonical external identifier for deduplication.
game_id
bigintnullableAssociated game ID when news relates to a specific game.
opponent_team_id
bigintnullableOpponent team ID when news relates to an upcoming or completed game matchup.
team_id
bigintTeam ID that this news event pertains to.
ai_processed
booleannullable—Whether this story was generated or enriched via LLM summarization.
category
stringnullable—game_preview, coaching, transaction, general
news_time
timestamptz—Publication timestamp of the team story.
sources
jsonbnullable—Source citations with publisher name, URL, author, and published timestamp.
↳url
sources.url
stringnullable—Source article or media link.
↳source
sources.source
stringnullable—Publisher or feed identifier.
↳author
sources.author
stringnullable—Reporting journalist or source author.
↳published_at
sources.published_at
timestamptznullable—Source publication timestamp.
summary
string—Concise journalistic summary of the team news event.
title
string—Headline of the team news story.
urgency
stringnullable—ROUTINE, MEDIUM, HIGH, BREAKING_GAME_TIME