NBA
29 tablesEvery 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.
Machine-readable spec: /api/openapi/public.json (OpenAPI 3.1)
Main· 4 tables
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.
▸Fields8
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| short_id | string | — | — Values:2020-212021-222022-232023-242024-252025-262027 |
| description | stringnullable | — | — Values:2020-21 NBA Season (72 …2021-22 NBA Season2022-23 NBA Season2023-24 NBA Season2024-25 NBA Season2025-26 NBA Season |
| end_date | timestamptznullable | — | — e.g. 2021-07-20T00:00:00.000Z |
| post_season_start_date | timestamptznullable | — | — e.g. 2021-05-22T00:00:00.000Z |
| regular_season_start_date | timestamptznullable | — | — e.g. 2020-12-22T00:00:00.000Z |
| start_date | timestamptz | — | — e.g. 2020-12-22T00:00:00.000Z |
| start_year | integer | — | — e.g. 2020 |
GET/api/v1/nba/seasonsList seasons for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/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 \
-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.
teams
nba.teamsThe 30 NBA franchises, organized into the Eastern and Western Conferences with three divisions in each.
▸Fields10
| 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/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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields28
| 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. 2022-11-07T07:12:00.000Z |
| game_label | stringnullable | — | — e.g. — (all-null in sample) |
| game_sub_label | stringnullable | — | — e.g. — (all-null in sample) |
| game_time | timestamptz | — | — 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 | — | — e.g. false |
| postponed_status | stringnullable | — | — e.g. — (all-null in sample) |
| season_type | string | — | — Values:Regular SeasonPlayoffsPreseasonPlay-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) |
| start_time | timestamptz | — | — e.g. 2025-04-13T19:30:00.000Z |
| status | string | — | — e.g. Final |
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: 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 type (Regular Season, Preseason, Playoffs, Play-In, In-Season Tournament). Values: In-Season Tournament, Play-In, Playoffs, Preseason, Regular Season.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/nba/games?season_id=2027'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/jsonGET/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 \
-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.
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. NBA `players` has no boolean `active` column; the roster signal lives in `status` / `roster_status` (text) 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.
▸Fields41
| 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 | — | Roster flag from stats.nba.com: "1" on an active NBA roster, "0" not. (Contract type — two-way / 10-day — is not exposed; dleague_flag is the closest signal.) e.g. 1 |
| school | stringnullable | — | Last school attended before the NBA (college, prep, or international club). e.g. Mega Basket |
| status | stringnullable | — | Roster status. One of "Active", "Inactive"; null for a few legacy rows. Values:InactiveActive |
| 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/playersList players for NBA
Requires one of:
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.
statusquerystringoptionalFilter by roster status. Defaults to Active (current players); pass status=Inactive to include retired/inactive players, or any other status value. Values: Active, Inactive.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/nba/players?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/jsonGET/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 \
-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.
Plays· 2 tables
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.
▸Fields29
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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).
▸Fields21
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
Stats· 7 tables
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.
▸Fields6
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields9
| 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. 32 |
| pts_allowed | integer | — | — e.g. 0 |
| pts_scored | integer | — | — e.g. 9372 |
| ties | integer | — | — e.g. 0 |
| wins | integer | — | — e.g. 48 |
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 200.
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 \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/nba/season_team_stats?season_id=2027'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/jsonGET/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 \
-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.
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.
▸Fields21
| 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_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 50Page size. Defaults to 50; max 200.
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 \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/nba/team_standings?season_id=2027'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/jsonGET/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 \
-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.
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.
▸Fields116
| 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 |
| clear_path_fouls | integer | — | — 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 |
| flagrant_fouls_type_1 | integer | — | — e.g. 0 |
| flagrant_fouls_type_2 | integer | — | — e.g. 0 |
| foul_trouble_severity | integer | — | — e.g. 0 |
| fouls | integer | — | — 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 | — | — 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 | — | — 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 | — | — 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields70
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields6
| 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 | bigint | Internal nba.players.id reference e.g. 521 | |
| 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_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 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/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 \
-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.
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).
▸Fields49
| 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. 0.0000 |
| avg_seconds_per_touch | decimal | — | — e.g. 0.0000 |
| blocks | integer | — | — e.g. 0 |
| defensive_rating | decimal | — | — e.g. 100.0000 |
| defensive_rebound_percentage | decimal | — | — e.g. 0.0000 |
| defensive_rebounds | integer | — | — e.g. 2 |
| 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. 1 |
| 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. 0 |
| games_played | integer | — | — e.g. 1 |
| losses | integer | — | — e.g. 0 |
| minutes | decimal | — | — e.g. 5.3000 |
| net_rating | decimal | — | — e.g. 2.7000 |
| offensive_rating | decimal | — | — e.g. 112.5000 |
| offensive_rebound_percentage | decimal | — | — e.g. 0.0000 |
| offensive_rebounds | integer | — | — e.g. 0 |
| pace | decimal | — | — e.g. 100.0000 |
| player_impact_estimate | decimal | — | — e.g. 0.0670 |
| plus_minus | integer | — | — e.g. 5 |
| possessions | integer | — | — e.g. 43 |
| pts | integer | — | — e.g. 0 |
| rebound_percentage | decimal | — | — e.g. 0.0000 |
| rebounds | integer | — | — e.g. 2 |
| 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.0000 |
| touches | integer | — | — e.g. 0 |
| 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.1670 |
| wins | integer | — | — e.g. 1 |
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 200.
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 \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/nba/season_player_stats?season_id=2027'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/jsonGET/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 \
-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.
Odds· 3 tables
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.
▸Fields30
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields17
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields18
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
Lineups & Roster· 5 tables
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.
▸Fields5
| 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_staffsList coaching_staffs for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields9
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| coaching_staff_id | bigint | — | — e.g. 346 |
| season_id | bigint | First season of this tenure e.g. 2025 | |
| team_id | bigint | — e.g. 8 | |
| coach_type | string | — | Head Coach, Assistant Coach, Trainer Values:Assistant CoachHead CoachTrainerAssistant 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-18T04:00:00.000Z |
| 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-21T04:00:00.000Z |
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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields25
| 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 | — | — e.g. [{"ast":0,"astShare":0,"blk":0,"corner3Rate":0,"dreb":0,"fg… |
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields15
| 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 |
| day | integer | — | — e.g. 20260207 |
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields8
| 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_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 50Page size. Defaults to 50; max 200.
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 \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/nba/team_depth_charts?team_id=1&season_id=2027'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/jsonGET/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 \
-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.
Misc· 8 tables
stadiums
nba.stadiumsNBA arenas — current home venues and historical buildings the league's teams have played in.
▸Fields19
| 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. Miami |
| closed_date | timestamptznullable | — | — e.g. — (all-null in sample) |
| country | stringnullable | — | — Values:USCAGBFRMXDE |
| 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. CA |
| 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/Berlin |
GET/api/v1/nba/stadiumsList stadiums for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/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 \
-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.
referees
nba.refereesNBA officials — the three-person crew of referees who work each game.
▸Fields13
| 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/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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields12
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| broadcaster_id | integer | — e.g. 0 | |
| 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/broadcastersList broadcasters for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields12
| 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 | — | — Values:CompletedActive |
GET/api/v1/nba/playoffsList playoffs for NBA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/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 \
-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.
game_broadcasters
nba.game_broadcastersWhich networks broadcast each NBA game — the national TV partner, home and away regional carriers, radio calls, and streaming providers.
▸Fields4
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
game_referees
nba.game_refereesThe officiating crew assigned to each NBA game — the three referees who worked the matchup.
▸Fields4
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.
player_news
nba.player_newsNews about NBA players — trades, injuries, lineup decisions, suspensions, and general beat-reporter updates.
▸Fields16
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| external_id | stringnullable | — | — e.g. rotoql-14973 |
| player_id | bigintnullable | — e.g. 165 | |
| team_id | bigintnullable | — e.g. 16 | |
| ai_processed | boolean | — | — e.g. false |
| analysis | stringnullable | — | — e.g. Barton had to be helped back to the locker room during the … |
| author | stringnullable | — | — e.g. — (all-null in sample) |
| category | stringnullable | — | injury, transaction, lineup, general e.g. — (all-null in sample) |
| content | stringnullable | — | — e.g. — (all-null in sample) |
| description | stringnullable | — | — e.g. Murray was assigned Sunday to the D-League's Austin Spurs. |
| link | stringnullable | — | — e.g. — (all-null in sample) |
| news_time | timestamptz | — | — e.g. 2016-11-27T19:29:13.000Z |
| priority | integer | — | — e.g. 3 |
| situational_impact | jsonbnullable | — | — e.g. — (all-null in sample) |
| source | stringnullable | — | — e.g. rotowire |
| title | string | — | — e.g. Assigned to D-League |
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.
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 200.
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 \
-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/jsonGET/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 \
-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.
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.
▸Fields20
| 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_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 200.
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 \
-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/jsonGET/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 \
-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.