NBA API Reference
Every NBA game across the 82-game regular season, the In-Season Tournament, the play-in round, and the four-round playoffs through the Finals — with the players, coaching staffs, depth charts, injuries, betting markets, and possession-level play-by-play behind them.
Main
seasons
nba.seasonsEach NBA league year, running from October through June — the 82-game regular season, the play-in tournament, and the four-round playoffs that end with the NBA Finals.
GET/api/v1/nba/seasonsList seasons for NBA
Parameters
limitqueryintegeroptionaldefault 25Page size. Defaults to 25; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
end_date | timestamptznullable | — | — e.g. 2017-06-12T04:00:00.000Z |
post_season_start_date | timestamptznullable | — | — e.g. 2017-04-15T04:00:00.000Z |
regular_season_start_date | timestamptznullable | — | — e.g. 2016-10-25T04:00:00.000Z |
start_date | timestamptz | — | — e.g. 2016-10-25T04:00:00.000Z |
start_year | integer | — | — e.g. 2016 |
GET/api/v1/nba/seasons/{id}Get a single season by id
Parameters
idpathbigintrequiredPrimary 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/nba/seasons/{pk_value}'Responses
200Single season row.application/jsonshow example ▸
404Row not found.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
end_date | timestamptznullable | — | — e.g. 2017-06-12T04:00:00.000Z |
post_season_start_date | timestamptznullable | — | — e.g. 2017-04-15T04:00:00.000Z |
regular_season_start_date | timestamptznullable | — | — e.g. 2016-10-25T04:00:00.000Z |
start_date | timestamptz | — | — e.g. 2016-10-25T04:00:00.000Z |
start_year | integer | — | — e.g. 2016 |
teams
nba.teamsThe 30 NBA franchises, organized into the Eastern and Western Conferences with three divisions in each.
GET/api/v1/nba/teamsList teams for NBA
Parameters
activequerybooleanoptionalFilter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(10 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_team_id | integernullable | — | Official NBA team ID from stats.nba.com e.g. 1610612738 |
stadium_id | bigintnullable | — e.g. — (all-null in sample) | |
abbreviation | string | — | — e.g. BOS |
active | boolean | — | — e.g. true |
city | string | — | — e.g. Los Angeles |
conference | string | — | — Values:EasternWestern |
division | string | — | — Values:AtlanticCentralSoutheastNorthwestPacificSouthwest |
full_name | string | — | — e.g. Boston Celtics |
name | string | — | — e.g. Celtics |
GET/api/v1/nba/teams/{id}Get a single team by id
Parameters
idpathbigintrequiredPrimary 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/nba/teams/{pk_value}'Responses
200Single team row.application/jsonshow example ▸
404Row not found.
Response Schema(10 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_team_id | integernullable | — | Official NBA team ID from stats.nba.com e.g. 1610612738 |
stadium_id | bigintnullable | — e.g. — (all-null in sample) | |
abbreviation | string | — | — e.g. BOS |
active | boolean | — | — e.g. true |
city | string | — | — e.g. Los Angeles |
conference | string | — | — Values:EasternWestern |
division | string | — | — Values:AtlanticCentralSoutheastNorthwestPacificSouthwest |
full_name | string | — | — e.g. Boston Celtics |
name | string | — | — e.g. Celtics |
games
nba.gamesEvery scheduled and played NBA game from the 2020-21 season onward — preseason, the 82-game regular season, the In-Season Tournament, the play-in round, and the four-round playoffs through the NBA Finals. All-Star exhibitions are not included.
GET/api/v1/nba/gamesList games for NBA
Requires one of:
season_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a season. Defaults to the current season.
home_team_idquerybigintoptionalFilter by home team.
away_team_idquerybigintoptionalFilter by away team.
statusquerystringoptionalFilter by game status. Values: Cancelled, Final, Scheduled.
dayqueryintegeroptionalFilter by calendar day (YYYYMMDD integer, US Eastern) — e.g. day=20260609 for tonight's slate. Note season_id defaults to the current season; pass season_id explicitly when querying a past season's day. Range syntax: day__gte=, day__lte=, day__between=.
season_typequerystringoptionalFilter by season phase (regular_season, preseason, postseason, play_in, in_season_tournament, all_star). Values: all_star, in_season_tournament, play_in, postseason, preseason, regular_season.
limitqueryintegeroptionaldefault 100Page size. Defaults to 100; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(27 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 1 | |
home_team_id | bigint | — e.g. 1 | |
league_game_id | stringnullable | — | Official NBA game ID from stats.nba.com e.g. 0022500650 |
season_id | bigint | — e.g. 2023 | |
stadium_id | integernullable | — e.g. 19 | |
attendance | integernullable | — | — e.g. 19156 |
away_rotation_number | integernullable | — | — e.g. — (all-null in sample) |
away_team | string | — | — e.g. BOS |
away_team_score | integer | — | — e.g. 113 |
channel | stringnullable | — | — e.g. NBA TV |
day | integer | — | — e.g. 20250413 |
end_time | timestamptznullable | — | — e.g. 2025-03-20T04:11:00.000Z |
game_label | stringnullable | — | — e.g. — (all-null in sample) |
game_sub_label | stringnullable | — | — e.g. — (all-null in sample) |
game_time | timestamptznullable | — | Scheduled tip-off (timezone-aware); null when the league published no time. e.g. 2025-04-13T19:30:00.000Z |
home_rotation_number | integernullable | — | — e.g. — (all-null in sample) |
home_team | string | — | — e.g. BOS |
home_team_score | integer | — | — e.g. 112 |
if_necessary | booleannullable | — | — e.g. — (all-null in sample) |
neutral_venue | boolean | — | — Values:falsetrue |
postponed_status | stringnullable | — | — e.g. — (all-null in sample) |
season_type | string | — | — Values:regular_seasonpostseasonpreseasonplay_inin_season_tournament |
series_game_number | stringnullable | — | — e.g. — (all-null in sample) |
series_name | stringnullable | — | — e.g. — (all-null in sample) |
series_text | stringnullable | — | — e.g. — (all-null in sample) |
status | string | — | — e.g. Final |
GET/api/v1/nba/games/{id}Get a single game by id
Parameters
idpathbigintrequiredPrimary 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/nba/games/{pk_value}'Responses
200Single game row.application/jsonshow example ▸
404Row not found.
Response Schema(27 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 1 | |
home_team_id | bigint | — e.g. 1 | |
league_game_id | stringnullable | — | Official NBA game ID from stats.nba.com e.g. 0022500650 |
season_id | bigint | — e.g. 2023 | |
stadium_id | integernullable | — e.g. 19 | |
attendance | integernullable | — | — e.g. 19156 |
away_rotation_number | integernullable | — | — e.g. — (all-null in sample) |
away_team | string | — | — e.g. BOS |
away_team_score | integer | — | — e.g. 113 |
channel | stringnullable | — | — e.g. NBA TV |
day | integer | — | — e.g. 20250413 |
end_time | timestamptznullable | — | — e.g. 2025-03-20T04:11:00.000Z |
game_label | stringnullable | — | — e.g. — (all-null in sample) |
game_sub_label | stringnullable | — | — e.g. — (all-null in sample) |
game_time | timestamptznullable | — | Scheduled tip-off (timezone-aware); null when the league published no time. e.g. 2025-04-13T19:30:00.000Z |
home_rotation_number | integernullable | — | — e.g. — (all-null in sample) |
home_team | string | — | — e.g. BOS |
home_team_score | integer | — | — e.g. 112 |
if_necessary | booleannullable | — | — e.g. — (all-null in sample) |
neutral_venue | boolean | — | — Values:falsetrue |
postponed_status | stringnullable | — | — e.g. — (all-null in sample) |
season_type | string | — | — Values:regular_seasonpostseasonpreseasonplay_inin_season_tournament |
series_game_number | stringnullable | — | — e.g. — (all-null in sample) |
series_name | stringnullable | — | — e.g. — (all-null in sample) |
series_text | stringnullable | — | — e.g. — (all-null in sample) |
status | string | — | — e.g. Final |
players
nba.playersEvery individual who has played in the NBA — current rosters, two-way and 10-day contracts, G-League call-ups, free agents, and retired veterans. The roster signal lives in `roster_status` (the canonical cross-league vocabulary) and `team_id` (null for free agents and retired players). Pass `?team_id=` to scope to one franchise's current roster, or omit it to scan the full historical roster pool.
GET/api/v1/nba/playersList players for NBA
Requires one of:
roster_status — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter to players whose current team_id matches. Null team_id rows (free agents, retired) are excluded when this filter is applied.
roster_statusquerystringoptionalFilter by canonical roster status. Defaults to active (current roster); pass roster_status= explicitly for other tiers (injured_reserve, free_agent, retired, inactive). The "on a team now" set is {active, injured_reserve}. Values: active, injured_reserve, free_agent, retired, inactive.
limitqueryintegeroptionaldefault 100Page size. Defaults to 100; max 5000.
from_idquerybigintoptionalReturn 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/nba/players?roster_status=example'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/jsonResponse Schema(40 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_player_id | integer | — | Official NBA player ID from stats.nba.com. Stable across seasons; use for cross-API joins to nba_stats sources. e.g. 203999 |
team_id | bigintnullable | FK to nba.teams. Null for free agents and retired players. e.g. 12 | |
birth_city | stringnullable | — | City of birth. e.g. Sombor |
birth_country | stringnullable | — | Country of birth (ISO English name). e.g. Serbia |
birth_date | datenullable | — | Birth date in YYYY-MM-DD form. e.g. 1995-02-19 |
birth_state | stringnullable | — | State / province of birth (US/Canadian players). e.g. |
display_fi_last | stringnullable | — | Display name in "F. Last" form. e.g. N. Jokić |
display_last_comma_first | stringnullable | — | Display name in "Last, First" form. Useful for sorted lists. e.g. Jokić, Nikola |
dleague_flag | stringnullable | — | Two-character bit-string from stats.nba.com: "00" no G-League history, "01" G-League experience, "11" currently G-League-affiliated (two-way / assignment). e.g. 00 |
draft_number | stringnullable | — | Overall pick number within the draft (string). Empty for undrafted. e.g. 41 |
draft_round | stringnullable | — | Draft round (string). Empty for undrafted players. e.g. 2 |
draft_year | stringnullable | — | Year the player was drafted (string form). Empty for undrafted players. e.g. 2014 |
experience | integernullable | — | Years of NBA experience as of the most recent season. Rookies = 0. e.g. 10 |
first_name | string | — | Player's legal first name as registered with the league. e.g. Nikola |
from_year | stringnullable | — | Player's NBA debut year as a string (per stats.nba.com). e.g. 2015 |
full_name | string | — | Convenience concatenation of first_name + last_name. Use this for display. e.g. Nikola Jokić |
full_position_list | stringnullable | — | Hyphenated full-word position list (e.g., "Guard-Forward", "Center-Forward"). Values:GuardForwardCenterGuard-ForwardForward-CenterCenter-ForwardForward-Guard |
games_played_flag | stringnullable | — | String "Y"/"N" indicating whether the player has played at least one regular-season game. Values:YN |
height | integernullable | — | Height in inches. e.g. 83 |
injury_body_part | stringnullable | — | Affected body part for the most recent injury (e.g., "Knee", "Ankle"). Null when injury_status is null. Values:anklekneeillnesshiptoebackwristfootcalfhamstringpelvisabdomenheelrestachillesthumbhand |
injury_detail | stringnullable | — | Free-text injury description from the source feed. e.g. |
injury_since | timestamptznullable | — | Timestamp of the injury status snapshot. Updated when player_news produces a new injury entry. e.g. 2026-04-12T18:30:00Z |
injury_status | stringnullable | — | Current injury status snapshot derived from player_news. Values: "OUT", "QUESTIONABLE"; null = no active injury designation (healthy). Values:OUTQUESTIONABLE |
jersey | stringnullable | — | Current jersey number as a string (some leagues allow leading zeros, e.g., "00"). e.g. 15 |
last_affiliation | stringnullable | — | Most recent pre-NBA affiliation (school, league, or team). e.g. Mega Basket / Serbia |
last_name | string | — | Player's legal last name. e.g. Jokić |
league_slug | stringnullable | — | NBA-issued URL slug (e.g., for stats.nba.com player page). e.g. nikola-jokic |
nba_flag | stringnullable | — | String "Y"/"N" indicating NBA experience. Almost always "Y" in this table. e.g. Y |
playercode | stringnullable | — | NBA-issued player code (lastname_firstname format). e.g. jokic_nikola |
position_category | stringnullable | — | Coarse positional grouping. One of Guard, Forward, Center, Utility. Values:GuardForwardCenterUtility |
primary_position | string | — | Primary position. One of G, F, C, G-F, F-C. (True PG/SG/SF/PF splits live in team_depth_charts.position.) Values:GFCG-FF-CUnknown |
roster_status | stringnullable | — | Canonical roster status, shared across leagues. NBA source granularity is coarse: "active" (on an NBA roster), "free_agent" (no team), "inactive" (not currently rostered); injured_reserve/retired appear where derivable. The "on a team now" set is {active, injured_reserve}. Values:inactiveactivefree_agent |
school | stringnullable | — | Last school attended before the NBA (college, prep, or international club). e.g. Mega Basket |
team_abbreviation | stringnullable | — | Current team's tri-letter code. e.g. DEN |
team_city | stringnullable | — | Current team's city name. e.g. Denver |
team_code | stringnullable | — | Current team's lowercase URL slug. e.g. nuggets |
team_name | stringnullable | — | Current team's mascot name (denormalized from teams.name for read convenience). e.g. Nuggets |
to_year | stringnullable | — | Player's most recent NBA season year. Equal to from_year for rookies. e.g. 2025 |
weight | integernullable | — | Listed weight in pounds. e.g. 284 |
GET/api/v1/nba/players/{id}Get a single player by id
Parameters
idpathbigintrequiredPrimary 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/nba/players/{pk_value}'Responses
200Single player row.application/jsonshow example ▸
404Row not found.
Response Schema(40 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_player_id | integer | — | Official NBA player ID from stats.nba.com. Stable across seasons; use for cross-API joins to nba_stats sources. e.g. 203999 |
team_id | bigintnullable | FK to nba.teams. Null for free agents and retired players. e.g. 12 | |
birth_city | stringnullable | — | City of birth. e.g. Sombor |
birth_country | stringnullable | — | Country of birth (ISO English name). e.g. Serbia |
birth_date | datenullable | — | Birth date in YYYY-MM-DD form. e.g. 1995-02-19 |
birth_state | stringnullable | — | State / province of birth (US/Canadian players). e.g. |
display_fi_last | stringnullable | — | Display name in "F. Last" form. e.g. N. Jokić |
display_last_comma_first | stringnullable | — | Display name in "Last, First" form. Useful for sorted lists. e.g. Jokić, Nikola |
dleague_flag | stringnullable | — | Two-character bit-string from stats.nba.com: "00" no G-League history, "01" G-League experience, "11" currently G-League-affiliated (two-way / assignment). e.g. 00 |
draft_number | stringnullable | — | Overall pick number within the draft (string). Empty for undrafted. e.g. 41 |
draft_round | stringnullable | — | Draft round (string). Empty for undrafted players. e.g. 2 |
draft_year | stringnullable | — | Year the player was drafted (string form). Empty for undrafted players. e.g. 2014 |
experience | integernullable | — | Years of NBA experience as of the most recent season. Rookies = 0. e.g. 10 |
first_name | string | — | Player's legal first name as registered with the league. e.g. Nikola |
from_year | stringnullable | — | Player's NBA debut year as a string (per stats.nba.com). e.g. 2015 |
full_name | string | — | Convenience concatenation of first_name + last_name. Use this for display. e.g. Nikola Jokić |
full_position_list | stringnullable | — | Hyphenated full-word position list (e.g., "Guard-Forward", "Center-Forward"). Values:GuardForwardCenterGuard-ForwardForward-CenterCenter-ForwardForward-Guard |
games_played_flag | stringnullable | — | String "Y"/"N" indicating whether the player has played at least one regular-season game. Values:YN |
height | integernullable | — | Height in inches. e.g. 83 |
injury_body_part | stringnullable | — | Affected body part for the most recent injury (e.g., "Knee", "Ankle"). Null when injury_status is null. Values:anklekneeillnesshiptoebackwristfootcalfhamstringpelvisabdomenheelrestachillesthumbhand |
injury_detail | stringnullable | — | Free-text injury description from the source feed. e.g. |
injury_since | timestamptznullable | — | Timestamp of the injury status snapshot. Updated when player_news produces a new injury entry. e.g. 2026-04-12T18:30:00Z |
injury_status | stringnullable | — | Current injury status snapshot derived from player_news. Values: "OUT", "QUESTIONABLE"; null = no active injury designation (healthy). Values:OUTQUESTIONABLE |
jersey | stringnullable | — | Current jersey number as a string (some leagues allow leading zeros, e.g., "00"). e.g. 15 |
last_affiliation | stringnullable | — | Most recent pre-NBA affiliation (school, league, or team). e.g. Mega Basket / Serbia |
last_name | string | — | Player's legal last name. e.g. Jokić |
league_slug | stringnullable | — | NBA-issued URL slug (e.g., for stats.nba.com player page). e.g. nikola-jokic |
nba_flag | stringnullable | — | String "Y"/"N" indicating NBA experience. Almost always "Y" in this table. e.g. Y |
playercode | stringnullable | — | NBA-issued player code (lastname_firstname format). e.g. jokic_nikola |
position_category | stringnullable | — | Coarse positional grouping. One of Guard, Forward, Center, Utility. Values:GuardForwardCenterUtility |
primary_position | string | — | Primary position. One of G, F, C, G-F, F-C. (True PG/SG/SF/PF splits live in team_depth_charts.position.) Values:GFCG-FF-CUnknown |
roster_status | stringnullable | — | Canonical roster status, shared across leagues. NBA source granularity is coarse: "active" (on an NBA roster), "free_agent" (no team), "inactive" (not currently rostered); injured_reserve/retired appear where derivable. The "on a team now" set is {active, injured_reserve}. Values:inactiveactivefree_agent |
school | stringnullable | — | Last school attended before the NBA (college, prep, or international club). e.g. Mega Basket |
team_abbreviation | stringnullable | — | Current team's tri-letter code. e.g. DEN |
team_city | stringnullable | — | Current team's city name. e.g. Denver |
team_code | stringnullable | — | Current team's lowercase URL slug. e.g. nuggets |
team_name | stringnullable | — | Current team's mascot name (denormalized from teams.name for read convenience). e.g. Nuggets |
to_year | stringnullable | — | Player's most recent NBA season year. Equal to from_year for rookies. e.g. 2025 |
weight | integernullable | — | Listed weight in pounds. e.g. 284 |
GET/api/v1/nba/players/searchFuzzy search NBA players by name
Parameters
qquerystringrequiredSearch query — matches against full_name (case-insensitive).
limitqueryintegeroptionaldefault 10Max results to return. Default 10; max 50.
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/nba/players/search?q=example&limit=10'Responses
200Fuzzy search NBA players by nameapplication/jsonshow example ▸
400q is empty or exceeds 100 chars
503pg_trgm extension unavailable on the DB
Response Schema(40 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_player_id | integer | — | Official NBA player ID from stats.nba.com. Stable across seasons; use for cross-API joins to nba_stats sources. e.g. 203999 |
team_id | bigintnullable | FK to nba.teams. Null for free agents and retired players. e.g. 12 | |
birth_city | stringnullable | — | City of birth. e.g. Sombor |
birth_country | stringnullable | — | Country of birth (ISO English name). e.g. Serbia |
birth_date | datenullable | — | Birth date in YYYY-MM-DD form. e.g. 1995-02-19 |
birth_state | stringnullable | — | State / province of birth (US/Canadian players). e.g. |
display_fi_last | stringnullable | — | Display name in "F. Last" form. e.g. N. Jokić |
display_last_comma_first | stringnullable | — | Display name in "Last, First" form. Useful for sorted lists. e.g. Jokić, Nikola |
dleague_flag | stringnullable | — | Two-character bit-string from stats.nba.com: "00" no G-League history, "01" G-League experience, "11" currently G-League-affiliated (two-way / assignment). e.g. 00 |
draft_number | stringnullable | — | Overall pick number within the draft (string). Empty for undrafted. e.g. 41 |
draft_round | stringnullable | — | Draft round (string). Empty for undrafted players. e.g. 2 |
draft_year | stringnullable | — | Year the player was drafted (string form). Empty for undrafted players. e.g. 2014 |
experience | integernullable | — | Years of NBA experience as of the most recent season. Rookies = 0. e.g. 10 |
first_name | string | — | Player's legal first name as registered with the league. e.g. Nikola |
from_year | stringnullable | — | Player's NBA debut year as a string (per stats.nba.com). e.g. 2015 |
full_name | string | — | Convenience concatenation of first_name + last_name. Use this for display. e.g. Nikola Jokić |
full_position_list | stringnullable | — | Hyphenated full-word position list (e.g., "Guard-Forward", "Center-Forward"). Values:GuardForwardCenterGuard-ForwardForward-CenterCenter-ForwardForward-Guard |
games_played_flag | stringnullable | — | String "Y"/"N" indicating whether the player has played at least one regular-season game. Values:YN |
height | integernullable | — | Height in inches. e.g. 83 |
injury_body_part | stringnullable | — | Affected body part for the most recent injury (e.g., "Knee", "Ankle"). Null when injury_status is null. Values:anklekneeillnesshiptoebackwristfootcalfhamstringpelvisabdomenheelrestachillesthumbhand |
injury_detail | stringnullable | — | Free-text injury description from the source feed. e.g. |
injury_since | timestamptznullable | — | Timestamp of the injury status snapshot. Updated when player_news produces a new injury entry. e.g. 2026-04-12T18:30:00Z |
injury_status | stringnullable | — | Current injury status snapshot derived from player_news. Values: "OUT", "QUESTIONABLE"; null = no active injury designation (healthy). Values:OUTQUESTIONABLE |
jersey | stringnullable | — | Current jersey number as a string (some leagues allow leading zeros, e.g., "00"). e.g. 15 |
last_affiliation | stringnullable | — | Most recent pre-NBA affiliation (school, league, or team). e.g. Mega Basket / Serbia |
last_name | string | — | Player's legal last name. e.g. Jokić |
league_slug | stringnullable | — | NBA-issued URL slug (e.g., for stats.nba.com player page). e.g. nikola-jokic |
nba_flag | stringnullable | — | String "Y"/"N" indicating NBA experience. Almost always "Y" in this table. e.g. Y |
playercode | stringnullable | — | NBA-issued player code (lastname_firstname format). e.g. jokic_nikola |
position_category | stringnullable | — | Coarse positional grouping. One of Guard, Forward, Center, Utility. Values:GuardForwardCenterUtility |
primary_position | string | — | Primary position. One of G, F, C, G-F, F-C. (True PG/SG/SF/PF splits live in team_depth_charts.position.) Values:GFCG-FF-CUnknown |
roster_status | stringnullable | — | Canonical roster status, shared across leagues. NBA source granularity is coarse: "active" (on an NBA roster), "free_agent" (no team), "inactive" (not currently rostered); injured_reserve/retired appear where derivable. The "on a team now" set is {active, injured_reserve}. Values:inactiveactivefree_agent |
school | stringnullable | — | Last school attended before the NBA (college, prep, or international club). e.g. Mega Basket |
team_abbreviation | stringnullable | — | Current team's tri-letter code. e.g. DEN |
team_city | stringnullable | — | Current team's city name. e.g. Denver |
team_code | stringnullable | — | Current team's lowercase URL slug. e.g. nuggets |
team_name | stringnullable | — | Current team's mascot name (denormalized from teams.name for read convenience). e.g. Nuggets |
to_year | stringnullable | — | Player's most recent NBA season year. Equal to from_year for rookies. e.g. 2025 |
weight | integernullable | — | Listed weight in pounds. e.g. 284 |
Plays
game_possessions
nba.game_possessionsEach offensive possession in an NBA game (regular season, play-in, IST, and playoffs — no preseason) — which team had the ball, how the possession started, how it ended (made shot, missed shot, turnover, foul), and how long it lasted.
GET/api/v1/nba/game_possessionsList game_possessions for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
team_idquerybigintoptionalFilter by team in possession.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_possessions?game_id=1'Responses
200game_possessions rows matching the declared filter set, wrapped in { game_possessions, 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/jsonResponse Schema(29 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 2357 | |
team_id | bigintnullable | — e.g. 19 | |
ast | integer | — | — e.g. 0 |
away_score | integer | — | — e.g. 38 |
blk | integer | — | — e.g. 0 |
cum_away_poss | integer | — | — e.g. 13 |
cum_home_poss | integer | — | — e.g. 75 |
dreb | integer | — | — e.g. 0 |
end_clock | integernullable | — | — e.g. 0 |
end_nba_event_num | integer | — | — e.g. 7 |
fg3a | integer | — | — e.g. 0 |
fg3m | integer | — | — e.g. 0 |
fga | integer | — | — e.g. 1 |
fgm | integer | — | — e.g. 0 |
fta | integer | — | — e.g. 0 |
ftm | integer | — | — e.g. 0 |
game_seconds_elapsed | integer | — | — e.g. 720 |
home_score | integer | — | — e.g. 82 |
oreb | integer | — | — e.g. 0 |
period | integer | — | — e.g. 1 |
pf | integer | — | — e.g. 0 |
pts | integer | — | — e.g. 0 |
start_clock | integer | — | — e.g. 720 |
start_nba_event_num | integer | — | — e.g. 4 |
stl | integer | — | — e.g. 0 |
time_actual_end | timestamptznullable | — | — e.g. 2024-10-30T02:08:06.000Z |
time_actual_start | timestamptznullable | — | — e.g. 2024-10-28T23:53:48.400Z |
tov | integer | — | — e.g. 0 |
GET/api/v1/nba/game_possessions/{id}Get a single game_possession by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_possession 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/nba/game_possessions/{pk_value}'Responses
200Single game_possession row.application/jsonshow example ▸
404Row not found.
Response Schema(29 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 2357 | |
team_id | bigintnullable | — e.g. 19 | |
ast | integer | — | — e.g. 0 |
away_score | integer | — | — e.g. 38 |
blk | integer | — | — e.g. 0 |
cum_away_poss | integer | — | — e.g. 13 |
cum_home_poss | integer | — | — e.g. 75 |
dreb | integer | — | — e.g. 0 |
end_clock | integernullable | — | — e.g. 0 |
end_nba_event_num | integer | — | — e.g. 7 |
fg3a | integer | — | — e.g. 0 |
fg3m | integer | — | — e.g. 0 |
fga | integer | — | — e.g. 1 |
fgm | integer | — | — e.g. 0 |
fta | integer | — | — e.g. 0 |
ftm | integer | — | — e.g. 0 |
game_seconds_elapsed | integer | — | — e.g. 720 |
home_score | integer | — | — e.g. 82 |
oreb | integer | — | — e.g. 0 |
period | integer | — | — e.g. 1 |
pf | integer | — | — e.g. 0 |
pts | integer | — | — e.g. 0 |
start_clock | integer | — | — e.g. 720 |
start_nba_event_num | integer | — | — e.g. 4 |
stl | integer | — | — e.g. 0 |
time_actual_end | timestamptznullable | — | — e.g. 2024-10-30T02:08:06.000Z |
time_actual_start | timestamptznullable | — | — e.g. 2024-10-28T23:53:48.400Z |
tov | integer | — | — e.g. 0 |
play_by_plays
nba.play_by_playsEvery individual event in every NBA game (regular season, play-in, IST, and playoffs — no preseason) — made and missed shots, rebounds, assists, fouls, turnovers, blocks, steals, substitutions, and timeouts, with the game clock at the moment. Period and score context live on game_possessions (FK game_possession_id).
GET/api/v1/nba/play_by_playsList play_by_plays for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
player_idquerybigintoptionalFilter to plays involving a specific player.
team_idquerybigintoptionalFilter to plays by a specific team.
event_typequeryintegeroptionalFilter by event type code: 1 made shot, 2 missed shot, 3 free throw, 4 rebound, 5 turnover, 6 foul, 7 violation, 8 substitution, 9 timeout, 10 jump ball, 11 ejection, 12 period start, 13 period end, 18 instant replay (stats.nba.com codes).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/play_by_plays?game_id=1'Responses
200play_by_plays rows matching the declared filter set, wrapped in { play_by_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/jsonResponse Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 2377 | |
game_possession_id | bigint | — e.g. 16457458 | |
play_id | string | — | — e.g. 0052400111_2 |
player_id | bigintnullable | — e.g. 49 | |
player2_id | bigintnullable | — e.g. 49 | |
player2_team_id | bigintnullable | — e.g. 21 | |
player3_id | bigintnullable | — e.g. 227 | |
player3_team_id | bigintnullable | — e.g. 21 | |
team_id | bigintnullable | — e.g. 21 | |
end_clock | integernullable | — | — e.g. — (all-null in sample) |
event_seq | integer | — | — e.g. 100 |
event_sub_type | integer | — | — e.g. 0 |
event_type | integer | — | — e.g. 8 |
home_description | string | — | — e.g. |
nba_event_num | integer | — | — e.g. 2 |
neutral_description | string | — | — e.g. |
possession_seq | integer | — | — e.g. 142 |
start_clock | integer | — | — e.g. 720 |
time_actual | timestamptznullable | — | — e.g. 2025-04-17T01:56:41.900Z |
visitor_description | string | — | — e.g. |
GET/api/v1/nba/play_by_plays/{id}Get a single play_by_play by id
Parameters
idpathbigintrequiredPrimary key (id) of the play_by_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/nba/play_by_plays/{pk_value}'Responses
200Single play_by_play row.application/jsonshow example ▸
404Row not found.
Response Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 2377 | |
game_possession_id | bigint | — e.g. 16457458 | |
play_id | string | — | — e.g. 0052400111_2 |
player_id | bigintnullable | — e.g. 49 | |
player2_id | bigintnullable | — e.g. 49 | |
player2_team_id | bigintnullable | — e.g. 21 | |
player3_id | bigintnullable | — e.g. 227 | |
player3_team_id | bigintnullable | — e.g. 21 | |
team_id | bigintnullable | — e.g. 21 | |
end_clock | integernullable | — | — e.g. — (all-null in sample) |
event_seq | integer | — | — e.g. 100 |
event_sub_type | integer | — | — e.g. 0 |
event_type | integer | — | — e.g. 8 |
home_description | string | — | — e.g. |
nba_event_num | integer | — | — e.g. 2 |
neutral_description | string | — | — e.g. |
possession_seq | integer | — | — e.g. 142 |
start_clock | integer | — | — e.g. 720 |
time_actual | timestamptznullable | — | — e.g. 2025-04-17T01:56:41.900Z |
visitor_description | string | — | — e.g. |
Stats
season_team_stats
nba.season_team_statsSeason totals for each NBA team — wins and losses, points scored and allowed, pace, offensive and defensive ratings, rebounding margins, shooting splits, and turnover differentials. Regular-season games only; playoff, play-in, and preseason totals are not included.
GET/api/v1/nba/season_team_statsList season_team_stats for NBA
Requires one of:
season_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a single season. Defaults to the current season.
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 11 | |
games_played | integer | — | — e.g. 82 |
losses | integer | — | — e.g. 38 |
pts_allowed | integer | — | — e.g. 0 |
pts_scored | integer | — | — e.g. 9372 |
ties | integer | — | — e.g. 0 |
wins | integer | — | — e.g. 44 |
GET/api/v1/nba/season_team_stats/{id}Get a single season_team_stat by id
Parameters
idpathbigintrequiredPrimary 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/nba/season_team_stats/{pk_value}'Responses
200Single season_team_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 11 | |
games_played | integer | — | — e.g. 82 |
losses | integer | — | — e.g. 38 |
pts_allowed | integer | — | — e.g. 0 |
pts_scored | integer | — | — e.g. 9372 |
ties | integer | — | — e.g. 0 |
wins | integer | — | — e.g. 44 |
team_standings
nba.team_standingsConference and division standings throughout the NBA season — wins, losses, win percentage, games behind, last-10 record, win/loss streak, and home/away splits as of each date.
GET/api/v1/nba/team_standingsList team_standings for NBA
Requires one of:
season_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a single season. Defaults to the current season.
team_idquerybigintoptionalFilter by team.
dayqueryintegeroptionalStandings as of this day (YYYYMMDD integer). Omit for all daily snapshots, newest first; pass a day for a point-in-time table. Range syntax: day__gte=, day__lte=, day__between=.
limitqueryintegeroptionaldefault 100Page size. Defaults to 100; max 5000.
from_idquerybigintoptionalReturn 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/nba/team_standings?season_id=2026'Responses
200team_standings rows matching the declared filter set, wrapped in { team_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/jsonResponse Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 1 | |
away_losses | integer | — | — e.g. 6 |
away_wins | integer | — | — e.g. 1 |
conference_gb | decimal | — | Games back from conference leader e.g. 0.0000 |
conference_rank | integer | — | 1-15 within conference e.g. 8 |
day | integer | — | YYYYMMDD — standings as of this date (before games on this day) e.g. 20241103 |
division_rank | integer | — | 1-5 within division e.g. 1 |
games_played | integer | — | — e.g. 1 |
games_remaining | integer | — | — e.g. 81 |
home_losses | integer | — | — e.g. 4 |
home_wins | integer | — | — e.g. 1 |
l10_losses | integer | — | — e.g. 4 |
l10_wins | integer | — | — e.g. 6 |
losses | integer | — | — e.g. 1 |
playin_gb | decimal | — | Games back from 10th seed (play-in cutoff) e.g. 0.0000 |
playoff_gb | decimal | — | Games back from 6th seed (auto-qualify cutoff) e.g. 0.0000 |
streak | integer | — | Positive = win streak, negative = loss streak e.g. -1 |
win_pct | decimal | — | — e.g. 0.5000 |
wins | integer | — | — e.g. 2 |
GET/api/v1/nba/team_standings/{id}Get a single team_standing by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_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/nba/team_standings/{pk_value}'Responses
200Single team_standing row.application/jsonshow example ▸
404Row not found.
Response Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 1 | |
away_losses | integer | — | — e.g. 6 |
away_wins | integer | — | — e.g. 1 |
conference_gb | decimal | — | Games back from conference leader e.g. 0.0000 |
conference_rank | integer | — | 1-15 within conference e.g. 8 |
day | integer | — | YYYYMMDD — standings as of this date (before games on this day) e.g. 20241103 |
division_rank | integer | — | 1-5 within division e.g. 1 |
games_played | integer | — | — e.g. 1 |
games_remaining | integer | — | — e.g. 81 |
home_losses | integer | — | — e.g. 4 |
home_wins | integer | — | — e.g. 1 |
l10_losses | integer | — | — e.g. 4 |
l10_wins | integer | — | — e.g. 6 |
losses | integer | — | — e.g. 1 |
playin_gb | decimal | — | Games back from 10th seed (play-in cutoff) e.g. 0.0000 |
playoff_gb | decimal | — | Games back from 6th seed (auto-qualify cutoff) e.g. 0.0000 |
streak | integer | — | Positive = win streak, negative = loss streak e.g. -1 |
win_pct | decimal | — | — e.g. 0.5000 |
wins | integer | — | — e.g. 2 |
game_player_stats
nba.game_player_statsEach NBA player's stat line for each game — points, rebounds, assists, steals, blocks, shooting line, three-point line, free-throw line, plus-minus, and minutes played.
GET/api/v1/nba/game_player_statsList game_player_stats for NBA
Requires one of:
game_id or player_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
player_idquerybigintoptionalFilter to a single player — their full game log, newest first. Combine with game_date ranges to window it.
team_idquerybigintoptionalFilter by team.
game_datequeryintegeroptionalFilter by game day (YYYYMMDD integer, US Eastern). Range syntax: game_date__gte=, game_date__lte=, game_date__between=.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(113 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 122 | |
player_id | bigint | — e.g. 75 | |
team_id | bigint | — e.g. 17 | |
abnormal_exit_clock | integer | — | — e.g. 0 |
abnormal_exit_period | integer | — | — e.g. 0 |
alley_oops | integer | — | — e.g. 0 |
and_ones | integer | — | — e.g. 0 |
assist_percentage | decimalnullable | — | — e.g. 0.0000 |
assist_ratio | decimalnullable | — | — e.g. 0.0000 |
assist_to_turnover | decimalnullable | — | — e.g. 0.0000 |
assists | integer | — | — e.g. 0 |
avg_dribbles_per_touch | decimalnullable | — | — e.g. 0.0000 |
avg_seconds_per_touch | decimalnullable | — | — e.g. 0.0000 |
backcourt_violations | integer | — | — e.g. 0 |
balls_stolen | integernullable | — | — e.g. 0 |
basket_interference_violations | integer | — | — e.g. 0 |
blocks | integer | — | — e.g. 0 |
box_outs | integernullable | — | — e.g. 0 |
carrying_palming_violations | integer | — | — e.g. 0 |
challenges_requested | integer | — | — e.g. 0 |
charges_taken | integernullable | — | — e.g. 0 |
comment | stringnullable | — | — e.g. — (all-null in sample) |
competitive_minutes | decimal | — | — e.g. 0.0 |
contests | integernullable | — | — e.g. 1 |
defensive_rating | decimalnullable | — | — e.g. 100.0000 |
defensive_rebound_percentage | decimalnullable | — | — e.g. 0.0000 |
defensive_rebounds | integer | — | — e.g. 1 |
deflections | integernullable | — | — e.g. 1 |
double_doubles | integer | — | — e.g. 0 |
double_dribble_violations | integer | — | — e.g. 0 |
drives | integernullable | — | — e.g. 0 |
dunks | integer | — | — e.g. 0 |
effective_field_goal_percentage | decimalnullable | — | — e.g. 0.0000 |
ejections | integer | — | — e.g. 0 |
elbow_touches | integernullable | — | — e.g. 0 |
estimated_defensive_rating | decimalnullable | — | — e.g. 100.0000 |
estimated_net_rating | decimalnullable | — | — e.g. 0.0000 |
estimated_offensive_rating | decimalnullable | — | — e.g. 100.0000 |
estimated_pace | decimalnullable | — | — e.g. 84.7100 |
estimated_usage_percentage | decimalnullable | — | — e.g. 0.1670 |
fast_break_pts | integer | — | — e.g. 0 |
field_goal_percentage | decimalnullable | — | — e.g. 0.0000 |
field_goals_attempted | integer | — | — e.g. 5 |
field_goals_made | integer | — | — e.g. 1 |
foul_trouble_severity | integer | — | — e.g. 0 |
fouls | integer | — | Total fouls: personal_fouls + technical_fouls. Use personal_fouls, not this, to judge foul trouble — a player fouls out on 6 PERSONAL fouls and technicals do not count toward that. e.g. 1 |
fouls_drawn | integer | — | — e.g. 0 |
free_throw_percentage | decimalnullable | — | — e.g. 0.0000 |
free_throws_attempted | integer | — | — e.g. 0 |
free_throws_made | integer | — | — e.g. 0 |
front_court_touches | integernullable | — | — e.g. 14 |
game_date | integer | — | — e.g. 20251112 |
garbage_time_minutes | decimal | — | — e.g. 0 |
goaltending_violations | integer | — | — e.g. 0 |
hockey_assists | integernullable | — | — e.g. 0 |
jump_balls_lost | integer | — | — e.g. 0 |
jump_balls_won | integer | — | — e.g. 0 |
lane_violations | integer | — | — e.g. 0 |
layups | integer | — | — e.g. 0 |
loose_balls_recovered | integernullable | — | — e.g. 0 |
minutes | decimal | — | — e.g. 31.7000 |
minutes_deviation_pct | decimal | — | — e.g. 0 |
net_rating | decimalnullable | — | — e.g. 0.0000 |
offensive_fouls | integer | — | Offensive fouls. A SUBSET of personal_fouls, not an addition to it. e.g. 0 |
offensive_rating | decimalnullable | — | — e.g. 100.0000 |
offensive_rebound_percentage | decimalnullable | — | — e.g. 0.0000 |
offensive_rebounds | integer | — | — e.g. 0 |
paint_touches | integernullable | — | — e.g. 0 |
pass_percentage | decimalnullable | — | — e.g. 0.0000 |
passes | integernullable | — | — e.g. 18 |
passes_deflected | integernullable | — | — e.g. 0 |
personal_fouls | integer | — | Personal fouls only — the count a player fouls out on at 6. Includes offensive and flagrant fouls, which the NBA scores as personal fouls. e.g. 1 |
player_impact_estimate | decimal | — | — e.g. 0.0000 |
plus_minus | integer | — | — e.g. 0 |
possessions | integer | — | — e.g. 53 |
post_touches | integernullable | — | — e.g. 0 |
potential_assists | integernullable | — | — e.g. 0 |
pts | integer | — | — e.g. 0 |
pts_per_elbow_touch | decimalnullable | — | — e.g. — (all-null in sample) |
pts_per_paint_touch | decimalnullable | — | — e.g. — (all-null in sample) |
pts_per_post_touch | decimalnullable | — | — e.g. — (all-null in sample) |
pts_per_touch | decimalnullable | — | — e.g. 0.0000 |
put_backs | integer | — | — e.g. 0 |
rebound_percentage | decimalnullable | — | — e.g. 0.0000 |
rebounds | integer | — | — e.g. 2 |
role_anomalous_game | boolean | — | — Values:falsetrue |
role_archetype | stringnullable | — | — Values:deep_benchco_starcore_starterrotationend_of_benchalphasixth_mantwo_way |
role_archetype_confidence | decimal | — | — e.g. 0.6 |
rotation_context | stringnullable | — | — Values:normalgarbage_time_boostambiguous_anomalyblowout_restfoul_troublefoul_outinjury_exitdnp_coach |
rotation_context_confidence | decimal | — | — e.g. 0.5 |
screen_assists | integernullable | — | — e.g. 0 |
second_chance_pts | integer | — | — e.g. 0 |
shot_clock_violations | integer | — | — e.g. 0 |
shot_contested_count | integernullable | — | — e.g. 1 |
shots_blocked | integernullable | — | — e.g. 0 |
start_position | stringnullable | — | — Values:GFC |
steals | integer | — | — e.g. 0 |
substitutions_in | integer | — | — e.g. 0 |
substitutions_out | integer | — | — e.g. 0 |
technical_fouls | integer | — | Technical fouls. The one foul type the NBA keeps OUT of the personal count; 2 means ejection. e.g. 0 |
three_point_percentage | decimalnullable | — | — e.g. 0.0000 |
three_pointers_attempted | integer | — | — e.g. 0 |
three_pointers_made | integer | — | — e.g. 0 |
time_of_possession | decimalnullable | — | — e.g. 0.2000 |
timeouts_called | integer | — | — e.g. 0 |
touches | integernullable | — | — e.g. 28 |
traveling_violations | integer | — | — e.g. 0 |
triple_doubles | integer | — | — e.g. 0 |
true_shooting_percentage | decimalnullable | — | — e.g. 0.0000 |
turnover_ratio | decimalnullable | — | — e.g. 0.0000 |
turnovers | integer | — | — e.g. 0 |
usage_percentage | decimalnullable | — | — e.g. 0.0000 |
GET/api/v1/nba/game_player_stats/{id}Get a single game_player_stat by id
Parameters
idpathbigintrequiredPrimary 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/nba/game_player_stats/{pk_value}'Responses
200Single game_player_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(113 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 122 | |
player_id | bigint | — e.g. 75 | |
team_id | bigint | — e.g. 17 | |
abnormal_exit_clock | integer | — | — e.g. 0 |
abnormal_exit_period | integer | — | — e.g. 0 |
alley_oops | integer | — | — e.g. 0 |
and_ones | integer | — | — e.g. 0 |
assist_percentage | decimalnullable | — | — e.g. 0.0000 |
assist_ratio | decimalnullable | — | — e.g. 0.0000 |
assist_to_turnover | decimalnullable | — | — e.g. 0.0000 |
assists | integer | — | — e.g. 0 |
avg_dribbles_per_touch | decimalnullable | — | — e.g. 0.0000 |
avg_seconds_per_touch | decimalnullable | — | — e.g. 0.0000 |
backcourt_violations | integer | — | — e.g. 0 |
balls_stolen | integernullable | — | — e.g. 0 |
basket_interference_violations | integer | — | — e.g. 0 |
blocks | integer | — | — e.g. 0 |
box_outs | integernullable | — | — e.g. 0 |
carrying_palming_violations | integer | — | — e.g. 0 |
challenges_requested | integer | — | — e.g. 0 |
charges_taken | integernullable | — | — e.g. 0 |
comment | stringnullable | — | — e.g. — (all-null in sample) |
competitive_minutes | decimal | — | — e.g. 0.0 |
contests | integernullable | — | — e.g. 1 |
defensive_rating | decimalnullable | — | — e.g. 100.0000 |
defensive_rebound_percentage | decimalnullable | — | — e.g. 0.0000 |
defensive_rebounds | integer | — | — e.g. 1 |
deflections | integernullable | — | — e.g. 1 |
double_doubles | integer | — | — e.g. 0 |
double_dribble_violations | integer | — | — e.g. 0 |
drives | integernullable | — | — e.g. 0 |
dunks | integer | — | — e.g. 0 |
effective_field_goal_percentage | decimalnullable | — | — e.g. 0.0000 |
ejections | integer | — | — e.g. 0 |
elbow_touches | integernullable | — | — e.g. 0 |
estimated_defensive_rating | decimalnullable | — | — e.g. 100.0000 |
estimated_net_rating | decimalnullable | — | — e.g. 0.0000 |
estimated_offensive_rating | decimalnullable | — | — e.g. 100.0000 |
estimated_pace | decimalnullable | — | — e.g. 84.7100 |
estimated_usage_percentage | decimalnullable | — | — e.g. 0.1670 |
fast_break_pts | integer | — | — e.g. 0 |
field_goal_percentage | decimalnullable | — | — e.g. 0.0000 |
field_goals_attempted | integer | — | — e.g. 5 |
field_goals_made | integer | — | — e.g. 1 |
foul_trouble_severity | integer | — | — e.g. 0 |
fouls | integer | — | Total fouls: personal_fouls + technical_fouls. Use personal_fouls, not this, to judge foul trouble — a player fouls out on 6 PERSONAL fouls and technicals do not count toward that. e.g. 1 |
fouls_drawn | integer | — | — e.g. 0 |
free_throw_percentage | decimalnullable | — | — e.g. 0.0000 |
free_throws_attempted | integer | — | — e.g. 0 |
free_throws_made | integer | — | — e.g. 0 |
front_court_touches | integernullable | — | — e.g. 14 |
game_date | integer | — | — e.g. 20251112 |
garbage_time_minutes | decimal | — | — e.g. 0 |
goaltending_violations | integer | — | — e.g. 0 |
hockey_assists | integernullable | — | — e.g. 0 |
jump_balls_lost | integer | — | — e.g. 0 |
jump_balls_won | integer | — | — e.g. 0 |
lane_violations | integer | — | — e.g. 0 |
layups | integer | — | — e.g. 0 |
loose_balls_recovered | integernullable | — | — e.g. 0 |
minutes | decimal | — | — e.g. 31.7000 |
minutes_deviation_pct | decimal | — | — e.g. 0 |
net_rating | decimalnullable | — | — e.g. 0.0000 |
offensive_fouls | integer | — | Offensive fouls. A SUBSET of personal_fouls, not an addition to it. e.g. 0 |
offensive_rating | decimalnullable | — | — e.g. 100.0000 |
offensive_rebound_percentage | decimalnullable | — | — e.g. 0.0000 |
offensive_rebounds | integer | — | — e.g. 0 |
paint_touches | integernullable | — | — e.g. 0 |
pass_percentage | decimalnullable | — | — e.g. 0.0000 |
passes | integernullable | — | — e.g. 18 |
passes_deflected | integernullable | — | — e.g. 0 |
personal_fouls | integer | — | Personal fouls only — the count a player fouls out on at 6. Includes offensive and flagrant fouls, which the NBA scores as personal fouls. e.g. 1 |
player_impact_estimate | decimal | — | — e.g. 0.0000 |
plus_minus | integer | — | — e.g. 0 |
possessions | integer | — | — e.g. 53 |
post_touches | integernullable | — | — e.g. 0 |
potential_assists | integernullable | — | — e.g. 0 |
pts | integer | — | — e.g. 0 |
pts_per_elbow_touch | decimalnullable | — | — e.g. — (all-null in sample) |
pts_per_paint_touch | decimalnullable | — | — e.g. — (all-null in sample) |
pts_per_post_touch | decimalnullable | — | — e.g. — (all-null in sample) |
pts_per_touch | decimalnullable | — | — e.g. 0.0000 |
put_backs | integer | — | — e.g. 0 |
rebound_percentage | decimalnullable | — | — e.g. 0.0000 |
rebounds | integer | — | — e.g. 2 |
role_anomalous_game | boolean | — | — Values:falsetrue |
role_archetype | stringnullable | — | — Values:deep_benchco_starcore_starterrotationend_of_benchalphasixth_mantwo_way |
role_archetype_confidence | decimal | — | — e.g. 0.6 |
rotation_context | stringnullable | — | — Values:normalgarbage_time_boostambiguous_anomalyblowout_restfoul_troublefoul_outinjury_exitdnp_coach |
rotation_context_confidence | decimal | — | — e.g. 0.5 |
screen_assists | integernullable | — | — e.g. 0 |
second_chance_pts | integer | — | — e.g. 0 |
shot_clock_violations | integer | — | — e.g. 0 |
shot_contested_count | integernullable | — | — e.g. 1 |
shots_blocked | integernullable | — | — e.g. 0 |
start_position | stringnullable | — | — Values:GFC |
steals | integer | — | — e.g. 0 |
substitutions_in | integer | — | — e.g. 0 |
substitutions_out | integer | — | — e.g. 0 |
technical_fouls | integer | — | Technical fouls. The one foul type the NBA keeps OUT of the personal count; 2 means ejection. e.g. 0 |
three_point_percentage | decimalnullable | — | — e.g. 0.0000 |
three_pointers_attempted | integer | — | — e.g. 0 |
three_pointers_made | integer | — | — e.g. 0 |
time_of_possession | decimalnullable | — | — e.g. 0.2000 |
timeouts_called | integer | — | — e.g. 0 |
touches | integernullable | — | — e.g. 28 |
traveling_violations | integer | — | — e.g. 0 |
triple_doubles | integer | — | — e.g. 0 |
true_shooting_percentage | decimalnullable | — | — e.g. 0.0000 |
turnover_ratio | decimalnullable | — | — e.g. 0.0000 |
turnovers | integer | — | — e.g. 0 |
usage_percentage | decimalnullable | — | — e.g. 0.0000 |
game_team_stats
nba.game_team_statsEach NBA team's stat line for each game — the same offensive, defensive, rebounding, and shooting counters as the season aggregate, broken out per game with home/away context.
GET/api/v1/nba/game_team_statsList game_team_stats for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(70 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 6 | |
team_id | bigint | — e.g. 12 | |
assist_percentage | decimal | — | — e.g. 0.6670 |
assist_ratio | decimal | — | — e.g. 0.0000 |
assists | integer | — | — e.g. 24 |
assists_to_turnovers | decimal | — | — e.g. 2.0000 |
bench_pts | integer | — | — e.g. 34 |
blocks | integer | — | — e.g. 4 |
conference_rank | integer | — | Conference rank entering game e.g. 0 |
defensive_rating | decimal | — | — e.g. 100.0000 |
defensive_rebound_percentage | decimal | — | — e.g. 0.6670 |
defensive_rebounds | integer | — | — e.g. 32 |
effective_field_goal_percentage | decimal | — | — e.g. 0.5000 |
estimated_defensive_rating | decimal | — | — e.g. 0.0000 |
estimated_net_rating | decimal | — | — e.g. 0.0000 |
estimated_offensive_rating | decimal | — | — e.g. 0.0000 |
estimated_pace | decimal | — | — e.g. 0.0000 |
fast_break_pts | integer | — | — e.g. 11 |
field_goal_percentage | decimal | — | — e.g. 0.5000 |
field_goals_attempted | integer | — | — e.g. 88 |
field_goals_made | integer | — | — e.g. 42 |
fouls | integer | — | — e.g. 19 |
free_throw_attempt_rate | decimal | — | — e.g. 0.2500 |
free_throw_percentage | decimal | — | — e.g. 0.7500 |
free_throws_attempted | integer | — | — e.g. 21 |
free_throws_made | integer | — | — e.g. 17 |
loss | integer | — | — e.g. 0 |
losses | integer | — | Cumulative losses e.g. 0 |
minutes | integer | — | — e.g. 48 |
net_rating | decimal | — | — e.g. 2.0000 |
offensive_rating | decimal | — | — e.g. 100.0000 |
offensive_rebound_percentage | decimal | — | — e.g. 0.3330 |
offensive_rebounds | integer | — | — e.g. 10 |
pace | decimal | — | — e.g. 101.0000 |
pace_per40 | decimal | — | — e.g. 0.0000 |
pct_ast_2pm | decimal | — | — e.g. 0.5000 |
pct_ast_3pm | decimal | — | — e.g. 1.0000 |
pct_ast_fgm | decimal | — | — e.g. 0.6670 |
pct_fga_2pt | decimal | — | — e.g. 0.0000 |
pct_fga_3pt | decimal | — | — e.g. 0.0000 |
pct_pts_2pt | decimal | — | — e.g. 0.5000 |
pct_pts_2pt_mr | decimal | — | — e.g. 0.0000 |
pct_pts_3pt | decimal | — | — e.g. 0.0000 |
pct_pts_fb | decimal | — | — e.g. 0.0000 |
pct_pts_ft | decimal | — | — e.g. 0.0000 |
pct_pts_off_tov | decimal | — | — e.g. 0.0000 |
pct_pts_paint | decimal | — | — e.g. 0.0000 |
pct_uast_2pm | decimal | — | — e.g. 0.5000 |
pct_uast_3pm | decimal | — | — e.g. 0.0000 |
pct_uast_fgm | decimal | — | — e.g. 0.3330 |
player_impact_estimate | decimal | — | — e.g. 0.0000 |
possessions | integer | — | — e.g. 101 |
pts | integer | — | — e.g. 113 |
pts_in_paint | integer | — | — e.g. 50 |
pts_off_turnovers | integer | — | — e.g. 17 |
rebound_percentage | decimal | — | — e.g. 0.5000 |
rebounds | integer | — | — e.g. 42 |
second_chance_pts | integer | — | — e.g. 14 |
steals | integer | — | — e.g. 7 |
steals_to_turnovers | decimal | — | — e.g. 0.5000 |
three_point_percentage | decimal | — | — e.g. 0.3330 |
three_pointers_attempted | integer | — | — e.g. 34 |
three_pointers_made | integer | — | — e.g. 12 |
timeouts_remaining | integer | — | — e.g. 0 |
true_shooting_percentage | decimal | — | — e.g. 0.5760 |
turnover_percentage | decimal | — | — e.g. 0.0000 |
turnovers | integer | — | — e.g. 13 |
win | integer | — | — e.g. 0 |
wins | integer | — | Cumulative wins e.g. 0 |
GET/api/v1/nba/game_team_stats/{id}Get a single game_team_stat by id
Parameters
idpathbigintrequiredPrimary 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/nba/game_team_stats/{pk_value}'Responses
200Single game_team_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(70 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 6 | |
team_id | bigint | — e.g. 12 | |
assist_percentage | decimal | — | — e.g. 0.6670 |
assist_ratio | decimal | — | — e.g. 0.0000 |
assists | integer | — | — e.g. 24 |
assists_to_turnovers | decimal | — | — e.g. 2.0000 |
bench_pts | integer | — | — e.g. 34 |
blocks | integer | — | — e.g. 4 |
conference_rank | integer | — | Conference rank entering game e.g. 0 |
defensive_rating | decimal | — | — e.g. 100.0000 |
defensive_rebound_percentage | decimal | — | — e.g. 0.6670 |
defensive_rebounds | integer | — | — e.g. 32 |
effective_field_goal_percentage | decimal | — | — e.g. 0.5000 |
estimated_defensive_rating | decimal | — | — e.g. 0.0000 |
estimated_net_rating | decimal | — | — e.g. 0.0000 |
estimated_offensive_rating | decimal | — | — e.g. 0.0000 |
estimated_pace | decimal | — | — e.g. 0.0000 |
fast_break_pts | integer | — | — e.g. 11 |
field_goal_percentage | decimal | — | — e.g. 0.5000 |
field_goals_attempted | integer | — | — e.g. 88 |
field_goals_made | integer | — | — e.g. 42 |
fouls | integer | — | — e.g. 19 |
free_throw_attempt_rate | decimal | — | — e.g. 0.2500 |
free_throw_percentage | decimal | — | — e.g. 0.7500 |
free_throws_attempted | integer | — | — e.g. 21 |
free_throws_made | integer | — | — e.g. 17 |
loss | integer | — | — e.g. 0 |
losses | integer | — | Cumulative losses e.g. 0 |
minutes | integer | — | — e.g. 48 |
net_rating | decimal | — | — e.g. 2.0000 |
offensive_rating | decimal | — | — e.g. 100.0000 |
offensive_rebound_percentage | decimal | — | — e.g. 0.3330 |
offensive_rebounds | integer | — | — e.g. 10 |
pace | decimal | — | — e.g. 101.0000 |
pace_per40 | decimal | — | — e.g. 0.0000 |
pct_ast_2pm | decimal | — | — e.g. 0.5000 |
pct_ast_3pm | decimal | — | — e.g. 1.0000 |
pct_ast_fgm | decimal | — | — e.g. 0.6670 |
pct_fga_2pt | decimal | — | — e.g. 0.0000 |
pct_fga_3pt | decimal | — | — e.g. 0.0000 |
pct_pts_2pt | decimal | — | — e.g. 0.5000 |
pct_pts_2pt_mr | decimal | — | — e.g. 0.0000 |
pct_pts_3pt | decimal | — | — e.g. 0.0000 |
pct_pts_fb | decimal | — | — e.g. 0.0000 |
pct_pts_ft | decimal | — | — e.g. 0.0000 |
pct_pts_off_tov | decimal | — | — e.g. 0.0000 |
pct_pts_paint | decimal | — | — e.g. 0.0000 |
pct_uast_2pm | decimal | — | — e.g. 0.5000 |
pct_uast_3pm | decimal | — | — e.g. 0.0000 |
pct_uast_fgm | decimal | — | — e.g. 0.3330 |
player_impact_estimate | decimal | — | — e.g. 0.0000 |
possessions | integer | — | — e.g. 101 |
pts | integer | — | — e.g. 113 |
pts_in_paint | integer | — | — e.g. 50 |
pts_off_turnovers | integer | — | — e.g. 17 |
rebound_percentage | decimal | — | — e.g. 0.5000 |
rebounds | integer | — | — e.g. 42 |
second_chance_pts | integer | — | — e.g. 14 |
steals | integer | — | — e.g. 7 |
steals_to_turnovers | decimal | — | — e.g. 0.5000 |
three_point_percentage | decimal | — | — e.g. 0.3330 |
three_pointers_attempted | integer | — | — e.g. 34 |
three_pointers_made | integer | — | — e.g. 12 |
timeouts_remaining | integer | — | — e.g. 0 |
true_shooting_percentage | decimal | — | — e.g. 0.5760 |
turnover_percentage | decimal | — | — e.g. 0.0000 |
turnovers | integer | — | — e.g. 13 |
win | integer | — | — e.g. 0 |
wins | integer | — | Cumulative wins e.g. 0 |
season_player_stats
nba.season_player_statsSeason totals for each NBA player — scoring, rebounding, assists, steals, blocks, shooting splits, advanced metrics, plus-minus, and minutes played. Regular-season games only; playoff, play-in, and preseason totals are not included. Players traded mid-season have one merged row (no per-team split).
GET/api/v1/nba/season_player_statsList season_player_stats for NBA
Requires one of:
season_id or player_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a single season. Defaults to the current season.
player_idquerybigintoptionalFilter to a single player.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(49 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1 | |
season_id | bigint | — e.g. 2021 | |
assist_percentage | decimal | — | — e.g. 0.0000 |
assist_ratio | decimal | — | — e.g. 0.0000 |
assist_to_turnover | decimal | — | — e.g. 0.0000 |
assists | integer | — | — e.g. 0 |
avg_dribbles_per_touch | decimal | — | — e.g. 1.0000 |
avg_seconds_per_touch | decimal | — | — e.g. 1.6400 |
blocks | integer | — | — e.g. 0 |
defensive_rating | decimal | — | — e.g. 111.1000 |
defensive_rebound_percentage | decimal | — | — e.g. 0.0000 |
defensive_rebounds | integer | — | — e.g. 0 |
double_doubles | integer | — | — e.g. 0 |
effective_field_goal_percentage | decimal | — | — e.g. 0.5000 |
field_goal_percentage | decimal | — | — e.g. 0.5000 |
field_goals_attempted | integer | — | — e.g. 6 |
field_goals_made | integer | — | — e.g. 0 |
fouls | integer | — | — e.g. 0 |
free_throw_percentage | decimal | — | — e.g. 0.0000 |
free_throws_attempted | integer | — | — e.g. 0 |
free_throws_made | integer | — | — e.g. 0 |
front_court_touches | integer | — | — e.g. 24 |
games_played | integer | — | — e.g. 68 |
losses | integer | — | — e.g. 1 |
minutes | decimal | — | — e.g. 1297.0367 |
net_rating | decimal | — | — e.g. 0.3000 |
offensive_rating | decimal | — | — e.g. 113.9000 |
offensive_rebound_percentage | decimal | — | — e.g. 0.0000 |
offensive_rebounds | integer | — | — e.g. 0 |
pace | decimal | — | — e.g. 100.6900 |
player_impact_estimate | decimal | — | — e.g. 0.0730 |
plus_minus | integer | — | — e.g. -7 |
possessions | integer | — | — e.g. 41 |
pts | integer | — | — e.g. 0 |
rebound_percentage | decimal | — | — e.g. 0.0620 |
rebounds | integer | — | — e.g. 0 |
steals | integer | — | — e.g. 0 |
three_point_percentage | decimal | — | — e.g. 0.0000 |
three_pointers_attempted | integer | — | — e.g. 0 |
three_pointers_made | integer | — | — e.g. 0 |
time_of_possession | decimal | — | — e.g. 0.8000 |
touches | integer | — | — e.g. 160 |
triple_doubles | integer | — | — e.g. 0 |
true_shooting_percentage | decimal | — | — e.g. 0.0000 |
turnover_percentage | decimal | — | — e.g. 0.0000 |
turnovers | integer | — | — e.g. 0 |
usage_percentage | decimal | — | — e.g. 0.1360 |
wins | integer | — | — e.g. 1 |
GET/api/v1/nba/season_player_stats/{id}Get a single season_player_stat by id
Parameters
idpathbigintrequiredPrimary 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/nba/season_player_stats/{pk_value}'Responses
200Single season_player_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(49 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1 | |
season_id | bigint | — e.g. 2021 | |
assist_percentage | decimal | — | — e.g. 0.0000 |
assist_ratio | decimal | — | — e.g. 0.0000 |
assist_to_turnover | decimal | — | — e.g. 0.0000 |
assists | integer | — | — e.g. 0 |
avg_dribbles_per_touch | decimal | — | — e.g. 1.0000 |
avg_seconds_per_touch | decimal | — | — e.g. 1.6400 |
blocks | integer | — | — e.g. 0 |
defensive_rating | decimal | — | — e.g. 111.1000 |
defensive_rebound_percentage | decimal | — | — e.g. 0.0000 |
defensive_rebounds | integer | — | — e.g. 0 |
double_doubles | integer | — | — e.g. 0 |
effective_field_goal_percentage | decimal | — | — e.g. 0.5000 |
field_goal_percentage | decimal | — | — e.g. 0.5000 |
field_goals_attempted | integer | — | — e.g. 6 |
field_goals_made | integer | — | — e.g. 0 |
fouls | integer | — | — e.g. 0 |
free_throw_percentage | decimal | — | — e.g. 0.0000 |
free_throws_attempted | integer | — | — e.g. 0 |
free_throws_made | integer | — | — e.g. 0 |
front_court_touches | integer | — | — e.g. 24 |
games_played | integer | — | — e.g. 68 |
losses | integer | — | — e.g. 1 |
minutes | decimal | — | — e.g. 1297.0367 |
net_rating | decimal | — | — e.g. 0.3000 |
offensive_rating | decimal | — | — e.g. 113.9000 |
offensive_rebound_percentage | decimal | — | — e.g. 0.0000 |
offensive_rebounds | integer | — | — e.g. 0 |
pace | decimal | — | — e.g. 100.6900 |
player_impact_estimate | decimal | — | — e.g. 0.0730 |
plus_minus | integer | — | — e.g. -7 |
possessions | integer | — | — e.g. 41 |
pts | integer | — | — e.g. 0 |
rebound_percentage | decimal | — | — e.g. 0.0620 |
rebounds | integer | — | — e.g. 0 |
steals | integer | — | — e.g. 0 |
three_point_percentage | decimal | — | — e.g. 0.0000 |
three_pointers_attempted | integer | — | — e.g. 0 |
three_pointers_made | integer | — | — e.g. 0 |
time_of_possession | decimal | — | — e.g. 0.8000 |
touches | integer | — | — e.g. 160 |
triple_doubles | integer | — | — e.g. 0 |
true_shooting_percentage | decimal | — | — e.g. 0.0000 |
turnover_percentage | decimal | — | — e.g. 0.0000 |
turnovers | integer | — | — e.g. 0 |
usage_percentage | decimal | — | — e.g. 0.1360 |
wins | integer | — | — e.g. 1 |
Odds
game_lines
nba.game_linesNBA game betting lines — point spreads, moneylines, and over/under totals from sportsbooks, captured over time as the lines move from opening to closing.
GET/api/v1/nba/game_linesList game_lines for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
season_idquerybigintoptionalFilter by season.
operator_idquerybigintoptionalFilter by sportsbook id: 6 Consensus (full history), 1 DraftKings, 2 FanDuel, 1683 Pinnacle, 1684 BetMGM, 1685 Caesars, 1686 BetRivers, 1687 ESPN BET (per-book rows begin 2026-05).
is_openingquerybooleanoptionalFilter to opening lines only. Reliable from the 2025-26 season; earlier seasons largely lack opener flags.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_lines?game_id=1'Responses
200game_lines rows matching the declared filter set, wrapped in { game_lines, 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/jsonResponse Schema(30 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 16082 | |
operator_id | bigint | Sportsbook id: 6 Consensus (full history); per-book ids (1 DraftKings, 2 FanDuel, 1683 Pinnacle, 1684 BetMGM, 1685 Caesars, 1686 BetRivers, 1687 ESPN BET) begin 2026-05. e.g. 6 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2021 | |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2022-04-10T00:00:00.000Z |
implied_away_score | decimalnullable | — | — e.g. 109.0000 |
implied_away_win_pct | decimalnullable | — | — e.g. 0.4082 |
implied_home_score | decimalnullable | — | Calculated from spread + total e.g. 109.7500 |
implied_home_win_pct | decimalnullable | — | From moneyline, 0-1 e.g. 0.6296 |
is_opening | boolean | — | True if this is the opening line Values:falsetrue |
moneyline_away | integernullable | — | American odds for away team win e.g. 145 |
moneyline_bet_pct_away | integernullable | — | — e.g. — (all-null in sample) |
moneyline_bet_pct_home | integernullable | — | — e.g. — (all-null in sample) |
moneyline_home | integernullable | — | American odds for home team win e.g. -170 |
moneyline_money_pct_away | integernullable | — | — e.g. — (all-null in sample) |
moneyline_money_pct_home | integernullable | — | — e.g. — (all-null in sample) |
over_odds | integernullable | — | American odds for over e.g. 0 |
spread | decimalnullable | — | Home team spread (e.g., -3.5 means home favored by 3.5) e.g. -2.5000 |
spread_away_odds | integernullable | — | American odds for away spread e.g. -110 |
spread_bet_pct_away | integernullable | — | — e.g. — (all-null in sample) |
spread_bet_pct_home | integernullable | — | — e.g. — (all-null in sample) |
spread_home_odds | integernullable | — | American odds for home spread (e.g., -110) e.g. -110 |
spread_money_pct_away | integernullable | — | — e.g. — (all-null in sample) |
spread_money_pct_home | integernullable | — | — e.g. — (all-null in sample) |
total | decimalnullable | — | Combined score total line (e.g., 224.5) e.g. 225.5000 |
total_bet_pct_over | integernullable | — | — e.g. — (all-null in sample) |
total_bet_pct_under | integernullable | — | — e.g. — (all-null in sample) |
total_money_pct_over | integernullable | — | — e.g. — (all-null in sample) |
total_money_pct_under | integernullable | — | — e.g. — (all-null in sample) |
under_odds | integernullable | — | American odds for under e.g. 0 |
GET/api/v1/nba/game_lines/{id}Get a single game_line by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_line 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/nba/game_lines/{pk_value}'Responses
200Single game_line row.application/jsonshow example ▸
404Row not found.
Response Schema(30 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 16082 | |
operator_id | bigint | Sportsbook id: 6 Consensus (full history); per-book ids (1 DraftKings, 2 FanDuel, 1683 Pinnacle, 1684 BetMGM, 1685 Caesars, 1686 BetRivers, 1687 ESPN BET) begin 2026-05. e.g. 6 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2021 | |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2022-04-10T00:00:00.000Z |
implied_away_score | decimalnullable | — | — e.g. 109.0000 |
implied_away_win_pct | decimalnullable | — | — e.g. 0.4082 |
implied_home_score | decimalnullable | — | Calculated from spread + total e.g. 109.7500 |
implied_home_win_pct | decimalnullable | — | From moneyline, 0-1 e.g. 0.6296 |
is_opening | boolean | — | True if this is the opening line Values:falsetrue |
moneyline_away | integernullable | — | American odds for away team win e.g. 145 |
moneyline_bet_pct_away | integernullable | — | — e.g. — (all-null in sample) |
moneyline_bet_pct_home | integernullable | — | — e.g. — (all-null in sample) |
moneyline_home | integernullable | — | American odds for home team win e.g. -170 |
moneyline_money_pct_away | integernullable | — | — e.g. — (all-null in sample) |
moneyline_money_pct_home | integernullable | — | — e.g. — (all-null in sample) |
over_odds | integernullable | — | American odds for over e.g. 0 |
spread | decimalnullable | — | Home team spread (e.g., -3.5 means home favored by 3.5) e.g. -2.5000 |
spread_away_odds | integernullable | — | American odds for away spread e.g. -110 |
spread_bet_pct_away | integernullable | — | — e.g. — (all-null in sample) |
spread_bet_pct_home | integernullable | — | — e.g. — (all-null in sample) |
spread_home_odds | integernullable | — | American odds for home spread (e.g., -110) e.g. -110 |
spread_money_pct_away | integernullable | — | — e.g. — (all-null in sample) |
spread_money_pct_home | integernullable | — | — e.g. — (all-null in sample) |
total | decimalnullable | — | Combined score total line (e.g., 224.5) e.g. 225.5000 |
total_bet_pct_over | integernullable | — | — e.g. — (all-null in sample) |
total_bet_pct_under | integernullable | — | — e.g. — (all-null in sample) |
total_money_pct_over | integernullable | — | — e.g. — (all-null in sample) |
total_money_pct_under | integernullable | — | — e.g. — (all-null in sample) |
under_odds | integernullable | — | American odds for under e.g. 0 |
game_period_lines
nba.game_period_linesPeriod-specific NBA betting lines — first-half, second-half, and individual-quarter spreads, moneylines, and totals offered alongside the full-game markets.
GET/api/v1/nba/game_period_linesList game_period_lines for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
season_idquerybigintoptionalFilter by season.
operator_idquerybigintoptionalFilter by sportsbook.
period_codequerystringoptionalFilter by period (1H, 2H, Q1, Q2, Q3, Q4).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_period_lines?game_id=1'Responses
200game_period_lines rows matching the declared filter set, wrapped in { game_period_lines, 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/jsonResponse Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 769 | |
operator_id | bigint | Data source (consensus, DraftKings, FanDuel, etc.) e.g. 6 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2025 | |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2024-01-05T05:00:00.000Z |
implied_away_win_pct | decimalnullable | — | — e.g. 0.5121951219512195 |
implied_home_win_pct | decimalnullable | — | From moneyline, 0-1 e.g. 0.5121951219512195 |
is_opening | boolean | — | True if this is the first captured line for this period e.g. false |
moneyline_away | integernullable | — | American odds for away team win in this period e.g. -105 |
moneyline_home | integernullable | — | American odds for home team win in this period e.g. -105 |
over_odds | integernullable | — | American odds for over e.g. -110 |
period_code | string | — | Market period code (1H, 2H, Q1, Q2, Q3, Q4) Values:1HQ1Q3Q4Q22H |
spread | decimalnullable | — | Home team spread for this period e.g. -0.5 |
spread_away_odds | integernullable | — | American odds for away spread e.g. -110 |
spread_home_odds | integernullable | — | American odds for home spread (e.g., -110) e.g. -110 |
total | decimalnullable | — | Combined score total line for this period e.g. 57.5 |
under_odds | integernullable | — | American odds for under e.g. -110 |
GET/api/v1/nba/game_period_lines/{id}Get a single game_period_line by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_period_line 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/nba/game_period_lines/{pk_value}'Responses
200Single game_period_line row.application/jsonshow example ▸
404Row not found.
Response Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 769 | |
operator_id | bigint | Data source (consensus, DraftKings, FanDuel, etc.) e.g. 6 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2025 | |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2024-01-05T05:00:00.000Z |
implied_away_win_pct | decimalnullable | — | — e.g. 0.5121951219512195 |
implied_home_win_pct | decimalnullable | — | From moneyline, 0-1 e.g. 0.5121951219512195 |
is_opening | boolean | — | True if this is the first captured line for this period e.g. false |
moneyline_away | integernullable | — | American odds for away team win in this period e.g. -105 |
moneyline_home | integernullable | — | American odds for home team win in this period e.g. -105 |
over_odds | integernullable | — | American odds for over e.g. -110 |
period_code | string | — | Market period code (1H, 2H, Q1, Q2, Q3, Q4) Values:1HQ1Q3Q4Q22H |
spread | decimalnullable | — | Home team spread for this period e.g. -0.5 |
spread_away_odds | integernullable | — | American odds for away spread e.g. -110 |
spread_home_odds | integernullable | — | American odds for home spread (e.g., -110) e.g. -110 |
total | decimalnullable | — | Combined score total line for this period e.g. 57.5 |
under_odds | integernullable | — | American odds for under e.g. -110 |
game_player_props
nba.game_player_propsNBA player prop bets for each game — points, rebounds, assists, threes made, steals, blocks, and other player-statistic markets offered by sportsbooks.
GET/api/v1/nba/game_player_propsList game_player_props for NBA
Requires one of:
game_id or player_id + season_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
player_idquerybigintoptionalFilter to a single player. With season_id: the player's prop history across a season.
season_idquerybigintoptionalFilter by season.
operator_idquerybigintoptionalFilter by sportsbook. Historical rows are operator 6 (Consensus); per-book rows (1 DraftKings, 2 FanDuel, 1683 Pinnacle, 1684 BetMGM, 1685 Caesars, 1686 BetRivers, 1687 ESPN BET) begin 2026-05.
categoryquerystringoptionalFilter by prop category (points, rebounds, assists, pra, etc.). Values: assists, blocks, double_double, points, pts_assists, pts_rebounds, pts_rebounds_assists, rebounds, rebounds_assists, steals, steals_blocks, three_pointers_made, triple_double, turnovers.
market_keyquerystringoptionalFilter by raw market key (e.g., player_points). Values: player_assists, player_blocks, player_blocks_steals, player_double_double, player_points, player_points_assists, player_points_rebounds, player_points_rebounds_assists, player_rebounds, player_rebounds_assists, player_steals, player_threes, player_triple_double, player_turnovers.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_player_props?game_id=1'Responses
200game_player_props rows matching the declared filter set, wrapped in { game_player_props, 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/jsonResponse Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 126 | |
operator_id | bigint | Usually consensus e.g. 6 | |
player_id | bigint | — e.g. 157 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2025 | |
book_count | integer | — | Number of curated books contributing to this consensus value e.g. 3 |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2025-10-22T04:00:00.000Z |
category | string | — | Canonical category (points, rebounds, assists, pra, etc.) Values:pointsreboundsthree_pointers_madepts_reboundsdouble_doubleassistspts_rebounds_assistsrebounds_assistspts_assiststriple_doubleblockssteals |
is_opening | boolean | — | True if this is the first captured line for this player/market e.g. false |
line | decimalnullable | — | Prop line for over/under markets (e.g., 24.5) e.g. 1.5 |
market_key | string | — | Raw market key from source API (e.g., player_points) Values:player_pointsplayer_reboundsplayer_threesplayer_points_reboundsplayer_double_doubleplayer_assistsplayer_points_rebounds_…player_rebounds_assistsplayer_points_assistsplayer_triple_doubleplayer_blocksplayer_steals |
no_odds | integernullable | — | American odds for no e.g. -10000 |
outcome_type | string | — | ou | yes_no Values:ouyes_no |
over_odds | integernullable | — | American odds for over e.g. -120 |
period_code | stringnullable | — | Optional period code (Q1, 1H) e.g. — (all-null in sample) |
subcategory | stringnullable | — | Optional subtype (alternate, boosted, etc.) e.g. — (all-null in sample) |
under_odds | integernullable | — | American odds for under e.g. -110 |
yes_odds | integernullable | — | American odds for yes e.g. 1100 |
GET/api/v1/nba/game_player_props/{id}Get a single game_player_prop by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_player_prop 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/nba/game_player_props/{pk_value}'Responses
200Single game_player_prop row.application/jsonshow example ▸
404Row not found.
Response Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 126 | |
operator_id | bigint | Usually consensus e.g. 6 | |
player_id | bigint | — e.g. 157 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2025 | |
book_count | integer | — | Number of curated books contributing to this consensus value e.g. 3 |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2025-10-22T04:00:00.000Z |
category | string | — | Canonical category (points, rebounds, assists, pra, etc.) Values:pointsreboundsthree_pointers_madepts_reboundsdouble_doubleassistspts_rebounds_assistsrebounds_assistspts_assiststriple_doubleblockssteals |
is_opening | boolean | — | True if this is the first captured line for this player/market e.g. false |
line | decimalnullable | — | Prop line for over/under markets (e.g., 24.5) e.g. 1.5 |
market_key | string | — | Raw market key from source API (e.g., player_points) Values:player_pointsplayer_reboundsplayer_threesplayer_points_reboundsplayer_double_doubleplayer_assistsplayer_points_rebounds_…player_rebounds_assistsplayer_points_assistsplayer_triple_doubleplayer_blocksplayer_steals |
no_odds | integernullable | — | American odds for no e.g. -10000 |
outcome_type | string | — | ou | yes_no Values:ouyes_no |
over_odds | integernullable | — | American odds for over e.g. -120 |
period_code | stringnullable | — | Optional period code (Q1, 1H) e.g. — (all-null in sample) |
subcategory | stringnullable | — | Optional subtype (alternate, boosted, etc.) e.g. — (all-null in sample) |
under_odds | integernullable | — | American odds for under e.g. -110 |
yes_odds | integernullable | — | American odds for yes e.g. 1100 |
Lineups & Roster
coaching_staffs
nba.coaching_staffsNBA coaches and staff — head coaches, lead assistants, player-development coaches, and other basketball-operations staff who appear on team benches.
GET/api/v1/nba/coaching_staffsList coaching_staffs for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/coaching_staffs?limit=3'Responses
200coaching_staffs rows matching the declared filter set, wrapped in { coaching_staffs, 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/jsonResponse Schema(5 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
coach_id | integer | — | Official NBA coach/staff ID from stats.nba.com e.g. 57 |
first_name | string | — | — e.g. Mike |
last_name | string | — | — e.g. Jones |
name | string | — | — e.g. Stacey Augmon |
GET/api/v1/nba/coaching_staffs/{id}Get a single coaching_staff by id
Parameters
idpathbigintrequiredPrimary key (id) of the coaching_staff 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/nba/coaching_staffs/{pk_value}'Responses
200Single coaching_staff row.application/jsonshow example ▸
404Row not found.
Response Schema(5 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
coach_id | integer | — | Official NBA coach/staff ID from stats.nba.com e.g. 57 |
first_name | string | — | — e.g. Mike |
last_name | string | — | — e.g. Jones |
name | string | — | — e.g. Stacey Augmon |
team_coaching_staffs
nba.team_coaching_staffsThe coaching staff each NBA team carries through the season — head coach, assistants, trainers — with the dates each staff member started and ended their tenure.
GET/api/v1/nba/team_coaching_staffsList team_coaching_staffs for NBA
Requires one of:
team_id — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter by team.
season_idquerybigintoptionalFilter to a season.
coach_typequerystringoptionalFilter by coach role (Head Coach, Assistant Coach, Trainer). Values: Assistant Coach, Assistant Coach for Player Development, Assistant Trainer, Associate Head Coach, Director of Athletic Development, Head Coach, Interim Head Coach, Lead Assistant Coach, Strength and Conditioning Coach, Trainer.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/team_coaching_staffs?team_id=1'Responses
200team_coaching_staffs rows matching the declared filter set, wrapped in { team_coaching_staffs, 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/jsonResponse Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
coaching_staff_id | bigint | — e.g. 395 | |
season_id | bigint | First season of this tenure e.g. 2025 | |
team_id | bigint | — e.g. 25 | |
coach_type | string | — | Head Coach, Assistant Coach, Trainer Values:Assistant CoachTrainerHead CoachAssistant Coach for Pla…Associate Head CoachAssistant TrainerStrength and Conditioni…Lead Assistant CoachDirector of Athletic De…Interim Head Coach |
end_date | datenullable | — | Tenure end date. NULL = still active. e.g. 2021-10-18 |
is_assistant | boolean | — | — Values:truefalse |
sort_sequence | integernullable | — | — e.g. 4 |
start_date | date | — | Tenure start date (derived from season start) e.g. 2025-10-21 |
GET/api/v1/nba/team_coaching_staffs/{id}Get a single team_coaching_staff by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_coaching_staff 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/nba/team_coaching_staffs/{pk_value}'Responses
200Single team_coaching_staff row.application/jsonshow example ▸
404Row not found.
Response Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
coaching_staff_id | bigint | — e.g. 395 | |
season_id | bigint | First season of this tenure e.g. 2025 | |
team_id | bigint | — e.g. 25 | |
coach_type | string | — | Head Coach, Assistant Coach, Trainer Values:Assistant CoachTrainerHead CoachAssistant Coach for Pla…Associate Head CoachAssistant TrainerStrength and Conditioni…Lead Assistant CoachDirector of Athletic De…Interim Head Coach |
end_date | datenullable | — | Tenure end date. NULL = still active. e.g. 2021-10-18 |
is_assistant | boolean | — | — Values:truefalse |
sort_sequence | integernullable | — | — e.g. 4 |
start_date | date | — | Tenure start date (derived from season start) e.g. 2025-10-21 |
game_team_lineup_stints
nba.game_team_lineup_stintsEach continuous stretch an NBA team had the same five players on the floor (regular season, play-in, IST, and playoffs — no preseason) — the five-man unit, when it started and ended, and the team's net production while it was in.
GET/api/v1/nba/game_team_lineup_stintsList game_team_lineup_stints for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_team_lineup_stints?game_id=1'Responses
200game_team_lineup_stints rows matching the declared filter set, wrapped in { game_team_lineup_stints, 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/jsonResponse Schema(25 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 127 | |
player1_id | bigint | — e.g. 53 | |
player2_id | bigint | — e.g. 197 | |
player3_id | bigint | — e.g. 187 | |
player4_id | bigint | — e.g. 178 | |
player5_id | bigint | — e.g. 258 | |
team_id | bigint | — e.g. 12 | |
assist_pct | decimal | — | — e.g. 0.0000 |
defensive_rating | decimal | — | — e.g. 0.0000 |
defensive_rebound_pct | decimal | — | — e.g. 1.0000 |
end_clock | integer | — | — e.g. 0 |
end_event_seq | integer | — | — e.g. 7200 |
net_rating | decimal | — | — e.g. 0.0000 |
offensive_rating | decimal | — | — e.g. 0.0000 |
offensive_rebound_pct | decimal | — | — e.g. 0.0000 |
pace | decimal | — | — e.g. 0.0000 |
period | integer | — | — e.g. 2 |
player_stats | jsonb | — | Array of individual player box scores and metrics recorded during this lineup stint. e.g. [{"ast":0,"astShare":0,"blk":0,"corner3Rate":0,"dreb":0,"fg… |
↳playerId player_stats.playerId | integernullable | — | NBA Player ID |
↳pts player_stats.pts | integernullable | — | Points scored during stint |
↳ast player_stats.ast | integernullable | — | Assists recorded |
↳dreb player_stats.dreb | integernullable | — | Defensive rebounds |
↳oreb player_stats.oreb | integernullable | — | Offensive rebounds |
↳stl player_stats.stl | integernullable | — | Steals |
↳blk player_stats.blk | integernullable | — | Blocks |
↳tov player_stats.tov | integernullable | — | Turnovers |
↳pf player_stats.pf | integernullable | — | Personal fouls |
↳fga player_stats.fga | integernullable | — | Field goal attempts |
↳fgm player_stats.fgm | integernullable | — | Field goals made |
↳fta player_stats.fta | integernullable | — | Free throw attempts |
↳ftm player_stats.ftm | integernullable | — | Free throws made |
↳astShare player_stats.astShare | decimalnullable | — | Share of team assists |
↳rebShare player_stats.rebShare | decimalnullable | — | Share of team rebounds |
↳usagePct player_stats.usagePct | decimalnullable | — | Usage percentage during stint |
↳teammateTs player_stats.teammateTs | decimalnullable | — | Teammate true shooting percentage |
↳corner3Rate player_stats.corner3Rate | decimalnullable | — | Corner 3 attempt rate |
↳oppFoulRate player_stats.oppFoulRate | decimalnullable | — | Opponent foul rate |
↳teammateAstPct player_stats.teammateAstPct | decimalnullable | — | Teammate assist percentage |
possessions | integer | — | — e.g. 2 |
pts_allowed | integer | — | — e.g. 0 |
pts_scored | integer | — | — e.g. 0 |
start_clock | integer | — | — e.g. 720 |
start_event_seq | integer | — | — e.g. 100 |
turnover_pct | decimal | — | — e.g. 0.0000 |
GET/api/v1/nba/game_team_lineup_stints/{id}Get a single game_team_lineup_stint by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_team_lineup_stint 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/nba/game_team_lineup_stints/{pk_value}'Responses
200Single game_team_lineup_stint row.application/jsonshow example ▸
404Row not found.
Response Schema(25 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 127 | |
player1_id | bigint | — e.g. 53 | |
player2_id | bigint | — e.g. 197 | |
player3_id | bigint | — e.g. 187 | |
player4_id | bigint | — e.g. 178 | |
player5_id | bigint | — e.g. 258 | |
team_id | bigint | — e.g. 12 | |
assist_pct | decimal | — | — e.g. 0.0000 |
defensive_rating | decimal | — | — e.g. 0.0000 |
defensive_rebound_pct | decimal | — | — e.g. 1.0000 |
end_clock | integer | — | — e.g. 0 |
end_event_seq | integer | — | — e.g. 7200 |
net_rating | decimal | — | — e.g. 0.0000 |
offensive_rating | decimal | — | — e.g. 0.0000 |
offensive_rebound_pct | decimal | — | — e.g. 0.0000 |
pace | decimal | — | — e.g. 0.0000 |
period | integer | — | — e.g. 2 |
player_stats | jsonb | — | Array of individual player box scores and metrics recorded during this lineup stint. e.g. [{"ast":0,"astShare":0,"blk":0,"corner3Rate":0,"dreb":0,"fg… |
↳playerId player_stats.playerId | integernullable | — | NBA Player ID |
↳pts player_stats.pts | integernullable | — | Points scored during stint |
↳ast player_stats.ast | integernullable | — | Assists recorded |
↳dreb player_stats.dreb | integernullable | — | Defensive rebounds |
↳oreb player_stats.oreb | integernullable | — | Offensive rebounds |
↳stl player_stats.stl | integernullable | — | Steals |
↳blk player_stats.blk | integernullable | — | Blocks |
↳tov player_stats.tov | integernullable | — | Turnovers |
↳pf player_stats.pf | integernullable | — | Personal fouls |
↳fga player_stats.fga | integernullable | — | Field goal attempts |
↳fgm player_stats.fgm | integernullable | — | Field goals made |
↳fta player_stats.fta | integernullable | — | Free throw attempts |
↳ftm player_stats.ftm | integernullable | — | Free throws made |
↳astShare player_stats.astShare | decimalnullable | — | Share of team assists |
↳rebShare player_stats.rebShare | decimalnullable | — | Share of team rebounds |
↳usagePct player_stats.usagePct | decimalnullable | — | Usage percentage during stint |
↳teammateTs player_stats.teammateTs | decimalnullable | — | Teammate true shooting percentage |
↳corner3Rate player_stats.corner3Rate | decimalnullable | — | Corner 3 attempt rate |
↳oppFoulRate player_stats.oppFoulRate | decimalnullable | — | Opponent foul rate |
↳teammateAstPct player_stats.teammateAstPct | decimalnullable | — | Teammate assist percentage |
possessions | integer | — | — e.g. 2 |
pts_allowed | integer | — | — e.g. 0 |
pts_scored | integer | — | — e.g. 0 |
start_clock | integer | — | — e.g. 720 |
start_event_seq | integer | — | — e.g. 100 |
turnover_pct | decimal | — | — e.g. 0.0000 |
game_team_rosters
nba.game_team_rostersThe gameday roster for each NBA game — every player available that night, who started, who sat, and who was on a minutes restriction, with the pre-tip snapshot and the reconciled post-game truth side by side.
GET/api/v1/nba/game_team_rostersList game_team_rosters for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
team_idquerybigintoptionalFilter by team.
player_idquerybigintoptionalFilter to a single player.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_team_rosters?game_id=1'Responses
200game_team_rosters rows matching the declared filter set, wrapped in { game_team_rosters, 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/jsonResponse Schema(14 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 724 | |
player_id | bigint | — e.g. 197 | |
team_id | bigint | — e.g. 12 | |
comment | stringnullable | — | — e.g. INACTIVE_GLEAGUE_TWOWAY |
confirmed | booleannullable | — | Whether the starter truth was established from post-game evidence e.g. true |
injury_status | stringnullable | — | Reconciled final injury designation for the roster row Values:OUTQUESTIONABLEPROBABLEDOUBTFUL |
position | stringnullable | — | — Values:GFCG-FF-C |
pre_game_confirmed | booleannullable | — | Pre-tip lineup confidence from source (e.g. RotoWire confirmed vs expected) e.g. true |
pre_game_injury_status | stringnullable | — | Pre-tip injury designation: OUT, DOUBTFUL, QUESTIONABLE, PROBABLE Values:OUTQUESTIONABLEPROBABLEDOUBTFUL |
pre_game_starter | booleannullable | — | Pre-tip expected starter flag from lineup sources Values:falsetrue |
pre_game_status | integernullable | — | Pre-tip roster availability: 1=Active, 2=Inactive, 3=Out e.g. 1 |
starter | booleannullable | — | Whether the player was in the starting five (reconciled post-game) Values:falsetrue |
status | integernullable | — | Reconciled final roster availability: 1=Active, 2=Inactive, 3=Out e.g. 1 |
GET/api/v1/nba/game_team_rosters/{id}Get a single game_team_roster by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_team_roster 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/nba/game_team_rosters/{pk_value}'Responses
200Single game_team_roster row.application/jsonshow example ▸
404Row not found.
Response Schema(14 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 724 | |
player_id | bigint | — e.g. 197 | |
team_id | bigint | — e.g. 12 | |
comment | stringnullable | — | — e.g. INACTIVE_GLEAGUE_TWOWAY |
confirmed | booleannullable | — | Whether the starter truth was established from post-game evidence e.g. true |
injury_status | stringnullable | — | Reconciled final injury designation for the roster row Values:OUTQUESTIONABLEPROBABLEDOUBTFUL |
position | stringnullable | — | — Values:GFCG-FF-C |
pre_game_confirmed | booleannullable | — | Pre-tip lineup confidence from source (e.g. RotoWire confirmed vs expected) e.g. true |
pre_game_injury_status | stringnullable | — | Pre-tip injury designation: OUT, DOUBTFUL, QUESTIONABLE, PROBABLE Values:OUTQUESTIONABLEPROBABLEDOUBTFUL |
pre_game_starter | booleannullable | — | Pre-tip expected starter flag from lineup sources Values:falsetrue |
pre_game_status | integernullable | — | Pre-tip roster availability: 1=Active, 2=Inactive, 3=Out e.g. 1 |
starter | booleannullable | — | Whether the player was in the starting five (reconciled post-game) Values:falsetrue |
status | integernullable | — | Reconciled final roster availability: 1=Active, 2=Inactive, 3=Out e.g. 1 |
team_depth_charts
nba.team_depth_chartsEach NBA team's depth chart by position on each date — the starter, second-unit, and bench order at point guard, shooting guard, small forward, power forward, and center, with injury designations layered in.
GET/api/v1/nba/team_depth_chartsList team_depth_charts for NBA
Requires one of:
team_id + season_id — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter by team.
season_idquerybigintoptionalFilter to a season. Defaults to the current season.
positionquerystringoptionalFilter by position (PG, SG, SF, PF, C). Values: C, PF, PG, SF, SG.
dayqueryintegeroptionalSnapshot day (YYYYMMDD integer). The table holds one snapshot per day; pass the latest day for the current depth chart. Range syntax: day__gte=, day__lte=, day__between=.
limitqueryintegeroptionaldefault 100Page size. Defaults to 100; max 5000.
from_idquerybigintoptionalReturn 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/nba/team_depth_charts?team_id=1&season_id=2026'Responses
200team_depth_charts rows matching the declared filter set, wrapped in { team_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/jsonResponse Schema(8 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 337 | |
season_id | bigint | — e.g. 2025 | |
team_id | bigint | — e.g. 4 | |
day | integer | — | YYYYMMDD snapshot day e.g. 20260214 |
depth_rank | integer | — | 1-based rank within position (1 = starter) e.g. 1 |
injury_status | stringnullable | — | Day-To-Day, Out, etc. from ESPN Values:OutDay-To-DaySuspension |
position | string | — | PG, SG, SF, PF, C Values:SFSGPFPGC |
GET/api/v1/nba/team_depth_charts/{id}Get a single team_depth_chart by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_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/nba/team_depth_charts/{pk_value}'Responses
200Single team_depth_chart row.application/jsonshow example ▸
404Row not found.
Response Schema(8 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 337 | |
season_id | bigint | — e.g. 2025 | |
team_id | bigint | — e.g. 4 | |
day | integer | — | YYYYMMDD snapshot day e.g. 20260214 |
depth_rank | integer | — | 1-based rank within position (1 = starter) e.g. 1 |
injury_status | stringnullable | — | Day-To-Day, Out, etc. from ESPN Values:OutDay-To-DaySuspension |
position | string | — | PG, SG, SF, PF, C Values:SFSGPFPGC |
Misc
stadiums
nba.stadiumsNBA arenas — current home venues and historical buildings the league's teams have played in.
GET/api/v1/nba/stadiumsList stadiums for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/stadiums?limit=3'Responses
200stadiums rows matching the declared filter set, wrapped in { stadiums, 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/jsonResponse Schema(19 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_stadium_id | integernullable | — | Official NBA arena ID from stats.nba.com e.g. 643 |
address | stringnullable | — | — e.g. — (all-null in sample) |
capacity | integernullable | — | — e.g. — (all-null in sample) |
city | string | — | — e.g. Orlando |
closed_date | timestamptznullable | — | — e.g. — (all-null in sample) |
country | stringnullable | — | — Values:USCAMXGBFRDEAECNJP |
description | stringnullable | — | — e.g. Home of the Toronto Raptors. Multi-purpose arena in downtow… |
elevation | floatnullable | — | Elevation in feet above sea level e.g. 198 |
image_url | stringnullable | — | URL to aerial/overview image of arena e.g. — (all-null in sample) |
latitude | floatnullable | — | — e.g. 25.7814 |
longitude | floatnullable | — | — e.g. -80.187 |
name | string | — | — e.g. Scotiabank Arena |
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. FL |
surface | stringnullable | — | — e.g. — (all-null in sample) |
team_name | stringnullable | — | — e.g. — (all-null in sample) |
timezone | stringnullable | — | IANA timezone (e.g., America/New_York) Values:America/New_YorkAmerica/ChicagoAmerica/Los_AngelesAmerica/DenverAmerica/PhoenixAmerica/Mexico_CityAmerica/TorontoAmerica/Indiana/Indiana…Europe/LondonEurope/ParisEurope/BerlinAsia/DubaiAmerica/Puerto_RicoAmerica/VancouverAsia/ShanghaiPacific/HonoluluAsia/TokyoAmerica/Edmonton |
GET/api/v1/nba/stadiums/{id}Get a single stadium by id
Parameters
idpathbigintrequiredPrimary key (id) of the stadium 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/nba/stadiums/{pk_value}'Responses
200Single stadium row.application/jsonshow example ▸
404Row not found.
Response Schema(19 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_stadium_id | integernullable | — | Official NBA arena ID from stats.nba.com e.g. 643 |
address | stringnullable | — | — e.g. — (all-null in sample) |
capacity | integernullable | — | — e.g. — (all-null in sample) |
city | string | — | — e.g. Orlando |
closed_date | timestamptznullable | — | — e.g. — (all-null in sample) |
country | stringnullable | — | — Values:USCAMXGBFRDEAECNJP |
description | stringnullable | — | — e.g. Home of the Toronto Raptors. Multi-purpose arena in downtow… |
elevation | floatnullable | — | Elevation in feet above sea level e.g. 198 |
image_url | stringnullable | — | URL to aerial/overview image of arena e.g. — (all-null in sample) |
latitude | floatnullable | — | — e.g. 25.7814 |
longitude | floatnullable | — | — e.g. -80.187 |
name | string | — | — e.g. Scotiabank Arena |
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. FL |
surface | stringnullable | — | — e.g. — (all-null in sample) |
team_name | stringnullable | — | — e.g. — (all-null in sample) |
timezone | stringnullable | — | IANA timezone (e.g., America/New_York) Values:America/New_YorkAmerica/ChicagoAmerica/Los_AngelesAmerica/DenverAmerica/PhoenixAmerica/Mexico_CityAmerica/TorontoAmerica/Indiana/Indiana…Europe/LondonEurope/ParisEurope/BerlinAsia/DubaiAmerica/Puerto_RicoAmerica/VancouverAsia/ShanghaiPacific/HonoluluAsia/TokyoAmerica/Edmonton |
broadcasters
nba.broadcastersNetworks, regional sports networks, and streaming services that air NBA games — ESPN, TNT, ABC, NBA TV, plus team-local RSNs like YES, MSG, and Bally Sports.
GET/api/v1/nba/broadcastersList broadcasters for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/broadcasters?limit=3'Responses
200broadcasters rows matching the declared filter set, wrapped in { broadcasters, 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/jsonResponse Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_team_id | integer | — | — e.g. 0 |
region_id | integer | — | — e.g. 0 |
broadcaster_abbreviation | string | — | — e.g. BSIN |
broadcaster_description | stringnullable | — | — e.g. — (all-null in sample) |
broadcaster_display | string | — | — e.g. BSIN |
broadcaster_media | string | — | — e.g. tv |
broadcaster_ranking | integer | — | — e.g. 0 |
broadcaster_scope | string | — | — Values:localnational |
broadcaster_video_link | stringnullable | — | — e.g. — (all-null in sample) |
tape_delay_comments | stringnullable | — | — e.g. — (all-null in sample) |
GET/api/v1/nba/broadcasters/{id}Get a single broadcaster by id
Parameters
idpathbigintrequiredPrimary key (id) of the broadcaster 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/nba/broadcasters/{pk_value}'Responses
200Single broadcaster row.application/jsonshow example ▸
404Row not found.
Response Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_team_id | integer | — | — e.g. 0 |
region_id | integer | — | — e.g. 0 |
broadcaster_abbreviation | string | — | — e.g. BSIN |
broadcaster_description | stringnullable | — | — e.g. — (all-null in sample) |
broadcaster_display | string | — | — e.g. BSIN |
broadcaster_media | string | — | — e.g. tv |
broadcaster_ranking | integer | — | — e.g. 0 |
broadcaster_scope | string | — | — Values:localnational |
broadcaster_video_link | stringnullable | — | — e.g. — (all-null in sample) |
tape_delay_comments | stringnullable | — | — e.g. — (all-null in sample) |
referees
nba.refereesNBA officials — the three-person crew of referees who work each game.
GET/api/v1/nba/refereesList referees for NBA
Parameters
activequerybooleanoptionalFilter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/referees?limit=3'Responses
200referees rows matching the declared filter set, wrapped in { referees, 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/jsonResponse Schema(13 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
nba_referee_id | integer | — | — e.g. 202027 |
active | boolean | — | — e.g. true |
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) |
college | stringnullable | — | — e.g. — (all-null in sample) |
experience | integernullable | — | — e.g. — (all-null in sample) |
first_name | string | — | — e.g. Biniam |
full_name | string | — | — e.g. Biniam Maru |
jersey_number | stringnullable | — | — e.g. 94 |
last_name | string | — | — e.g. Maru |
GET/api/v1/nba/referees/{id}Get a single referee by id
Parameters
idpathbigintrequiredPrimary key (id) of the referee 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/nba/referees/{pk_value}'Responses
200Single referee row.application/jsonshow example ▸
404Row not found.
Response Schema(13 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
nba_referee_id | integer | — | — e.g. 202027 |
active | boolean | — | — e.g. true |
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) |
college | stringnullable | — | — e.g. — (all-null in sample) |
experience | integernullable | — | — e.g. — (all-null in sample) |
first_name | string | — | — e.g. Biniam |
full_name | string | — | — e.g. Biniam Maru |
jersey_number | stringnullable | — | — e.g. 94 |
last_name | string | — | — e.g. Maru |
operator_team_lookups
nba.operator_team_lookupsHow each sportsbook and fantasy operator names every NBA team — the mapping from each operator's team code to the unified franchise record.
GET/api/v1/nba/operator_team_lookupsList operator_team_lookups for NBA
Requires one of:
operator_id — requests satisfying none of these return 400.Parameters
operator_idquerybigintoptionalFilter by operator.
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Reference to main.operator entity e.g. 1 | |
operator_team_id | string | — | External team ID from operator e.g. 2003 |
team_id | bigint | Internal nba.teams.id reference e.g. 11 | |
abbreviation | stringnullable | — | Team abbreviation for reconciliation e.g. ATL |
team_name | stringnullable | — | Team name for reconciliation e.g. Atlanta Hawks |
GET/api/v1/nba/operator_team_lookups/{id}Get a single operator_team_lookup by id
Parameters
idpathbigintrequiredPrimary 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/nba/operator_team_lookups/{pk_value}'Responses
200Single operator_team_lookup row.application/jsonshow example ▸
404Row not found.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Reference to main.operator entity e.g. 1 | |
operator_team_id | string | — | External team ID from operator e.g. 2003 |
team_id | bigint | Internal nba.teams.id reference e.g. 11 | |
abbreviation | stringnullable | — | Team abbreviation for reconciliation e.g. ATL |
team_name | stringnullable | — | Team name for reconciliation e.g. Atlanta Hawks |
playoffs
nba.playoffsThe NBA postseason bracket — the play-in tournament, the four conference series rounds, and the NBA Finals, tracked as best-of-seven matchups with seeds, wins, and outcomes.
GET/api/v1/nba/playoffsList playoffs for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/playoffs?limit=3'Responses
200playoffs rows matching the declared filter set, wrapped in { playoffs, 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/jsonResponse Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 13 | |
home_team_id | bigint | — e.g. 1 | |
season_id | bigint | — e.g. 2020 | |
series_id | bigint | — | — e.g. 202001 |
away_team_wins | integer | — | — e.g. 0 |
games_played | integer | — | — e.g. 1 |
home_team_wins | integer | — | — e.g. 4 |
max_games | integer | — | — e.g. 7 |
series_name | string | — | — Values:East First RoundWest First RoundEast Play-InWest Play-InEast Conference Semifin…West Conference Semifin…West Conference FinalsEast Conference FinalsNBA Finals |
series_text | string | — | — e.g. MIA won 1-0 |
status | string | — | — e.g. Completed |
GET/api/v1/nba/playoffs/{id}Get a single playoff by id
Parameters
idpathbigintrequiredPrimary key (id) of the playoff 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/nba/playoffs/{pk_value}'Responses
200Single playoff row.application/jsonshow example ▸
404Row not found.
Response Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 13 | |
home_team_id | bigint | — e.g. 1 | |
season_id | bigint | — e.g. 2020 | |
series_id | bigint | — | — e.g. 202001 |
away_team_wins | integer | — | — e.g. 0 |
games_played | integer | — | — e.g. 1 |
home_team_wins | integer | — | — e.g. 4 |
max_games | integer | — | — e.g. 7 |
series_name | string | — | — Values:East First RoundWest First RoundEast Play-InWest Play-InEast Conference Semifin…West Conference Semifin…West Conference FinalsEast Conference FinalsNBA Finals |
series_text | string | — | — e.g. MIA won 1-0 |
status | string | — | — e.g. Completed |
game_broadcasters
nba.game_broadcastersWhich networks broadcast each NBA game — the national TV partner, home and away regional carriers, radio calls, and streaming providers.
GET/api/v1/nba/game_broadcastersList game_broadcasters for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
broadcaster_idquerybigintoptionalFilter by broadcaster.
broadcaster_typequerystringoptionalFilter by broadcaster role. Values: awayTv, homeTv, nationalTv.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_broadcasters?game_id=1'Responses
200game_broadcasters rows matching the declared filter set, wrapped in { game_broadcasters, 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/jsonResponse Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_id | bigint | — e.g. 10 | |
game_id | bigint | — e.g. 15975 | |
broadcaster_type | string | — | — Values:awayTvhomeTvnationalTv |
GET/api/v1/nba/game_broadcasters/{id}Get a single game_broadcaster by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_broadcaster 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/nba/game_broadcasters/{pk_value}'Responses
200Single game_broadcaster row.application/jsonshow example ▸
404Row not found.
Response Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_id | bigint | — e.g. 10 | |
game_id | bigint | — e.g. 15975 | |
broadcaster_type | string | — | — Values:awayTvhomeTvnationalTv |
game_referees
nba.game_refereesThe officiating crew assigned to each NBA game — the three referees who worked the matchup.
GET/api/v1/nba/game_refereesList game_referees for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
referee_idquerybigintoptionalFilter by referee.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/game_referees?game_id=1'Responses
200game_referees rows matching the declared filter set, wrapped in { game_referees, 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/jsonResponse Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 4727 | |
referee_id | bigint | — e.g. 58 | |
position | stringnullable | — | — Values:RefereeCrew ChiefUmpireALTERNATE |
GET/api/v1/nba/game_referees/{id}Get a single game_referee by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_referee 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/nba/game_referees/{pk_value}'Responses
200Single game_referee row.application/jsonshow example ▸
404Row not found.
Response Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 4727 | |
referee_id | bigint | — e.g. 58 | |
position | stringnullable | — | — Values:RefereeCrew ChiefUmpireALTERNATE |
operator_player_lookups
nba.operator_player_lookupsHow each sportsbook and fantasy operator names every NBA player — the mapping from each operator's player identifier to a unified player record.
GET/api/v1/nba/operator_player_lookupsList operator_player_lookups for NBA
Requires one of:
operator_id — requests satisfying none of these return 400.Parameters
operator_idquerybigintoptionalFilter by operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io, 83 stats.nba.com.
player_idquerybigintoptionalFilter to a single player.
limitqueryintegeroptionaldefault 100Page size. Defaults to 100; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io, 83 stats.nba.com. e.g. 83 | |
operator_player_id | string | — | External player ID from operator e.g. 76001 |
player_id | bigintnullable | Internal nba.players.id reference e.g. 521 | |
decided_at | timestamptznullable | — | When the pin or block was decided. e.g. — (all-null in sample) |
decided_reason | stringnullable | — | Evidence behind a pinned or blocked decision. e.g. — (all-null in sample) |
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. e.g. derived |
player_name | stringnullable | — | Player name for reconciliation e.g. George Johnson |
position | stringnullable | — | Position for reconciliation Values:GFCG-FF-CUnknown |
GET/api/v1/nba/operator_player_lookups/{id}Get a single operator_player_lookup by id
Parameters
idpathbigintrequiredPrimary 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/nba/operator_player_lookups/{pk_value}'Responses
200Single operator_player_lookup row.application/jsonshow example ▸
404Row not found.
Response Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io, 83 stats.nba.com. e.g. 83 | |
operator_player_id | string | — | External player ID from operator e.g. 76001 |
player_id | bigintnullable | Internal nba.players.id reference e.g. 521 | |
decided_at | timestamptznullable | — | When the pin or block was decided. e.g. — (all-null in sample) |
decided_reason | stringnullable | — | Evidence behind a pinned or blocked decision. e.g. — (all-null in sample) |
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. e.g. derived |
player_name | stringnullable | — | Player name for reconciliation e.g. George Johnson |
position | stringnullable | — | Position for reconciliation Values:GFCG-FF-CUnknown |
player_news
nba.player_newsNews about NBA players — trades, injuries, lineup decisions, suspensions, and general beat-reporter updates.
GET/api/v1/nba/player_newsList player_news for NBA
Requires one of:
player_id or team_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to news about a single player.
team_idquerybigintoptionalFilter by team — a team-level news feed, newest first.
categoryquerystringoptionalFilter by news category (injury, transaction, lineup, general). Values: general, injury, lineup, transaction.
status_enumquerystringoptionalFilter 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.
urgencyquerystringoptionalFilter by news urgency. Values: BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE.
news_timequerytimestamptzoptionalFilter 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 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/jsonResponse Schema(22 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | stringnullable | — | Unique identifier from the news provider. e.g. rotoql-14973 |
game_id | bigintnullable | Associated game ID when this news item relates to a specific game. e.g. — (all-null in sample) | |
opponent_team_id | bigintnullable | Opponent team ID when this news item relates to an upcoming or active game matchup. e.g. — (all-null in sample) | |
player_id | bigintnullable | Player ID associated with the news report. e.g. 165 | |
team_id | bigintnullable | Team ID of the player at the time of publication. e.g. 16 | |
ai_processed | boolean | — | Whether this story was generated or enriched via LLM summarization. e.g. false |
analysis | stringnullable | — | Fantasy and tactical analysis of the news. e.g. Barton had to be helped back to the locker room during the … |
author | stringnullable | — | Reporter or author of the article. 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. e.g. Murray was assigned Sunday to the D-League's Austin Spurs. |
first_reported_at | timestamptznullable | — | Timestamp when this story was first reported before multi-source compaction. e.g. — (all-null in sample) |
link | stringnullable | — | URL link to the original article or source video. e.g. — (all-null in sample) |
news_time | timestamptz | — | Publication timestamp of the news story. e.g. 2016-11-27T19:29:13.000Z |
priority | integer | — | Display priority score (1-10). e.g. 3 |
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. |
↳affectedPlayers situational_impact.affectedPlayers | listnullable | — | Teammates whose opportunity or role is impacted (camelCase). |
↳affected_player_ids situational_impact.affected_player_ids | listnullable | — | IDs of impacted teammates. |
source | stringnullable | — | Primary news source or publication. e.g. rotowire |
sources | jsonbnullable | — | Source citations with source name, URL, author, and published timestamp. e.g. — (all-null in sample) |
↳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). e.g. — (all-null in sample) |
title | string | — | Headline of the news report. e.g. Assigned to D-League |
urgency | stringnullable | — | Urgency level of the news event (BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE). e.g. — (all-null in sample) |
GET/api/v1/nba/player_news/{id}Get a single player_new by id
Parameters
idpathbigintrequiredPrimary 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/nba/player_news/{pk_value}'Responses
200Single player_new row.application/jsonshow example ▸
404Row not found.
Response Schema(22 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | stringnullable | — | Unique identifier from the news provider. e.g. rotoql-14973 |
game_id | bigintnullable | Associated game ID when this news item relates to a specific game. e.g. — (all-null in sample) | |
opponent_team_id | bigintnullable | Opponent team ID when this news item relates to an upcoming or active game matchup. e.g. — (all-null in sample) | |
player_id | bigintnullable | Player ID associated with the news report. e.g. 165 | |
team_id | bigintnullable | Team ID of the player at the time of publication. e.g. 16 | |
ai_processed | boolean | — | Whether this story was generated or enriched via LLM summarization. e.g. false |
analysis | stringnullable | — | Fantasy and tactical analysis of the news. e.g. Barton had to be helped back to the locker room during the … |
author | stringnullable | — | Reporter or author of the article. 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. e.g. Murray was assigned Sunday to the D-League's Austin Spurs. |
first_reported_at | timestamptznullable | — | Timestamp when this story was first reported before multi-source compaction. e.g. — (all-null in sample) |
link | stringnullable | — | URL link to the original article or source video. e.g. — (all-null in sample) |
news_time | timestamptz | — | Publication timestamp of the news story. e.g. 2016-11-27T19:29:13.000Z |
priority | integer | — | Display priority score (1-10). e.g. 3 |
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. |
↳affectedPlayers situational_impact.affectedPlayers | listnullable | — | Teammates whose opportunity or role is impacted (camelCase). |
↳affected_player_ids situational_impact.affected_player_ids | listnullable | — | IDs of impacted teammates. |
source | stringnullable | — | Primary news source or publication. e.g. rotowire |
sources | jsonbnullable | — | Source citations with source name, URL, author, and published timestamp. e.g. — (all-null in sample) |
↳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). e.g. — (all-null in sample) |
title | string | — | Headline of the news report. e.g. Assigned to D-League |
urgency | stringnullable | — | Urgency level of the news event (BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE). e.g. — (all-null in sample) |
team_game_contexts
nba.team_game_contextsSituational context for each NBA team in each game — how much the game matters (playoff push, tanking, contender mode, In-Season Tournament stakes), what phase of the season it's in, and how far along the schedule the team is.
GET/api/v1/nba/team_game_contextsList team_game_contexts for NBA
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
team_idquerybigintoptionalFilter by team.
season_idquerybigintoptionalFilter by season.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/team_game_contexts?game_id=1'Responses
200team_game_contexts rows matching the declared filter set, wrapped in { team_game_contexts, 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/jsonResponse Schema(20 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 2374 | |
opponent_team_id | bigint | — e.g. 9 | |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 9 | |
conference_rank | integer | — | — e.g. 8 |
game_type | string | — | regular, playoff, play_in, ist_group, ist_knockout, preseason, allstar Values:regularplayoffist_group |
games_remaining | integer | — | — e.g. 0 |
intensity | integer | — | 1-10 motivation intensity scale e.g. 5 |
is_back_to_back | boolean | — | — Values:falsetrue |
is_clinch | boolean | — | — Values:falsetrue |
is_elimination | boolean | — | — Values:falsetrue |
ist_group_rank | integernullable | — | — e.g. — (all-null in sample) |
ist_group_record | stringnullable | — | e.g. 2-1 e.g. — (all-null in sample) |
motivation | string | — | contender, playoff_lock, seeding_battle, playoff_push, play_in, fringe, tanking, eliminated, early_season, playoff_comfortable, playoff_competitive, playoff_desperate, playoff_elimination, playoff_clinch, ist_contending, ist_eliminated, ist_knockout
Values:play_infringeearly_seasonseeding_battlecontendertankingplayoff_lockplayoff_competitiveplayoff_comfortableplayoff_desperateplayoff_clinchplayoff_eliminationist_contending |
rest_days | integer | — | — e.g. 1 |
season_pct | decimal | — | 0.0-1.0 how far through regular season e.g. 1.0000 |
season_phase | string | — | early, mid, late, final_push, postseason Values:midlateearlyfinal_pushpostseason |
team_series_wins | integer | — | — e.g. 0 |
win_pct | decimal | — | — e.g. 0.5000 |
GET/api/v1/nba/team_game_contexts/{id}Get a single team_game_context by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_game_context 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/nba/team_game_contexts/{pk_value}'Responses
200Single team_game_context row.application/jsonshow example ▸
404Row not found.
Response Schema(20 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 2374 | |
opponent_team_id | bigint | — e.g. 9 | |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 9 | |
conference_rank | integer | — | — e.g. 8 |
game_type | string | — | regular, playoff, play_in, ist_group, ist_knockout, preseason, allstar Values:regularplayoffist_group |
games_remaining | integer | — | — e.g. 0 |
intensity | integer | — | 1-10 motivation intensity scale e.g. 5 |
is_back_to_back | boolean | — | — Values:falsetrue |
is_clinch | boolean | — | — Values:falsetrue |
is_elimination | boolean | — | — Values:falsetrue |
ist_group_rank | integernullable | — | — e.g. — (all-null in sample) |
ist_group_record | stringnullable | — | e.g. 2-1 e.g. — (all-null in sample) |
motivation | string | — | contender, playoff_lock, seeding_battle, playoff_push, play_in, fringe, tanking, eliminated, early_season, playoff_comfortable, playoff_competitive, playoff_desperate, playoff_elimination, playoff_clinch, ist_contending, ist_eliminated, ist_knockout
Values:play_infringeearly_seasonseeding_battlecontendertankingplayoff_lockplayoff_competitiveplayoff_comfortableplayoff_desperateplayoff_clinchplayoff_eliminationist_contending |
rest_days | integer | — | — e.g. 1 |
season_pct | decimal | — | 0.0-1.0 how far through regular season e.g. 1.0000 |
season_phase | string | — | early, mid, late, final_push, postseason Values:midlateearlyfinal_pushpostseason |
team_series_wins | integer | — | — e.g. 0 |
win_pct | decimal | — | — e.g. 0.5000 |
team_news
nba.team_newsNews and updates about NBA 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/nba/team_newsList team_news for NBA
Requires one of:
team_id — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter by team.
categoryquerystringoptionalFilter by category (game_preview, coaching, transaction, general, draft, depth_chart). Values: game_preview, coaching, transaction, general, draft, depth_chart.
urgencyquerystringoptionalFilter by news urgency. Values: BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE.
news_timequerytimestamptzoptionalFilter 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 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn 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/nba/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/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | stringnullable | — | Canonical external identifier for deduplication. e.g. rotoworld:nba-khalifa-diop-20260902T200417 |
game_id | bigintnullable | Associated game ID when news relates to a specific game. e.g. — (all-null in sample) | |
opponent_team_id | bigintnullable | Opponent team ID when news relates to an upcoming or completed game matchup. e.g. — (all-null in sample) | |
team_id | bigint | Team ID that this news event pertains to. e.g. 7 | |
ai_processed | booleannullable | — | Whether this story was generated or enriched via LLM summarization. e.g. true |
category | stringnullable | — | game_preview, coaching, transaction, general e.g. transaction |
news_time | timestamptz | — | Publication timestamp of the team story. e.g. 2026-09-02T20:04:17.734Z |
sources | jsonbnullable | — | Source citations with publisher name, URL, author, and published timestamp. e.g. [{"author":"Michael Scotto","published_at":"2026-09-02T20:0… |
↳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. e.g. The Cavaliers officially signed 2022 draft pick Khalifa Dio… |
title | string | — | Headline of the team news story. e.g. Cavaliers sign Khalifa Diop to four-year contract after two… |
urgency | stringnullable | — | ROUTINE, MEDIUM, HIGH, BREAKING_GAME_TIME e.g. ROUTINE |
GET/api/v1/nba/team_news/{id}Get a single team_new by id
Parameters
idpathbigintrequiredPrimary 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/nba/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 ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | stringnullable | — | Canonical external identifier for deduplication. e.g. rotoworld:nba-khalifa-diop-20260902T200417 |
game_id | bigintnullable | Associated game ID when news relates to a specific game. e.g. — (all-null in sample) | |
opponent_team_id | bigintnullable | Opponent team ID when news relates to an upcoming or completed game matchup. e.g. — (all-null in sample) | |
team_id | bigint | Team ID that this news event pertains to. e.g. 7 | |
ai_processed | booleannullable | — | Whether this story was generated or enriched via LLM summarization. e.g. true |
category | stringnullable | — | game_preview, coaching, transaction, general e.g. transaction |
news_time | timestamptz | — | Publication timestamp of the team story. e.g. 2026-09-02T20:04:17.734Z |
sources | jsonbnullable | — | Source citations with publisher name, URL, author, and published timestamp. e.g. [{"author":"Michael Scotto","published_at":"2026-09-02T20:0… |
↳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. e.g. The Cavaliers officially signed 2022 draft pick Khalifa Dio… |
title | string | — | Headline of the team news story. e.g. Cavaliers sign Khalifa Diop to four-year contract after two… |
urgency | stringnullable | — | ROUTINE, MEDIUM, HIGH, BREAKING_GAME_TIME e.g. ROUTINE |