MLB API Reference
Every MLB game from spring training through the World Series — the 162-game regular season, the postseason bracket, plus the players, ballparks, umpires, weather, Statcast metrics, and pitch-by-pitch detail.
Main
seasons
mlb.seasonsEach MLB season — spring training, the 162-game regular season, the Wild Card Series, the Division Series, the League Championship Series, and the World Series.
GET/api/v1/mlb/seasonsList seasons for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/seasons?limit=3'Responses
200seasons rows matching the declared filter set, wrapped in { seasons, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(7 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official MLB season identifier e.g. — (all-null in sample) |
end_date | timestamptznullable | — | — e.g. 2018-10-28T04:00:00.000Z |
post_season_start_date | timestamptznullable | — | — e.g. 2018-10-02T04:00:00.000Z |
regular_season_start_date | timestamptznullable | — | — e.g. 2018-03-29T04:00:00.000Z |
start_date | timestamptz | — | — e.g. 2018-02-21T05:00:00.000Z |
start_year | integer | — | — e.g. 2018 |
GET/api/v1/mlb/seasons/{id}Get a single season by id
Parameters
idpathbigintrequiredPrimary key (id) of the season row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/seasons/{pk_value}'Responses
200Single season row.application/jsonshow example ▸
404Row not found.
Response Schema(7 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official MLB season identifier e.g. — (all-null in sample) |
end_date | timestamptznullable | — | — e.g. 2018-10-28T04:00:00.000Z |
post_season_start_date | timestamptznullable | — | — e.g. 2018-10-02T04:00:00.000Z |
regular_season_start_date | timestamptznullable | — | — e.g. 2018-03-29T04:00:00.000Z |
start_date | timestamptz | — | — e.g. 2018-02-21T05:00:00.000Z |
start_year | integer | — | — e.g. 2018 |
teams
mlb.teamsThe 30 MLB franchises, organized into the American and National Leagues with three divisions in each.
GET/api/v1/mlb/teamsList teams for MLB
Parameters
activequerybooleanoptionalFilter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/teams?limit=3'Responses
200teams rows matching the declared filter set, wrapped in { teams, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_team_id | integernullable | — | Official MLB team ID from statsapi.mlb.com e.g. 108 |
venue_id | bigintnullable | — e.g. 2 | |
abbreviation | string | — | — e.g. LAA |
active | boolean | — | — e.g. true |
city | string | — | — e.g. Los Angeles |
division | string | — | — Values:WestEastCentral |
full_name | string | — | — e.g. Los Angeles Angels |
league | string | — | — Values:American LeagueNational League |
logo_url | stringnullable | — | URL to team logo image e.g. — (all-null in sample) |
name | string | — | — e.g. Angels |
GET/api/v1/mlb/teams/{id}Get a single team by id
Parameters
idpathbigintrequiredPrimary key (id) of the team row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/teams/{pk_value}'Responses
200Single team row.application/jsonshow example ▸
404Row not found.
Response Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_team_id | integernullable | — | Official MLB team ID from statsapi.mlb.com e.g. 108 |
venue_id | bigintnullable | — e.g. 2 | |
abbreviation | string | — | — e.g. LAA |
active | boolean | — | — e.g. true |
city | string | — | — e.g. Los Angeles |
division | string | — | — Values:WestEastCentral |
full_name | string | — | — e.g. Los Angeles Angels |
league | string | — | — Values:American LeagueNational League |
logo_url | stringnullable | — | URL to team logo image e.g. — (all-null in sample) |
name | string | — | — e.g. Angels |
players
mlb.playersEvery individual who has played in Major League Baseball — current 26-man and 40-man rosters, minor-league call-ups, players on the injured list, free agents, and retired players.
GET/api/v1/mlb/playersList players for MLB
Requires one of:
team_id or roster_status — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter to players whose current team_id matches. Null team_id rows (free agents, retired) are excluded when this filter is applied.
roster_statusquerystringoptionalFilter by canonical roster status. The "on a team now" set is {active, injured_reserve, non_roster} (active 26-man, injured list, and 40-man-but-optioned); free_agent/retired/inactive are off-roster. Values: active, injured_reserve, non_roster, free_agent, retired, inactive.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/players?team_id=1'Responses
200players rows matching the declared filter set, wrapped in { players, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(29 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official MLB player identifier e.g. — (all-null in sample) |
league_player_id | integer | — | Official MLB player ID from statsapi.mlb.com e.g. 613534 |
team_id | bigintnullable | — e.g. 16 | |
bats | stringnullable | — | — Values:RLS |
birth_city | stringnullable | — | — e.g. Santo Domingo |
birth_country | stringnullable | — | — e.g. USA |
birth_date | datenullable | — | — e.g. 1994-07-14 |
birth_state | stringnullable | — | — e.g. CA |
debut_date | timestamptznullable | — | — e.g. 2023-03-30T00:00:00.000Z |
display_fi_last | stringnullable | — | — e.g. J. Rodríguez |
display_last_comma_first | stringnullable | — | — e.g. Davis, Jonathan |
draft_number | stringnullable | — | — e.g. — (all-null in sample) |
draft_round | stringnullable | — | — e.g. — (all-null in sample) |
draft_year | stringnullable | — | — e.g. 2019 |
first_name | string | — | — e.g. Ryan |
full_name | string | — | — e.g. Luis Ortiz |
full_position_list | stringnullable | — | — Values:PitcherOutfielderCatcherSecond BaseThird BaseFirst BaseShortstopOutfieldDesignated HitterInfieldTwo-Way Player |
height | integernullable | — | — e.g. 74 |
jersey | stringnullable | — | — e.g. 52 |
last_name | string | — | — e.g. Rodriguez |
league_slug | stringnullable | — | — e.g. austin-adams-613534 |
position_category | stringnullable | — | — Values:PitcherInfielderOutfielderCatcherUtility |
primary_position | string | — | — e.g. P |
profile_pic_url | stringnullable | — | URL to player profile picture image e.g. — (all-null in sample) |
roster_status | stringnullable | — | Canonical roster status, shared across leagues. Derived from team_player_rosters: "active" (26-man), "non_roster" (on the 40-man but optioned), "injured_reserve" (IL); "inactive"/"free_agent" off-roster. The "on a team now" set is {active, injured_reserve, non_roster}. Values:inactiveactivenon_rosterinjured_reserve |
school | stringnullable | — | — e.g. — (all-null in sample) |
throws | stringnullable | — | — Values:RLS |
weight | integernullable | — | — e.g. 215 |
GET/api/v1/mlb/players/{id}Get a single player by id
Parameters
idpathbigintrequiredPrimary key (id) of the player row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/players/{pk_value}'Responses
200Single player row.application/jsonshow example ▸
404Row not found.
Response Schema(29 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official MLB player identifier e.g. — (all-null in sample) |
league_player_id | integer | — | Official MLB player ID from statsapi.mlb.com e.g. 613534 |
team_id | bigintnullable | — e.g. 16 | |
bats | stringnullable | — | — Values:RLS |
birth_city | stringnullable | — | — e.g. Santo Domingo |
birth_country | stringnullable | — | — e.g. USA |
birth_date | datenullable | — | — e.g. 1994-07-14 |
birth_state | stringnullable | — | — e.g. CA |
debut_date | timestamptznullable | — | — e.g. 2023-03-30T00:00:00.000Z |
display_fi_last | stringnullable | — | — e.g. J. Rodríguez |
display_last_comma_first | stringnullable | — | — e.g. Davis, Jonathan |
draft_number | stringnullable | — | — e.g. — (all-null in sample) |
draft_round | stringnullable | — | — e.g. — (all-null in sample) |
draft_year | stringnullable | — | — e.g. 2019 |
first_name | string | — | — e.g. Ryan |
full_name | string | — | — e.g. Luis Ortiz |
full_position_list | stringnullable | — | — Values:PitcherOutfielderCatcherSecond BaseThird BaseFirst BaseShortstopOutfieldDesignated HitterInfieldTwo-Way Player |
height | integernullable | — | — e.g. 74 |
jersey | stringnullable | — | — e.g. 52 |
last_name | string | — | — e.g. Rodriguez |
league_slug | stringnullable | — | — e.g. austin-adams-613534 |
position_category | stringnullable | — | — Values:PitcherInfielderOutfielderCatcherUtility |
primary_position | string | — | — e.g. P |
profile_pic_url | stringnullable | — | URL to player profile picture image e.g. — (all-null in sample) |
roster_status | stringnullable | — | Canonical roster status, shared across leagues. Derived from team_player_rosters: "active" (26-man), "non_roster" (on the 40-man but optioned), "injured_reserve" (IL); "inactive"/"free_agent" off-roster. The "on a team now" set is {active, injured_reserve, non_roster}. Values:inactiveactivenon_rosterinjured_reserve |
school | stringnullable | — | — e.g. — (all-null in sample) |
throws | stringnullable | — | — Values:RLS |
weight | integernullable | — | — e.g. 215 |
games
mlb.gamesEvery scheduled and played MLB game — spring training exhibitions, the 162-game regular season, the Wild Card Series, the Division and Championship Series, and the World Series.
GET/api/v1/mlb/gamesList games for MLB
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.
dayqueryintegeroptionalFilter by calendar day (YYYYMMDD integer, US Eastern) — e.g. day=20260609 for today's slate. season_id defaults to the current season; pass it explicitly for past-season days. Range syntax: day__gte=, day__lte=, day__between=.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/jsonResponse Schema(31 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 38 | |
home_team_id | bigint | — e.g. 33 | |
league_game_id | integernullable | — | Official MLB gamePk from statsapi.mlb.com e.g. 745080 |
league_id | stringnullable | — | Official MLB game identifier e.g. — (all-null in sample) |
losing_pitcher_id | bigintnullable | Losing pitcher of record e.g. 1177 | |
save_pitcher_id | bigintnullable | Save pitcher (if any) e.g. 1415 | |
season_id | bigint | — e.g. 2025 | |
venue_id | bigintnullable | — e.g. 16 | |
winning_pitcher_id | bigintnullable | Winning pitcher of record e.g. 272 | |
attendance | integernullable | — | — e.g. — (all-null in sample) |
away_team_score | integer | — | — e.g. 3 |
channel | stringnullable | — | — e.g. MLBN (out-of-market only) |
day | integer | — | — e.g. 20180317 |
day_night | stringnullable | — | D=Day, N=Night e.g. — (all-null in sample) |
doubleheader | boolean | — | — Values:falsetrue |
duration_minutes | integernullable | — | Total game duration in minutes e.g. — (all-null in sample) |
end_time | timestamptznullable | — | — e.g. — (all-null in sample) |
game_label | stringnullable | — | — e.g. Regular Season Game 1 |
game_number | integer | — | For doubleheaders: 1 or 2 e.g. 1 |
game_time | timestamptz | — | Canonical game start time. The ONLY one on any games table — nba and nfl carried a duplicate `start_time` until 2026-08-27 and nhl carried `date_time` and `date_time_utc`; all four sports now expose `game_time` alone. e.g. 2018-03-17T17:05:00.000Z |
game_type | string | — | R=Regular, S=Spring, F=Wild Card, D=Division, L=League, W=World Series, E=Exhibition, A=All-Star Values:RSDFLW |
home_team_score | integer | — | — e.g. 4 |
if_necessary | booleannullable | — | — e.g. false |
neutral_venue | boolean | — | — e.g. false |
postponed_status | stringnullable | — | — e.g. — (all-null in sample) |
season_type | string | — | Canonical season phase. Postseason round detail (Wild Card/Division/LCS/World Series) is in the league-native `game_type` code. Values:regular_seasonspring_trainingpostseason |
series_game_number | stringnullable | — | — e.g. 1 |
series_name | stringnullable | — | — Values:Regular SeasonSpring TrainingNL Division SeriesAL Division SeriesAL Championship SeriesWorld SeriesAL Wild Card SeriesNL Wild Card SeriesNL Championship Series |
series_text | stringnullable | — | — Values:1-02-12-01-13-03-12-24-00-03-23-34-34-15-04-2 |
status | string | — | Final, Live, Scheduled, Postponed, Suspended, Cancelled Values:FinalCompleted EarlyCancelled |
GET/api/v1/mlb/games/{id}Get a single game by id
Parameters
idpathbigintrequiredPrimary key (id) of the game row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/games/{pk_value}'Responses
200Single game row.application/jsonshow example ▸
404Row not found.
Response Schema(31 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 38 | |
home_team_id | bigint | — e.g. 33 | |
league_game_id | integernullable | — | Official MLB gamePk from statsapi.mlb.com e.g. 745080 |
league_id | stringnullable | — | Official MLB game identifier e.g. — (all-null in sample) |
losing_pitcher_id | bigintnullable | Losing pitcher of record e.g. 1177 | |
save_pitcher_id | bigintnullable | Save pitcher (if any) e.g. 1415 | |
season_id | bigint | — e.g. 2025 | |
venue_id | bigintnullable | — e.g. 16 | |
winning_pitcher_id | bigintnullable | Winning pitcher of record e.g. 272 | |
attendance | integernullable | — | — e.g. — (all-null in sample) |
away_team_score | integer | — | — e.g. 3 |
channel | stringnullable | — | — e.g. MLBN (out-of-market only) |
day | integer | — | — e.g. 20180317 |
day_night | stringnullable | — | D=Day, N=Night e.g. — (all-null in sample) |
doubleheader | boolean | — | — Values:falsetrue |
duration_minutes | integernullable | — | Total game duration in minutes e.g. — (all-null in sample) |
end_time | timestamptznullable | — | — e.g. — (all-null in sample) |
game_label | stringnullable | — | — e.g. Regular Season Game 1 |
game_number | integer | — | For doubleheaders: 1 or 2 e.g. 1 |
game_time | timestamptz | — | Canonical game start time. The ONLY one on any games table — nba and nfl carried a duplicate `start_time` until 2026-08-27 and nhl carried `date_time` and `date_time_utc`; all four sports now expose `game_time` alone. e.g. 2018-03-17T17:05:00.000Z |
game_type | string | — | R=Regular, S=Spring, F=Wild Card, D=Division, L=League, W=World Series, E=Exhibition, A=All-Star Values:RSDFLW |
home_team_score | integer | — | — e.g. 4 |
if_necessary | booleannullable | — | — e.g. false |
neutral_venue | boolean | — | — e.g. false |
postponed_status | stringnullable | — | — e.g. — (all-null in sample) |
season_type | string | — | Canonical season phase. Postseason round detail (Wild Card/Division/LCS/World Series) is in the league-native `game_type` code. Values:regular_seasonspring_trainingpostseason |
series_game_number | stringnullable | — | — e.g. 1 |
series_name | stringnullable | — | — Values:Regular SeasonSpring TrainingNL Division SeriesAL Division SeriesAL Championship SeriesWorld SeriesAL Wild Card SeriesNL Wild Card SeriesNL Championship Series |
series_text | stringnullable | — | — Values:1-02-12-01-13-03-12-24-00-03-23-34-34-15-04-2 |
status | string | — | Final, Live, Scheduled, Postponed, Suspended, Cancelled Values:FinalCompleted EarlyCancelled |
Plays
innings
mlb.inningsEach half-inning of every MLB game — runs scored, hits, errors, base traffic, plate appearances, who pitched, and how the offense ended each frame.
GET/api/v1/mlb/inningsList innings for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/innings?game_id=1'Responses
200innings rows matching the declared filter set, wrapped in { innings, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(10 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 357 | |
away_team_errors | integer | — | — e.g. 0 |
away_team_hits | integer | — | — e.g. 0 |
away_team_runs | integer | — | — e.g. 0 |
home_team_errors | integer | — | — e.g. 0 |
home_team_hits | integer | — | — e.g. 0 |
home_team_runs | integer | — | — e.g. 0 |
inning_half | string | — | — Values:TOPBOTTOM |
inning_number | integer | — | — e.g. 1 |
GET/api/v1/mlb/innings/{id}Get a single inning by id
Parameters
idpathbigintrequiredPrimary key (id) of the inning row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/innings/{pk_value}'Responses
200Single inning row.application/jsonshow example ▸
404Row not found.
Response Schema(10 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 357 | |
away_team_errors | integer | — | — e.g. 0 |
away_team_hits | integer | — | — e.g. 0 |
away_team_runs | integer | — | — e.g. 0 |
home_team_errors | integer | — | — e.g. 0 |
home_team_hits | integer | — | — e.g. 0 |
home_team_runs | integer | — | — e.g. 0 |
inning_half | string | — | — Values:TOPBOTTOM |
inning_number | integer | — | — e.g. 1 |
at_bats
mlb.at_batsEvery plate appearance in every MLB game — the batter, the pitcher, the count, the pitch sequence, and the outcome (single, double, home run, strikeout, walk, hit-by-pitch, etc.).
GET/api/v1/mlb/at_batsList at_bats for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/at_bats?game_id=1'Responses
200at_bats rows matching the declared filter set, wrapped in { at_bats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(39 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
batter_id | bigint | — e.g. 996 | |
game_id | bigint | — e.g. 69 | |
inning_id | bigint | — e.g. 908 | |
pitcher_id | bigint | — e.g. 174 | |
at_bat_number | integer | — | — e.g. 0 |
balls | integer | — | — e.g. 0 |
bat_side | stringnullable | — | Batter side for this matchup (L/R) — per-PA truth, resolves switch hitters (statsapi matchup.batSide.code) e.g. — (all-null in sample) |
end_outs | integer | — | — e.g. 2 |
end_runners | integer | — | — e.g. 0 |
end_time | timestamptznullable | — | Wall-clock end of the plate appearance (statsapi about.endTime) e.g. — (all-null in sample) |
expected_batting_avg | decimalnullable | — | — e.g. 0.0050 |
expected_woba | decimalnullable | — | — e.g. 0.0000 |
hit_coord_x | floatnullable | — | — e.g. 104.05 |
hit_coord_y | floatnullable | — | — e.g. 149.88 |
hit_distance | integernullable | — | — e.g. 4 |
hit_exit_velocity | floatnullable | — | — e.g. 98.4 |
hit_launch_angle | floatnullable | — | — e.g. 5 |
hit_location | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
hit_type | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
is_barrel | booleannullable | — | — Values:falsetrue |
is_flare_burner | booleannullable | — | Launch angle 10-25 AND exit velocity < 95 Values:falsetrue |
is_hard_hit | booleannullable | — | — Values:falsetrue |
is_solid_contact | booleannullable | — | Launch angle 20-25 AND exit velocity 95-100 Values:falsetrue |
is_sweet_spot | booleannullable | — | Launch angle between 8-32 degrees Values:falsetrue |
is_topped | booleannullable | — | Launch angle < 10 AND exit velocity < 90 Values:falsetrue |
is_under | booleannullable | — | Launch angle less than 10 degrees Values:falsetrue |
launch_speed_angle_zone | integernullable | — | — e.g. 3 |
pitch_count | integer | — | — e.g. 4 |
pitch_hand | stringnullable | — | Pitcher hand for this matchup (L/R) (statsapi matchup.pitchHand.code) e.g. — (all-null in sample) |
result | string | — | — e.g. Strikeout |
runs_scored | integer | — | — e.g. 0 |
spray_angle | floatnullable | — | Horizontal angle from center field (degrees) e.g. -6 |
start_outs | integer | — | — e.g. 1 |
start_runners | integer | — | — e.g. 0 |
start_time | timestamptznullable | — | Wall-clock start of the plate appearance (statsapi about.startTime) e.g. — (all-null in sample) |
statcast_quality_score | decimalnullable | — | Statcast data quality score (0.0-1.0) e.g. 1.0000 |
strikes | integer | — | — e.g. 2 |
tracking_confidence | decimalnullable | — | Confidence in tracking data accuracy e.g. — (all-null in sample) |
GET/api/v1/mlb/at_bats/{id}Get a single at_bat by id
Parameters
idpathbigintrequiredPrimary key (id) of the at_bat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/at_bats/{pk_value}'Responses
200Single at_bat row.application/jsonshow example ▸
404Row not found.
Response Schema(39 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
batter_id | bigint | — e.g. 996 | |
game_id | bigint | — e.g. 69 | |
inning_id | bigint | — e.g. 908 | |
pitcher_id | bigint | — e.g. 174 | |
at_bat_number | integer | — | — e.g. 0 |
balls | integer | — | — e.g. 0 |
bat_side | stringnullable | — | Batter side for this matchup (L/R) — per-PA truth, resolves switch hitters (statsapi matchup.batSide.code) e.g. — (all-null in sample) |
end_outs | integer | — | — e.g. 2 |
end_runners | integer | — | — e.g. 0 |
end_time | timestamptznullable | — | Wall-clock end of the plate appearance (statsapi about.endTime) e.g. — (all-null in sample) |
expected_batting_avg | decimalnullable | — | — e.g. 0.0050 |
expected_woba | decimalnullable | — | — e.g. 0.0000 |
hit_coord_x | floatnullable | — | — e.g. 104.05 |
hit_coord_y | floatnullable | — | — e.g. 149.88 |
hit_distance | integernullable | — | — e.g. 4 |
hit_exit_velocity | floatnullable | — | — e.g. 98.4 |
hit_launch_angle | floatnullable | — | — e.g. 5 |
hit_location | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
hit_type | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
is_barrel | booleannullable | — | — Values:falsetrue |
is_flare_burner | booleannullable | — | Launch angle 10-25 AND exit velocity < 95 Values:falsetrue |
is_hard_hit | booleannullable | — | — Values:falsetrue |
is_solid_contact | booleannullable | — | Launch angle 20-25 AND exit velocity 95-100 Values:falsetrue |
is_sweet_spot | booleannullable | — | Launch angle between 8-32 degrees Values:falsetrue |
is_topped | booleannullable | — | Launch angle < 10 AND exit velocity < 90 Values:falsetrue |
is_under | booleannullable | — | Launch angle less than 10 degrees Values:falsetrue |
launch_speed_angle_zone | integernullable | — | — e.g. 3 |
pitch_count | integer | — | — e.g. 4 |
pitch_hand | stringnullable | — | Pitcher hand for this matchup (L/R) (statsapi matchup.pitchHand.code) e.g. — (all-null in sample) |
result | string | — | — e.g. Strikeout |
runs_scored | integer | — | — e.g. 0 |
spray_angle | floatnullable | — | Horizontal angle from center field (degrees) e.g. -6 |
start_outs | integer | — | — e.g. 1 |
start_runners | integer | — | — e.g. 0 |
start_time | timestamptznullable | — | Wall-clock start of the plate appearance (statsapi about.startTime) e.g. — (all-null in sample) |
statcast_quality_score | decimalnullable | — | Statcast data quality score (0.0-1.0) e.g. 1.0000 |
strikes | integer | — | — e.g. 2 |
tracking_confidence | decimalnullable | — | Confidence in tracking data accuracy e.g. — (all-null in sample) |
pitches
mlb.pitchesEvery individual pitch thrown in every MLB game — the pitch type, velocity, location, movement, spin, and the result (called strike, swinging strike, foul, ball, hit, walk).
GET/api/v1/mlb/pitchesList pitches for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/pitches?game_id=1'Responses
200pitches rows matching the declared filter set, wrapped in { pitches, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(73 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
at_bat_id | bigint | — e.g. 1494 | |
batter_id | bigint | — e.g. 306 | |
game_id | bigint | — e.g. 84 | |
pitcher_id | bigint | — e.g. 267 | |
play_id | bigint | — | — e.g. 12 |
air_out | boolean | — | Whether this pitch resulted in an air out e.g. false |
ball | boolean | — | — Values:falsetrue |
barrel | booleannullable | — | Optimal combination of exit velocity and launch angle Values:falsetrue |
break_angle | floatnullable | — | — e.g. 1.2 |
break_length | floatnullable | — | — e.g. 3.6 |
break_y | floatnullable | — | — e.g. 24 |
breaking_ball | booleannullable | — | Breaking ball (curveball, slider, knuckleball) Values:falsetrue |
call | string | — | — Values:BallFoulCalled StrikeIn play, out(s)Swinging StrikeIn play, no outIn play, run(s)Ball In DirtFoul TipSwinging Strike (Blocke…Hit By PitchFoul BuntPitchoutMissed Bunt |
catchers_interference | boolean | — | Whether this pitch resulted in catchers interference e.g. false |
chase | booleannullable | — | Whether batter swung at pitch outside zone e.g. true |
double | boolean | — | Whether this pitch resulted in a double Values:falsetrue |
effective_speed | floatnullable | — | Perceived speed to batter (mph) e.g. 85.3 |
expected_batting_avg | decimalnullable | — | xBA based on exit velocity and launch angle e.g. — (all-null in sample) |
expected_woba | decimalnullable | — | xwOBA based on exit velocity and launch angle e.g. — (all-null in sample) |
extension | floatnullable | — | — e.g. 7.015639833312882 |
fastball | booleannullable | — | Fastball variant (4-seam, 2-seam, sinker, cutter) Values:truefalse |
flare_burner | booleannullable | — | Launch angle 10-25 AND exit velocity < 95 Values:falsetrue |
fly_out | boolean | — | Whether this pitch resulted in a fly out Values:falsetrue |
ground_into_double_play | boolean | — | Whether this pitch resulted in grounding into double play e.g. false |
ground_into_triple_play | boolean | — | Whether this pitch resulted in grounding into triple play e.g. false |
ground_out | boolean | — | Whether this pitch resulted in a ground out Values:falsetrue |
hard_hit | booleannullable | — | Exit velocity >= 95 MPH Values:falsetrue |
hit_by_pitch | boolean | — | Whether this pitch resulted in hit by pitch Values:falsetrue |
hit_coord_x | floatnullable | — | Hit coordinate X (feet from home plate) e.g. 153.39 |
hit_coord_y | floatnullable | — | Hit coordinate Y (feet from home plate) e.g. 167.3 |
hit_distance | integernullable | — | Distance of batted ball (feet) e.g. 4 |
hit_exit_velocity | floatnullable | — | Exit velocity of batted ball (mph) e.g. 103.4 |
hit_launch_angle | floatnullable | — | Launch angle of batted ball (degrees) e.g. 5 |
home_run | boolean | — | Whether this pitch resulted in a home run Values:falsetrue |
in_play | boolean | — | — Values:falsetrue |
in_strike_zone | booleannullable | — | Whether pitch was in the strike zone Values:falsetrue |
intentional_walk | boolean | — | Whether this pitch resulted in an intentional walk e.g. false |
launch_speed_angle_zone | integernullable | — | 1=Weak, 2=Topped, 3=Under, 4=Flare/Burner, 5=Solid, 6=Barrel e.g. 3 |
line_out | boolean | — | Whether this pitch resulted in a line out Values:falsetrue |
offspeed | booleannullable | — | Offspeed pitch (changeup, splitter, forkball) Values:falsetrue |
pitch_number | integer | — | — e.g. 1 |
pitch_speed | floatnullable | — | — e.g. 92.6 |
pitch_type | stringnullable | — | — Values:FFSISLCHFCSTCUFSKCSVFA |
pitch_x | floatnullable | — | — e.g. 0.36271081581727094 |
pitch_y | floatnullable | — | — e.g. 155.85 |
pitch_z | floatnullable | — | — e.g. 3.5469804155056193 |
pitch_zone | integernullable | — | — e.g. 14 |
plate_x | floatnullable | — | — e.g. 125.18 |
plate_z | floatnullable | — | — e.g. 155.85 |
pop_out | boolean | — | Whether this pitch resulted in a pop out Values:falsetrue |
release_speed | floatnullable | — | Speed at release point (mph) e.g. 92.6 |
result | string | — | — Values:BallFoulCalled StrikeIn play, out(s)Swinging StrikeIn play, no outIn play, run(s)Ball In DirtFoul TipSwinging Strike (Blocke…Hit By PitchFoul BuntPitchoutMissed Bunt |
sacrifice_fly | boolean | — | Whether this pitch resulted in a sacrifice fly Values:falsetrue |
sacrifice_hit | boolean | — | Whether this pitch resulted in a sacrifice bunt Values:falsetrue |
single | boolean | — | Whether this pitch resulted in a single Values:falsetrue |
solid_contact | booleannullable | — | Launch angle 20-25 AND exit velocity 95-100 Values:falsetrue |
spin_axis | floatnullable | — | Spin axis (degrees) e.g. — (all-null in sample) |
spin_direction | floatnullable | — | — e.g. 211 |
spin_rate | floatnullable | — | — e.g. 2190 |
spray_angle | floatnullable | — | Horizontal angle from center field (degrees) e.g. -6.1 |
start_time | timestamptznullable | — | Wall-clock time of the pitch (statsapi playEvents startTime) e.g. — (all-null in sample) |
statcast_quality_score | decimalnullable | — | Statcast data quality score (0.0-1.0) e.g. — (all-null in sample) |
strike | boolean | — | — Values:falsetrue |
strike_zone_bottom | floatnullable | — | — e.g. 1.63 |
strike_zone_top | floatnullable | — | — e.g. 3.51 |
strikeout | boolean | — | Whether this pitch resulted in a strikeout Values:falsetrue |
sweet_spot | booleannullable | — | Launch angle between 8-32 degrees Values:falsetrue |
topped | booleannullable | — | Launch angle < 10 AND exit velocity < 90 Values:falsetrue |
tracking_confidence | decimalnullable | — | Confidence in tracking data accuracy e.g. — (all-null in sample) |
triple | boolean | — | Whether this pitch resulted in a triple Values:falsetrue |
under | booleannullable | — | Launch angle less than 10 degrees Values:falsetrue |
walk | boolean | — | Whether this pitch resulted in a walk Values:falsetrue |
GET/api/v1/mlb/pitches/{id}Get a single pitche by id
Parameters
idpathbigintrequiredPrimary key (id) of the pitche row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/pitches/{pk_value}'Responses
200Single pitche row.application/jsonshow example ▸
404Row not found.
Response Schema(73 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
at_bat_id | bigint | — e.g. 1494 | |
batter_id | bigint | — e.g. 306 | |
game_id | bigint | — e.g. 84 | |
pitcher_id | bigint | — e.g. 267 | |
play_id | bigint | — | — e.g. 12 |
air_out | boolean | — | Whether this pitch resulted in an air out e.g. false |
ball | boolean | — | — Values:falsetrue |
barrel | booleannullable | — | Optimal combination of exit velocity and launch angle Values:falsetrue |
break_angle | floatnullable | — | — e.g. 1.2 |
break_length | floatnullable | — | — e.g. 3.6 |
break_y | floatnullable | — | — e.g. 24 |
breaking_ball | booleannullable | — | Breaking ball (curveball, slider, knuckleball) Values:falsetrue |
call | string | — | — Values:BallFoulCalled StrikeIn play, out(s)Swinging StrikeIn play, no outIn play, run(s)Ball In DirtFoul TipSwinging Strike (Blocke…Hit By PitchFoul BuntPitchoutMissed Bunt |
catchers_interference | boolean | — | Whether this pitch resulted in catchers interference e.g. false |
chase | booleannullable | — | Whether batter swung at pitch outside zone e.g. true |
double | boolean | — | Whether this pitch resulted in a double Values:falsetrue |
effective_speed | floatnullable | — | Perceived speed to batter (mph) e.g. 85.3 |
expected_batting_avg | decimalnullable | — | xBA based on exit velocity and launch angle e.g. — (all-null in sample) |
expected_woba | decimalnullable | — | xwOBA based on exit velocity and launch angle e.g. — (all-null in sample) |
extension | floatnullable | — | — e.g. 7.015639833312882 |
fastball | booleannullable | — | Fastball variant (4-seam, 2-seam, sinker, cutter) Values:truefalse |
flare_burner | booleannullable | — | Launch angle 10-25 AND exit velocity < 95 Values:falsetrue |
fly_out | boolean | — | Whether this pitch resulted in a fly out Values:falsetrue |
ground_into_double_play | boolean | — | Whether this pitch resulted in grounding into double play e.g. false |
ground_into_triple_play | boolean | — | Whether this pitch resulted in grounding into triple play e.g. false |
ground_out | boolean | — | Whether this pitch resulted in a ground out Values:falsetrue |
hard_hit | booleannullable | — | Exit velocity >= 95 MPH Values:falsetrue |
hit_by_pitch | boolean | — | Whether this pitch resulted in hit by pitch Values:falsetrue |
hit_coord_x | floatnullable | — | Hit coordinate X (feet from home plate) e.g. 153.39 |
hit_coord_y | floatnullable | — | Hit coordinate Y (feet from home plate) e.g. 167.3 |
hit_distance | integernullable | — | Distance of batted ball (feet) e.g. 4 |
hit_exit_velocity | floatnullable | — | Exit velocity of batted ball (mph) e.g. 103.4 |
hit_launch_angle | floatnullable | — | Launch angle of batted ball (degrees) e.g. 5 |
home_run | boolean | — | Whether this pitch resulted in a home run Values:falsetrue |
in_play | boolean | — | — Values:falsetrue |
in_strike_zone | booleannullable | — | Whether pitch was in the strike zone Values:falsetrue |
intentional_walk | boolean | — | Whether this pitch resulted in an intentional walk e.g. false |
launch_speed_angle_zone | integernullable | — | 1=Weak, 2=Topped, 3=Under, 4=Flare/Burner, 5=Solid, 6=Barrel e.g. 3 |
line_out | boolean | — | Whether this pitch resulted in a line out Values:falsetrue |
offspeed | booleannullable | — | Offspeed pitch (changeup, splitter, forkball) Values:falsetrue |
pitch_number | integer | — | — e.g. 1 |
pitch_speed | floatnullable | — | — e.g. 92.6 |
pitch_type | stringnullable | — | — Values:FFSISLCHFCSTCUFSKCSVFA |
pitch_x | floatnullable | — | — e.g. 0.36271081581727094 |
pitch_y | floatnullable | — | — e.g. 155.85 |
pitch_z | floatnullable | — | — e.g. 3.5469804155056193 |
pitch_zone | integernullable | — | — e.g. 14 |
plate_x | floatnullable | — | — e.g. 125.18 |
plate_z | floatnullable | — | — e.g. 155.85 |
pop_out | boolean | — | Whether this pitch resulted in a pop out Values:falsetrue |
release_speed | floatnullable | — | Speed at release point (mph) e.g. 92.6 |
result | string | — | — Values:BallFoulCalled StrikeIn play, out(s)Swinging StrikeIn play, no outIn play, run(s)Ball In DirtFoul TipSwinging Strike (Blocke…Hit By PitchFoul BuntPitchoutMissed Bunt |
sacrifice_fly | boolean | — | Whether this pitch resulted in a sacrifice fly Values:falsetrue |
sacrifice_hit | boolean | — | Whether this pitch resulted in a sacrifice bunt Values:falsetrue |
single | boolean | — | Whether this pitch resulted in a single Values:falsetrue |
solid_contact | booleannullable | — | Launch angle 20-25 AND exit velocity 95-100 Values:falsetrue |
spin_axis | floatnullable | — | Spin axis (degrees) e.g. — (all-null in sample) |
spin_direction | floatnullable | — | — e.g. 211 |
spin_rate | floatnullable | — | — e.g. 2190 |
spray_angle | floatnullable | — | Horizontal angle from center field (degrees) e.g. -6.1 |
start_time | timestamptznullable | — | Wall-clock time of the pitch (statsapi playEvents startTime) e.g. — (all-null in sample) |
statcast_quality_score | decimalnullable | — | Statcast data quality score (0.0-1.0) e.g. — (all-null in sample) |
strike | boolean | — | — Values:falsetrue |
strike_zone_bottom | floatnullable | — | — e.g. 1.63 |
strike_zone_top | floatnullable | — | — e.g. 3.51 |
strikeout | boolean | — | Whether this pitch resulted in a strikeout Values:falsetrue |
sweet_spot | booleannullable | — | Launch angle between 8-32 degrees Values:falsetrue |
topped | booleannullable | — | Launch angle < 10 AND exit velocity < 90 Values:falsetrue |
tracking_confidence | decimalnullable | — | Confidence in tracking data accuracy e.g. — (all-null in sample) |
triple | boolean | — | Whether this pitch resulted in a triple Values:falsetrue |
under | booleannullable | — | Launch angle less than 10 degrees Values:falsetrue |
walk | boolean | — | Whether this pitch resulted in a walk Values:falsetrue |
play_by_plays
mlb.play_by_playsEvery individual play of every MLB game — every plate appearance, baserunning event, defensive play, and substitution with the inning, outs, base state, and score at the moment.
GET/api/v1/mlb/play_by_playsList play_by_plays for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/play_by_plays?game_id=1'Responses
200play_by_plays rows matching the declared filter set, wrapped in { play_by_plays, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(26 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
at_bat_id | bigintnullable | — e.g. 1 | |
batter_id | bigintnullable | — e.g. 996 | |
catcher_id | bigintnullable | — e.g. — (all-null in sample) | |
first_base_runner_id | bigintnullable | — e.g. 996 | |
game_id | bigint | — e.g. 69 | |
inning_id | bigint | — e.g. 908 | |
pitcher_id | bigintnullable | — e.g. 174 | |
play_id | bigint | — | — e.g. 0 |
player_id | bigintnullable | — e.g. 996 | |
second_base_runner_id | bigintnullable | — e.g. 996 | |
team_id | bigint | — e.g. 19 | |
third_base_runner_id | bigintnullable | — e.g. 996 | |
away_score | integernullable | — | — e.g. — (all-null in sample) |
count_balls | integer | — | — e.g. 0 |
count_strikes | integer | — | — e.g. 2 |
end_time | timestamptznullable | — | Wall-clock end of the play (statsapi about.endTime) e.g. — (all-null in sample) |
event_sub_type | integer | — | — e.g. 0 |
event_type | integer | — | — e.g. 8 |
hit_location | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
hit_type | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
home_score | integernullable | — | — e.g. — (all-null in sample) |
mlb_event_num | integer | — | — e.g. 0 |
outs | integer | — | — e.g. 1 |
runners_on_base | integer | — | — e.g. 0 |
start_time | timestamptznullable | — | Wall-clock start of the play (statsapi about.startTime) e.g. — (all-null in sample) |
GET/api/v1/mlb/play_by_plays/{id}Get a single play_by_play by id
Parameters
idpathbigintrequiredPrimary key (id) of the play_by_play row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/play_by_plays/{pk_value}'Responses
200Single play_by_play row.application/jsonshow example ▸
404Row not found.
Response Schema(26 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
at_bat_id | bigintnullable | — e.g. 1 | |
batter_id | bigintnullable | — e.g. 996 | |
catcher_id | bigintnullable | — e.g. — (all-null in sample) | |
first_base_runner_id | bigintnullable | — e.g. 996 | |
game_id | bigint | — e.g. 69 | |
inning_id | bigint | — e.g. 908 | |
pitcher_id | bigintnullable | — e.g. 174 | |
play_id | bigint | — | — e.g. 0 |
player_id | bigintnullable | — e.g. 996 | |
second_base_runner_id | bigintnullable | — e.g. 996 | |
team_id | bigint | — e.g. 19 | |
third_base_runner_id | bigintnullable | — e.g. 996 | |
away_score | integernullable | — | — e.g. — (all-null in sample) |
count_balls | integer | — | — e.g. 0 |
count_strikes | integer | — | — e.g. 2 |
end_time | timestamptznullable | — | Wall-clock end of the play (statsapi about.endTime) e.g. — (all-null in sample) |
event_sub_type | integer | — | — e.g. 0 |
event_type | integer | — | — e.g. 8 |
hit_location | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
hit_type | stringnullable | — | — Values:ground_ballfly_ballline_drivepopupbunt_grounderbunt_popup |
home_score | integernullable | — | — e.g. — (all-null in sample) |
mlb_event_num | integer | — | — e.g. 0 |
outs | integer | — | — e.g. 1 |
runners_on_base | integer | — | — e.g. 0 |
start_time | timestamptznullable | — | Wall-clock start of the play (statsapi about.startTime) e.g. — (all-null in sample) |
Stats
season_team_stats
mlb.season_team_statsSeason totals for each MLB team — wins and losses, runs scored and allowed, batting and pitching aggregates, fielding stats, and advanced team metrics (BaseRuns, pythagorean expectation, run differential).
GET/api/v1/mlb/season_team_statsList season_team_stats for MLB
Requires one of:
season_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a season. Defaults to the current season.
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/jsonResponse Schema(36 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 16 | |
at_bats | integer | — | — e.g. 5522 |
batting_average | decimal | — | — e.g. 0.2440 |
blown_saves | integer | — | — e.g. 22 |
caught_stealing | integer | — | — e.g. 30 |
complete_games | integer | — | — e.g. 1 |
double_plays | integer | — | — e.g. 125 |
doubles | integer | — | — e.g. 245 |
earned_run_average | decimal | — | — e.g. 3.7400 |
earned_runs | integer | — | — e.g. 596 |
errors | integer | — | — e.g. 97 |
fielding_percentage | decimal | — | — e.g. 0.9840 |
games_played | integer | — | — e.g. 162 |
hits | integer | — | — e.g. 1423 |
holds | integer | — | — e.g. 83 |
home_runs | integer | — | — e.g. 190 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 1442.0000 |
losses | integer | — | — e.g. 84 |
on_base_percentage | decimal | — | — e.g. 0.3150 |
on_base_plus_slugging | decimal | — | — e.g. 0.7500 |
runs_allowed | integer | — | — e.g. 697 |
runs_batted_in | integer | — | — e.g. 670 |
runs_scored | integer | — | — e.g. 716 |
save_opportunities | integer | — | — e.g. 64 |
saves | integer | — | — e.g. 44 |
shutouts | integer | — | — e.g. 8 |
slugging_percentage | decimal | — | — e.g. 0.3970 |
stolen_bases | integer | — | — e.g. 88 |
strikeouts | integer | — | — e.g. 1461 |
ties | integer | — | — e.g. 0 |
triples | integer | — | — e.g. 18 |
walks | integer | — | — e.g. 478 |
whip | decimal | — | — e.g. 1.2400 |
wins | integer | — | — e.g. 90 |
GET/api/v1/mlb/season_team_stats/{id}Get a single season_team_stat by id
Parameters
idpathbigintrequiredPrimary key (id) of the season_team_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/season_team_stats/{pk_value}'Responses
200Single season_team_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(36 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 16 | |
at_bats | integer | — | — e.g. 5522 |
batting_average | decimal | — | — e.g. 0.2440 |
blown_saves | integer | — | — e.g. 22 |
caught_stealing | integer | — | — e.g. 30 |
complete_games | integer | — | — e.g. 1 |
double_plays | integer | — | — e.g. 125 |
doubles | integer | — | — e.g. 245 |
earned_run_average | decimal | — | — e.g. 3.7400 |
earned_runs | integer | — | — e.g. 596 |
errors | integer | — | — e.g. 97 |
fielding_percentage | decimal | — | — e.g. 0.9840 |
games_played | integer | — | — e.g. 162 |
hits | integer | — | — e.g. 1423 |
holds | integer | — | — e.g. 83 |
home_runs | integer | — | — e.g. 190 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 1442.0000 |
losses | integer | — | — e.g. 84 |
on_base_percentage | decimal | — | — e.g. 0.3150 |
on_base_plus_slugging | decimal | — | — e.g. 0.7500 |
runs_allowed | integer | — | — e.g. 697 |
runs_batted_in | integer | — | — e.g. 670 |
runs_scored | integer | — | — e.g. 716 |
save_opportunities | integer | — | — e.g. 64 |
saves | integer | — | — e.g. 44 |
shutouts | integer | — | — e.g. 8 |
slugging_percentage | decimal | — | — e.g. 0.3970 |
stolen_bases | integer | — | — e.g. 88 |
strikeouts | integer | — | — e.g. 1461 |
ties | integer | — | — e.g. 0 |
triples | integer | — | — e.g. 18 |
walks | integer | — | — e.g. 478 |
whip | decimal | — | — e.g. 1.2400 |
wins | integer | — | — e.g. 90 |
season_player_stats
mlb.season_player_statsSeason totals for each MLB player — the full batting line (AVG, OBP, SLG, OPS), counting stats (HR, RBI, SB, R), and pitching line (W, L, ERA, WHIP, K, BB). Advanced run-value metrics (wRC+, FIP, WAR) are not carried here. Scope is not split by season type.
GET/api/v1/mlb/season_player_statsList season_player_stats for MLB
Requires one of:
season_id or player_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a season. Defaults to the current season.
player_idquerybigintoptionalFilter to a single player.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/jsonResponse Schema(69 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1439 | |
season_id | bigint | — e.g. 2024 | |
assists | integer | — | — e.g. 0 |
at_bats | integer | — | — e.g. 0 |
balls | integernullable | — | — e.g. 0 |
batters_faced | integer | — | — e.g. 0 |
batting_average | decimal | — | — e.g. 0.0000 |
blown_saves | integer | — | — e.g. 0 |
caught_stealing | integer | — | — e.g. 0 |
caught_stealing_by | integer | — | — e.g. 0 |
complete_games | integer | — | — e.g. 0 |
double_plays | integer | — | — e.g. 0 |
doubles | integer | — | — e.g. 0 |
earned_run_average | decimal | — | — e.g. 0.0000 |
earned_runs | integer | — | — e.g. 0 |
errors | integer | — | — e.g. 0 |
fielding_games | integer | — | — e.g. 0 |
fielding_games_started | integer | — | — e.g. 0 |
fielding_percentage | decimal | — | — e.g. 0.0000 |
fielding_position | string | — | — Values:PC2BLFRFCF3B1BSSXDH |
games_pitched | integer | — | — e.g. 0 |
games_played | integer | — | — e.g. 0 |
games_started | integer | — | — e.g. 0 |
games_started_pitching | integer | — | — e.g. 0 |
grounded_into_double_play | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits | integer | — | — e.g. 0 |
hits_allowed | integer | — | — e.g. 0 |
hits_per_nine | decimal | — | — e.g. 0.0000 |
holds | integer | — | — e.g. 0 |
home_runs | integer | — | — e.g. 0 |
home_runs_allowed | integer | — | — e.g. 0 |
home_runs_per_nine | decimal | — | — e.g. 0.0000 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 0.0000 |
intentional_walks | integernullable | — | — e.g. 0 |
left_on_base | integernullable | — | — e.g. 0 |
losses | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.0000 |
on_base_plus_slugging | decimal | — | — e.g. 0.0000 |
passed_balls | integer | — | — e.g. 0 |
pitches_thrown | integernullable | — | — e.g. 0 |
plate_appearances | integer | — | — e.g. 0 |
putouts | integer | — | — e.g. 0 |
quality_starts | integernullable | — | — e.g. 0 |
runs | integer | — | — e.g. 0 |
runs_allowed | integer | — | — e.g. 0 |
runs_batted_in | integer | — | — e.g. 0 |
sacrifice_flies | integer | — | — e.g. 0 |
sacrifice_hits | integer | — | — e.g. 0 |
save_opportunities | integer | — | — e.g. 0 |
saves | integer | — | — e.g. 0 |
shutouts | integer | — | — e.g. 0 |
singles | integernullable | — | Derivable from hits - doubles - triples - home_runs e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.0000 |
stolen_bases | integer | — | — e.g. 0 |
stolen_bases_allowed | integer | — | — e.g. 0 |
strikeouts | integer | — | — e.g. 0 |
strikeouts_per_nine | decimal | — | — e.g. 0.0000 |
strikeouts_pitched | integer | — | — e.g. 0 |
strikes | integernullable | — | — e.g. 0 |
total_bases | integernullable | — | Derivable: 1B + 2*2B + 3*3B + 4*HR e.g. 0 |
total_chances | integer | — | — e.g. 0 |
triples | integer | — | — e.g. 0 |
walks | integer | — | — e.g. 0 |
walks_allowed | integer | — | — e.g. 0 |
walks_per_nine | decimal | — | — e.g. 0.0000 |
whip | decimal | — | — e.g. 0.0000 |
wins | integer | — | — e.g. 0 |
GET/api/v1/mlb/season_player_stats/{id}Get a single season_player_stat by id
Parameters
idpathbigintrequiredPrimary key (id) of the season_player_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/season_player_stats/{pk_value}'Responses
200Single season_player_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(69 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1439 | |
season_id | bigint | — e.g. 2024 | |
assists | integer | — | — e.g. 0 |
at_bats | integer | — | — e.g. 0 |
balls | integernullable | — | — e.g. 0 |
batters_faced | integer | — | — e.g. 0 |
batting_average | decimal | — | — e.g. 0.0000 |
blown_saves | integer | — | — e.g. 0 |
caught_stealing | integer | — | — e.g. 0 |
caught_stealing_by | integer | — | — e.g. 0 |
complete_games | integer | — | — e.g. 0 |
double_plays | integer | — | — e.g. 0 |
doubles | integer | — | — e.g. 0 |
earned_run_average | decimal | — | — e.g. 0.0000 |
earned_runs | integer | — | — e.g. 0 |
errors | integer | — | — e.g. 0 |
fielding_games | integer | — | — e.g. 0 |
fielding_games_started | integer | — | — e.g. 0 |
fielding_percentage | decimal | — | — e.g. 0.0000 |
fielding_position | string | — | — Values:PC2BLFRFCF3B1BSSXDH |
games_pitched | integer | — | — e.g. 0 |
games_played | integer | — | — e.g. 0 |
games_started | integer | — | — e.g. 0 |
games_started_pitching | integer | — | — e.g. 0 |
grounded_into_double_play | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits | integer | — | — e.g. 0 |
hits_allowed | integer | — | — e.g. 0 |
hits_per_nine | decimal | — | — e.g. 0.0000 |
holds | integer | — | — e.g. 0 |
home_runs | integer | — | — e.g. 0 |
home_runs_allowed | integer | — | — e.g. 0 |
home_runs_per_nine | decimal | — | — e.g. 0.0000 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 0.0000 |
intentional_walks | integernullable | — | — e.g. 0 |
left_on_base | integernullable | — | — e.g. 0 |
losses | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.0000 |
on_base_plus_slugging | decimal | — | — e.g. 0.0000 |
passed_balls | integer | — | — e.g. 0 |
pitches_thrown | integernullable | — | — e.g. 0 |
plate_appearances | integer | — | — e.g. 0 |
putouts | integer | — | — e.g. 0 |
quality_starts | integernullable | — | — e.g. 0 |
runs | integer | — | — e.g. 0 |
runs_allowed | integer | — | — e.g. 0 |
runs_batted_in | integer | — | — e.g. 0 |
sacrifice_flies | integer | — | — e.g. 0 |
sacrifice_hits | integer | — | — e.g. 0 |
save_opportunities | integer | — | — e.g. 0 |
saves | integer | — | — e.g. 0 |
shutouts | integer | — | — e.g. 0 |
singles | integernullable | — | Derivable from hits - doubles - triples - home_runs e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.0000 |
stolen_bases | integer | — | — e.g. 0 |
stolen_bases_allowed | integer | — | — e.g. 0 |
strikeouts | integer | — | — e.g. 0 |
strikeouts_per_nine | decimal | — | — e.g. 0.0000 |
strikeouts_pitched | integer | — | — e.g. 0 |
strikes | integernullable | — | — e.g. 0 |
total_bases | integernullable | — | Derivable: 1B + 2*2B + 3*3B + 4*HR e.g. 0 |
total_chances | integer | — | — e.g. 0 |
triples | integer | — | — e.g. 0 |
walks | integer | — | — e.g. 0 |
walks_allowed | integer | — | — e.g. 0 |
walks_per_nine | decimal | — | — e.g. 0.0000 |
whip | decimal | — | — e.g. 0.0000 |
wins | integer | — | — e.g. 0 |
game_player_batter_stats
mlb.game_player_batter_statsEach batter's box-score stat line for each MLB game — at-bats, hits, doubles, triples, home runs, RBIs, walks, strikeouts, stolen bases, and runs scored.
GET/api/v1/mlb/game_player_batter_statsList game_player_batter_stats for MLB
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.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_player_batter_stats?game_id=1'Responses
200game_player_batter_stats rows matching the declared filter set, wrapped in { game_player_batter_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(42 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 64 | |
player_id | bigint | — e.g. 604 | |
team_id | bigint | — e.g. 41 | |
air_outs | integer | — | — e.g. 0 |
at_bats | integer | — | — e.g. 3 |
at_bats_per_home_run | decimal | — | — e.g. 0.0000 |
babip | decimal | — | — e.g. 0.0000 |
balls_in_play | integer | — | — e.g. 0 |
batting_average | decimal | — | — e.g. 0.0000 |
catchers_interference | integer | — | — e.g. 0 |
caught_stealing | integer | — | — e.g. 0 |
double_plays | integer | — | — e.g. 0 |
doubles | integer | — | — e.g. 0 |
fly_outs | integer | — | — e.g. 0 |
ground_into_double_play | integer | — | — e.g. 0 |
ground_into_triple_play | integer | — | — e.g. 0 |
ground_outs | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits | integer | — | — e.g. 0 |
home_runs | integer | — | — e.g. 0 |
intentional_walks | integer | — | — e.g. 0 |
isolated_power | decimal | — | — e.g. 0.0000 |
left_on_base | integer | — | — e.g. 0 |
line_outs | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.0000 |
on_base_plus_slugging | decimal | — | — e.g. 0.0000 |
pickoffs | integer | — | — e.g. 0 |
plate_appearances | integer | — | — e.g. 4 |
pop_outs | integer | — | — e.g. 0 |
runs | integer | — | — e.g. 0 |
runs_batted_in | integer | — | — e.g. 0 |
sacrifice_flies | integer | — | — e.g. 0 |
sacrifices | integer | — | — e.g. 0 |
singles | integer | — | — e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.0000 |
stolen_bases | integer | — | — e.g. 0 |
strikeouts | integer | — | — e.g. 0 |
total_bases | integer | — | — e.g. 0 |
triples | integer | — | — e.g. 0 |
walks | integer | — | — e.g. 0 |
woba | decimal | — | — e.g. 0.0000 |
GET/api/v1/mlb/game_player_batter_stats/{id}Get a single game_player_batter_stat by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_player_batter_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_player_batter_stats/{pk_value}'Responses
200Single game_player_batter_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(42 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 64 | |
player_id | bigint | — e.g. 604 | |
team_id | bigint | — e.g. 41 | |
air_outs | integer | — | — e.g. 0 |
at_bats | integer | — | — e.g. 3 |
at_bats_per_home_run | decimal | — | — e.g. 0.0000 |
babip | decimal | — | — e.g. 0.0000 |
balls_in_play | integer | — | — e.g. 0 |
batting_average | decimal | — | — e.g. 0.0000 |
catchers_interference | integer | — | — e.g. 0 |
caught_stealing | integer | — | — e.g. 0 |
double_plays | integer | — | — e.g. 0 |
doubles | integer | — | — e.g. 0 |
fly_outs | integer | — | — e.g. 0 |
ground_into_double_play | integer | — | — e.g. 0 |
ground_into_triple_play | integer | — | — e.g. 0 |
ground_outs | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits | integer | — | — e.g. 0 |
home_runs | integer | — | — e.g. 0 |
intentional_walks | integer | — | — e.g. 0 |
isolated_power | decimal | — | — e.g. 0.0000 |
left_on_base | integer | — | — e.g. 0 |
line_outs | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.0000 |
on_base_plus_slugging | decimal | — | — e.g. 0.0000 |
pickoffs | integer | — | — e.g. 0 |
plate_appearances | integer | — | — e.g. 4 |
pop_outs | integer | — | — e.g. 0 |
runs | integer | — | — e.g. 0 |
runs_batted_in | integer | — | — e.g. 0 |
sacrifice_flies | integer | — | — e.g. 0 |
sacrifices | integer | — | — e.g. 0 |
singles | integer | — | — e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.0000 |
stolen_bases | integer | — | — e.g. 0 |
strikeouts | integer | — | — e.g. 0 |
total_bases | integer | — | — e.g. 0 |
triples | integer | — | — e.g. 0 |
walks | integer | — | — e.g. 0 |
woba | decimal | — | — e.g. 0.0000 |
game_player_pitching_stats
mlb.game_player_pitching_statsEach pitcher's box-score stat line for each MLB game — innings pitched, hits and runs allowed, earned runs, walks, strikeouts, home runs allowed, and pitches thrown.
GET/api/v1/mlb/game_player_pitching_statsList game_player_pitching_stats for MLB
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.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_player_pitching_stats?game_id=1'Responses
200game_player_pitching_stats rows matching the declared filter set, wrapped in { game_player_pitching_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(68 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 64 | |
player_id | bigint | — e.g. 1382 | |
team_id | bigint | — e.g. 33 | |
air_outs | integer | — | — e.g. 0 |
babip | decimal | — | — e.g. 0.0000 |
balks | integer | — | — e.g. 0 |
balls | integer | — | — e.g. 0 |
balls_in_play | integer | — | — e.g. 0 |
batters_faced | integer | — | — e.g. 3 |
blown_save | integer | — | — e.g. 0 |
catchers_interference | integer | — | — e.g. 0 |
complete_games | integer | — | — e.g. 0 |
double_plays | integer | — | — e.g. 0 |
doubles_allowed | integer | — | — e.g. 0 |
earned_run_average | decimal | — | — e.g. 0.0000 |
earned_runs | integer | — | — e.g. 0 |
fip | decimal | — | — e.g. 3.1000 |
fly_outs | integer | — | — e.g. 0 |
games_finished | integer | — | — e.g. 0 |
games_pitched | integer | — | — e.g. 1 |
games_started | integer | — | — e.g. 0 |
grand_slams_allowed | integer | — | — e.g. 0 |
ground_into_double_play | integer | — | — e.g. 0 |
ground_outs | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits_allowed | integer | — | — e.g. 0 |
hold | integer | — | — e.g. 0 |
home_runs_allowed | integer | — | — e.g. 0 |
home_runs_per_nine | decimal | — | — e.g. 0.0000 |
inherited_runners | integer | — | — e.g. 0 |
inherited_runners_scored | integer | — | — e.g. 0 |
inning_started | integer | — | — e.g. 0 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 1.0000 |
intentional_walks | integer | — | — e.g. 0 |
left_on_base | decimal | — | — e.g. 0.0000 |
line_outs | integer | — | — e.g. 0 |
loss | integer | — | — e.g. 0 |
no_hitters | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.0000 |
on_base_plus_slugging | decimal | — | — e.g. 0.0000 |
outs | integer | — | — e.g. 3 |
perfect_games | integer | — | — e.g. 0 |
pickoffs | integer | — | — e.g. 0 |
pitches_thrown | integer | — | — e.g. 0 |
plate_appearances | integer | — | — e.g. 0 |
pop_outs | integer | — | — e.g. 0 |
quality_starts | integer | — | — e.g. 0 |
runs_allowed | integer | — | — e.g. 0 |
runs_scored_per_nine | decimal | — | — e.g. 0.0000 |
sacrifice_flies_allowed | integer | — | — e.g. 0 |
sacrifices_allowed | integer | — | — e.g. 0 |
save | integer | — | — e.g. 0 |
shutouts | integer | — | — e.g. 0 |
singles_allowed | integer | — | — e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.0000 |
strike_percentage | decimal | — | — e.g. 0.0000 |
strikeouts_per_nine | decimal | — | — e.g. 0.0000 |
strikeouts_pitched | integer | — | — e.g. 0 |
strikes | integer | — | — e.g. 0 |
total_bases_allowed | integer | — | — e.g. 0 |
triples_allowed | integer | — | — e.g. 0 |
walks_allowed | integer | — | — e.g. 0 |
walks_per_nine | decimal | — | — e.g. 0.0000 |
whip | decimal | — | — e.g. 0.0000 |
wild_pitches | integer | — | — e.g. 0 |
win | integer | — | — e.g. 0 |
woba | decimal | — | — e.g. 0.0000 |
GET/api/v1/mlb/game_player_pitching_stats/{id}Get a single game_player_pitching_stat by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_player_pitching_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_player_pitching_stats/{pk_value}'Responses
200Single game_player_pitching_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(68 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 64 | |
player_id | bigint | — e.g. 1382 | |
team_id | bigint | — e.g. 33 | |
air_outs | integer | — | — e.g. 0 |
babip | decimal | — | — e.g. 0.0000 |
balks | integer | — | — e.g. 0 |
balls | integer | — | — e.g. 0 |
balls_in_play | integer | — | — e.g. 0 |
batters_faced | integer | — | — e.g. 3 |
blown_save | integer | — | — e.g. 0 |
catchers_interference | integer | — | — e.g. 0 |
complete_games | integer | — | — e.g. 0 |
double_plays | integer | — | — e.g. 0 |
doubles_allowed | integer | — | — e.g. 0 |
earned_run_average | decimal | — | — e.g. 0.0000 |
earned_runs | integer | — | — e.g. 0 |
fip | decimal | — | — e.g. 3.1000 |
fly_outs | integer | — | — e.g. 0 |
games_finished | integer | — | — e.g. 0 |
games_pitched | integer | — | — e.g. 1 |
games_started | integer | — | — e.g. 0 |
grand_slams_allowed | integer | — | — e.g. 0 |
ground_into_double_play | integer | — | — e.g. 0 |
ground_outs | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits_allowed | integer | — | — e.g. 0 |
hold | integer | — | — e.g. 0 |
home_runs_allowed | integer | — | — e.g. 0 |
home_runs_per_nine | decimal | — | — e.g. 0.0000 |
inherited_runners | integer | — | — e.g. 0 |
inherited_runners_scored | integer | — | — e.g. 0 |
inning_started | integer | — | — e.g. 0 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 1.0000 |
intentional_walks | integer | — | — e.g. 0 |
left_on_base | decimal | — | — e.g. 0.0000 |
line_outs | integer | — | — e.g. 0 |
loss | integer | — | — e.g. 0 |
no_hitters | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.0000 |
on_base_plus_slugging | decimal | — | — e.g. 0.0000 |
outs | integer | — | — e.g. 3 |
perfect_games | integer | — | — e.g. 0 |
pickoffs | integer | — | — e.g. 0 |
pitches_thrown | integer | — | — e.g. 0 |
plate_appearances | integer | — | — e.g. 0 |
pop_outs | integer | — | — e.g. 0 |
quality_starts | integer | — | — e.g. 0 |
runs_allowed | integer | — | — e.g. 0 |
runs_scored_per_nine | decimal | — | — e.g. 0.0000 |
sacrifice_flies_allowed | integer | — | — e.g. 0 |
sacrifices_allowed | integer | — | — e.g. 0 |
save | integer | — | — e.g. 0 |
shutouts | integer | — | — e.g. 0 |
singles_allowed | integer | — | — e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.0000 |
strike_percentage | decimal | — | — e.g. 0.0000 |
strikeouts_per_nine | decimal | — | — e.g. 0.0000 |
strikeouts_pitched | integer | — | — e.g. 0 |
strikes | integer | — | — e.g. 0 |
total_bases_allowed | integer | — | — e.g. 0 |
triples_allowed | integer | — | — e.g. 0 |
walks_allowed | integer | — | — e.g. 0 |
walks_per_nine | decimal | — | — e.g. 0.0000 |
whip | decimal | — | — e.g. 0.0000 |
wild_pitches | integer | — | — e.g. 0 |
win | integer | — | — e.g. 0 |
woba | decimal | — | — e.g. 0.0000 |
game_team_stats
mlb.game_team_statsEach MLB team's stat line for each game — runs, hits, errors, batting averages, pitching lines, broken out per game with home/away context.
GET/api/v1/mlb/game_team_statsList game_team_stats for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_team_stats?game_id=1'Responses
200game_team_stats rows matching the declared filter set, wrapped in { game_team_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(37 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 1454 | |
team_id | bigint | — e.g. 27 | |
assists | integer | — | — e.g. 9 |
balks | integer | — | — e.g. 0 |
batters_faced | integer | — | — e.g. 36 |
batting_average | decimal | — | — e.g. 0.2440 |
caught_stealing | integer | — | — e.g. 0 |
double_plays_turned | integer | — | — e.g. 0 |
doubles | integer | — | — e.g. 1 |
earned_run_average | decimal | — | — e.g. 3.7700 |
earned_runs | integer | — | — e.g. 2 |
errors | integer | — | — e.g. 0 |
grounded_into_double_play | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits | integer | — | — e.g. 7 |
home_runs | integer | — | — e.g. 1 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 9.0000 |
left_on_base | integer | — | — e.g. 6 |
loss | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.3150 |
on_base_plus_slugging | decimal | — | — e.g. 0.7240 |
passed_balls | integer | — | — e.g. 0 |
pitches_thrown | integer | — | — e.g. 143 |
putouts | integer | — | — e.g. 27 |
runs | integer | — | — e.g. 3 |
runs_batted_in | integer | — | — e.g. 2 |
sacrifice_flies | integer | — | — e.g. 0 |
sacrifice_hits | integer | — | — e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.4070 |
stolen_bases | integer | — | — e.g. 0 |
strikeouts | integer | — | — e.g. 8 |
strikes | integer | — | — e.g. 93 |
triples | integer | — | — e.g. 0 |
walks | integer | — | — e.g. 2 |
wild_pitches | integer | — | — e.g. 0 |
win | integer | — | — e.g. 0 |
GET/api/v1/mlb/game_team_stats/{id}Get a single game_team_stat by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_team_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_team_stats/{pk_value}'Responses
200Single game_team_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(37 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 1454 | |
team_id | bigint | — e.g. 27 | |
assists | integer | — | — e.g. 9 |
balks | integer | — | — e.g. 0 |
batters_faced | integer | — | — e.g. 36 |
batting_average | decimal | — | — e.g. 0.2440 |
caught_stealing | integer | — | — e.g. 0 |
double_plays_turned | integer | — | — e.g. 0 |
doubles | integer | — | — e.g. 1 |
earned_run_average | decimal | — | — e.g. 3.7700 |
earned_runs | integer | — | — e.g. 2 |
errors | integer | — | — e.g. 0 |
grounded_into_double_play | integer | — | — e.g. 0 |
hit_by_pitch | integer | — | — e.g. 0 |
hits | integer | — | — e.g. 7 |
home_runs | integer | — | — e.g. 1 |
innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) e.g. 9.0000 |
left_on_base | integer | — | — e.g. 6 |
loss | integer | — | — e.g. 0 |
on_base_percentage | decimal | — | — e.g. 0.3150 |
on_base_plus_slugging | decimal | — | — e.g. 0.7240 |
passed_balls | integer | — | — e.g. 0 |
pitches_thrown | integer | — | — e.g. 143 |
putouts | integer | — | — e.g. 27 |
runs | integer | — | — e.g. 3 |
runs_batted_in | integer | — | — e.g. 2 |
sacrifice_flies | integer | — | — e.g. 0 |
sacrifice_hits | integer | — | — e.g. 0 |
slugging_percentage | decimal | — | — e.g. 0.4070 |
stolen_bases | integer | — | — e.g. 0 |
strikeouts | integer | — | — e.g. 8 |
strikes | integer | — | — e.g. 93 |
triples | integer | — | — e.g. 0 |
walks | integer | — | — e.g. 2 |
wild_pitches | integer | — | — e.g. 0 |
win | integer | — | — e.g. 0 |
Advanced Stats
park_factors
mlb.park_factorsHow each MLB ballpark inflates or suppresses run-scoring categories — runs, home runs, doubles, triples, and batting average relative to a neutral park, computed per season.
GET/api/v1/mlb/park_factorsList park_factors for MLB
Requires one of:
venue_id — requests satisfying none of these return 400.Parameters
venue_idquerybigintoptionalFilter by venue.
season_idquerybigintoptionalFilter to a season.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/park_factors?venue_id=1'Responses
200park_factors rows matching the declared filter set, wrapped in { park_factors, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
venue_id | bigint | — e.g. 12 | |
basic_park_factor | decimal | — | Overall park factor for runs (1.0 = neutral) e.g. 1.2200 |
double_factor | decimal | — | Park factor for doubles e.g. 1.2600 |
fly_ball_factor | decimalnullable | — | Park factor for fly balls e.g. — (all-null in sample) |
ground_ball_factor | decimalnullable | — | Park factor for ground balls e.g. — (all-null in sample) |
handedness_factor | decimal | — | Park effect on handedness advantage e.g. 1.1600 |
home_run_factor | decimal | — | Park factor for home runs (1.0 = neutral) e.g. 1.3300 |
left_handed_factor | decimal | — | Park factor for left-handed batters e.g. 1.1400 |
right_handed_factor | decimal | — | Park factor for right-handed batters e.g. 1.1800 |
run_factor | decimalnullable | — | Park factor for total runs e.g. — (all-null in sample) |
single_factor | decimal | — | Park factor for singles e.g. 1.1100 |
strikeout_factor | decimal | — | Park factor for strikeouts e.g. 0.8900 |
triple_factor | decimal | — | Park factor for triples e.g. 1.4200 |
updated_date | timestamptz | — | — e.g. 2026-04-12T02:04:46.363Z |
walk_factor | decimal | — | Park factor for walks e.g. 1.0100 |
years_of_data | integer | — | Number of years used to calculate factors e.g. 3 |
GET/api/v1/mlb/park_factors/{id}Get a single park_factor by id
Parameters
idpathbigintrequiredPrimary key (id) of the park_factor row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/park_factors/{pk_value}'Responses
200Single park_factor row.application/jsonshow example ▸
404Row not found.
Response Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2024 | |
venue_id | bigint | — e.g. 12 | |
basic_park_factor | decimal | — | Overall park factor for runs (1.0 = neutral) e.g. 1.2200 |
double_factor | decimal | — | Park factor for doubles e.g. 1.2600 |
fly_ball_factor | decimalnullable | — | Park factor for fly balls e.g. — (all-null in sample) |
ground_ball_factor | decimalnullable | — | Park factor for ground balls e.g. — (all-null in sample) |
handedness_factor | decimal | — | Park effect on handedness advantage e.g. 1.1600 |
home_run_factor | decimal | — | Park factor for home runs (1.0 = neutral) e.g. 1.3300 |
left_handed_factor | decimal | — | Park factor for left-handed batters e.g. 1.1400 |
right_handed_factor | decimal | — | Park factor for right-handed batters e.g. 1.1800 |
run_factor | decimalnullable | — | Park factor for total runs e.g. — (all-null in sample) |
single_factor | decimal | — | Park factor for singles e.g. 1.1100 |
strikeout_factor | decimal | — | Park factor for strikeouts e.g. 0.8900 |
triple_factor | decimal | — | Park factor for triples e.g. 1.4200 |
updated_date | timestamptz | — | — e.g. 2026-04-12T02:04:46.363Z |
walk_factor | decimal | — | Park factor for walks e.g. 1.0100 |
years_of_data | integer | — | Number of years used to calculate factors e.g. 3 |
season_run_environments
mlb.season_run_environmentsLeague-wide offensive context per MLB season — average runs per game, league batting line, ERA, and the offensive baseline used to normalize player and team stats across eras.
GET/api/v1/mlb/season_run_environmentsList season_run_environments for MLB
Requires one of:
season_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a season. Defaults to the current season.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/season_run_environments?season_id=2027'Responses
200season_run_environments rows matching the declared filter set, wrapped in { season_run_environments, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(10 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2021 | |
batting_average_on_balls_in_play | decimal | — | League average BABIP e.g. 0.2930 |
fip_constant | decimal | — | FIP constant to scale FIP to ERA e.g. 3.1340 |
home_run_per_fly_ball | decimal | — | League average HR/FB rate e.g. 0.1390 |
runs_per_out | decimal | — | League average runs per out made e.g. 0.2810 |
runs_per_plate_appearance | decimal | — | League average runs per plate appearance e.g. 0.1250 |
strikeout_rate | decimal | — | League average strikeout rate e.g. 0.2440 |
updated_date | timestamptz | — | — e.g. 2026-04-12T02:04:46.337Z |
walk_rate | decimal | — | League average walk rate e.g. 0.0890 |
GET/api/v1/mlb/season_run_environments/{id}Get a single season_run_environment by id
Parameters
idpathbigintrequiredPrimary key (id) of the season_run_environment row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/season_run_environments/{pk_value}'Responses
200Single season_run_environment row.application/jsonshow example ▸
404Row not found.
Response Schema(10 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2021 | |
batting_average_on_balls_in_play | decimal | — | League average BABIP e.g. 0.2930 |
fip_constant | decimal | — | FIP constant to scale FIP to ERA e.g. 3.1340 |
home_run_per_fly_ball | decimal | — | League average HR/FB rate e.g. 0.1390 |
runs_per_out | decimal | — | League average runs per out made e.g. 0.2810 |
runs_per_plate_appearance | decimal | — | League average runs per plate appearance e.g. 0.1250 |
strikeout_rate | decimal | — | League average strikeout rate e.g. 0.2440 |
updated_date | timestamptz | — | — e.g. 2026-04-12T02:04:46.337Z |
walk_rate | decimal | — | League average walk rate e.g. 0.0890 |
woba_weights
mlb.woba_weightsThe weighted on-base average coefficients for each MLB season — the run values assigned to walks, singles, doubles, triples, and home runs, used to compute wOBA and wRC+.
GET/api/v1/mlb/woba_weightsList woba_weights for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/woba_weights?limit=3'Responses
200woba_weights rows matching the declared filter set, wrapped in { woba_weights, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2021 | |
double_weight | decimal | — | Weight for doubles (w2B) e.g. 1.2710 |
hit_by_pitch_weight | decimal | — | Weight for hit by pitch (wHBP) e.g. 0.7230 |
home_run_weight | decimal | — | Weight for home runs (wHR) e.g. 2.1010 |
league_obp | decimal | — | League average OBP for calibration e.g. 0.3180 |
league_woba | decimal | — | League average wOBA for the season e.g. 0.3180 |
single_weight | decimal | — | Weight for singles (w1B) e.g. 0.8950 |
triple_weight | decimal | — | Weight for triples (w3B) e.g. 1.5520 |
updated_date | timestamptz | — | When these weights were last updated e.g. 2026-04-12T02:04:46.328Z |
walk_weight | decimal | — | Weight for unintentional walks (wBB) e.g. 0.6920 |
woba_scale | decimal | — | Scale factor to convert wOBA to runs e.g. 1.2160 |
GET/api/v1/mlb/woba_weights/{id}Get a single woba_weight by id
Parameters
idpathbigintrequiredPrimary key (id) of the woba_weight row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/woba_weights/{pk_value}'Responses
200Single woba_weight row.application/jsonshow example ▸
404Row not found.
Response Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
season_id | bigint | — e.g. 2021 | |
double_weight | decimal | — | Weight for doubles (w2B) e.g. 1.2710 |
hit_by_pitch_weight | decimal | — | Weight for hit by pitch (wHBP) e.g. 0.7230 |
home_run_weight | decimal | — | Weight for home runs (wHR) e.g. 2.1010 |
league_obp | decimal | — | League average OBP for calibration e.g. 0.3180 |
league_woba | decimal | — | League average wOBA for the season e.g. 0.3180 |
single_weight | decimal | — | Weight for singles (w1B) e.g. 0.8950 |
triple_weight | decimal | — | Weight for triples (w3B) e.g. 1.5520 |
updated_date | timestamptz | — | When these weights were last updated e.g. 2026-04-12T02:04:46.328Z |
walk_weight | decimal | — | Weight for unintentional walks (wBB) e.g. 0.6920 |
woba_scale | decimal | — | Scale factor to convert wOBA to runs e.g. 1.2160 |
Odds
series_odds
mlb.series_oddsSeries-level odds for postseason MLB matchups — who wins each series and how many games it goes, with the price updating game by game as the series unfolds. MLB playoff series are best-of-5 (LDS/WC) or best-of-7 (LCS/WS).
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/series_oddsList series_odds for MLB
Requires one of:
season_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a season. Defaults to the current season.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/series_odds?season_id=2027'Responses
200series_odds rows matching the declared filter set, wrapped in { series_odds, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — | |
home_team_id | bigint | — | |
operator_id | bigint | — | |
season_id | bigint | — | |
away_odds | integer | — | American odds for away team to win series |
captured_at | timestamptz | — | — |
games_played | integernullable | — | — |
home_odds | integer | — | American odds for home team to win series |
series_name | string | — | ALDS, NLDS, ALCS, NLCS, World Series, Wild Card |
series_score | stringnullable | — | Current series score (e.g., "3-2" home-away) |
GET/api/v1/mlb/series_odds/{id}Get a single series_odd by id
Parameters
idpathbigintrequiredPrimary key (id) of the series_odd row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/series_odds/{pk_value}'Responses
200Single series_odd row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — | |
home_team_id | bigint | — | |
operator_id | bigint | — | |
season_id | bigint | — | |
away_odds | integer | — | American odds for away team to win series |
captured_at | timestamptz | — | — |
games_played | integernullable | — | — |
home_odds | integer | — | American odds for home team to win series |
series_name | string | — | ALDS, NLDS, ALCS, NLCS, World Series, Wild Card |
series_score | stringnullable | — | Current series score (e.g., "3-2" home-away) |
game_alt_lines
mlb.game_alt_linesAlternate MLB game lines — the full ladder of run-line and total offerings at non-standard prices that sportsbooks publish alongside the headline line.
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/game_alt_linesList game_alt_lines for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_alt_lines?game_id=1'Responses
200game_alt_lines rows matching the declared filter set, wrapped in { game_alt_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/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — | |
operator_id | bigint | — | |
alt_spreads | jsonbnullable | — | Array of {line, home_odds, away_odds} |
alt_totals | jsonbnullable | — | Array of {line, over_odds, under_odds} |
captured_at | timestamptz | — | — |
GET/api/v1/mlb/game_alt_lines/{id}Get a single game_alt_line by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_alt_line row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_alt_lines/{pk_value}'Responses
200Single game_alt_line row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — | |
operator_id | bigint | — | |
alt_spreads | jsonbnullable | — | Array of {line, home_odds, away_odds} |
alt_totals | jsonbnullable | — | Array of {line, over_odds, under_odds} |
captured_at | timestamptz | — | — |
game_lines
mlb.game_linesMLB game betting lines — moneylines, run lines (the baseball point-spread equivalent), and over/under totals from sportsbooks, captured over time as the lines move from opening to closing. In MLB, spread = run line (typically +/- 1.5).
GET/api/v1/mlb/game_linesList game_lines for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_lines?game_id=1'Responses
200game_lines rows matching the declared filter set, wrapped in { game_lines, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 168105 | |
operator_id | bigint | Data source (consensus, DraftKings, FanDuel, etc.) e.g. 6 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2026 | |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2026-06-21T16:09:37.291Z |
implied_away_score | decimalnullable | — | — e.g. 5.0000 |
implied_away_win_pct | decimalnullable | — | — e.g. 0.4785 |
implied_home_score | decimalnullable | — | Calculated from spread + total e.g. 3.5000 |
implied_home_win_pct | decimalnullable | — | From moneyline, 0-1 e.g. 0.5671 |
is_opening | boolean | — | True if this is the opening line Values:falsetrue |
moneyline_away | integernullable | — | American odds for away team win e.g. 109 |
moneyline_home | integernullable | — | American odds for home team win e.g. -131 |
over_odds | integernullable | — | American odds for over e.g. -110 |
spread | decimalnullable | — | Home team run line (e.g., -1.5 means home favored by 1.5 runs) e.g. 1.5000 |
spread_away_odds | integernullable | — | American odds for away run line e.g. -110 |
spread_home_odds | integernullable | — | American odds for home run line (e.g., -130) e.g. -110 |
total | decimalnullable | — | Combined run total line (e.g., 8.5) e.g. 8.5000 |
under_odds | integernullable | — | American odds for under e.g. -110 |
GET/api/v1/mlb/game_lines/{id}Get a single game_line by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_line row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_lines/{pk_value}'Responses
200Single game_line row.application/jsonshow example ▸
404Row not found.
Response Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 168105 | |
operator_id | bigint | Data source (consensus, DraftKings, FanDuel, etc.) e.g. 6 | |
season_id | bigint | Denormalized for efficient season-level queries e.g. 2026 | |
captured_at | timestamptz | — | When this snapshot was captured e.g. 2026-06-21T16:09:37.291Z |
implied_away_score | decimalnullable | — | — e.g. 5.0000 |
implied_away_win_pct | decimalnullable | — | — e.g. 0.4785 |
implied_home_score | decimalnullable | — | Calculated from spread + total e.g. 3.5000 |
implied_home_win_pct | decimalnullable | — | From moneyline, 0-1 e.g. 0.5671 |
is_opening | boolean | — | True if this is the opening line Values:falsetrue |
moneyline_away | integernullable | — | American odds for away team win e.g. 109 |
moneyline_home | integernullable | — | American odds for home team win e.g. -131 |
over_odds | integernullable | — | American odds for over e.g. -110 |
spread | decimalnullable | — | Home team run line (e.g., -1.5 means home favored by 1.5 runs) e.g. 1.5000 |
spread_away_odds | integernullable | — | American odds for away run line e.g. -110 |
spread_home_odds | integernullable | — | American odds for home run line (e.g., -130) e.g. -110 |
total | decimalnullable | — | Combined run total line (e.g., 8.5) e.g. 8.5000 |
under_odds | integernullable | — | American odds for under e.g. -110 |
game_period_lines
mlb.game_period_linesPeriod-specific MLB betting lines — first-five-innings markets (F5), individual-inning bets, and other partial-game spreads, moneylines, and totals. Each row is a time-series snapshot - only captured when values change.
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/game_period_linesList game_period_lines for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — | |
operator_id | bigint | Data source (consensus, DraftKings, FanDuel, etc.) | |
season_id | bigint | Denormalized for efficient season-level queries | |
captured_at | timestamptz | — | — |
implied_away_win_pct | decimalnullable | — | — |
implied_home_win_pct | decimalnullable | — | — |
is_opening | boolean | — | — |
moneyline_away | integernullable | — | — |
moneyline_home | integernullable | — | — |
over_odds | integernullable | — | — |
period_code | string | — | Market period code (F5 = first 5 innings, F3, F7) |
spread | decimalnullable | — | Home team run line for this period |
spread_away_odds | integernullable | — | — |
spread_home_odds | integernullable | — | — |
total | decimalnullable | — | Combined run total line for this period |
under_odds | integernullable | — | — |
GET/api/v1/mlb/game_period_lines/{id}Get a single game_period_line by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_period_line row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_period_lines/{pk_value}'Responses
200Single game_period_line row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — | |
operator_id | bigint | Data source (consensus, DraftKings, FanDuel, etc.) | |
season_id | bigint | Denormalized for efficient season-level queries | |
captured_at | timestamptz | — | — |
implied_away_win_pct | decimalnullable | — | — |
implied_home_win_pct | decimalnullable | — | — |
is_opening | boolean | — | — |
moneyline_away | integernullable | — | — |
moneyline_home | integernullable | — | — |
over_odds | integernullable | — | — |
period_code | string | — | Market period code (F5 = first 5 innings, F3, F7) |
spread | decimalnullable | — | Home team run line for this period |
spread_away_odds | integernullable | — | — |
spread_home_odds | integernullable | — | — |
total | decimalnullable | — | Combined run total line for this period |
under_odds | integernullable | — | — |
game_player_props
mlb.game_player_propsMLB player prop bets for each game — hits, runs, RBIs, total bases, home runs, strikeouts (for pitchers), and other player-statistic markets offered by sportsbooks.
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/game_player_propsList game_player_props for MLB
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.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — | |
operator_id | bigint | — | |
player_id | bigint | — | |
season_id | bigint | Denormalized for efficient season-level queries | |
book_count | integer | — | Number of curated books contributing to this consensus value |
captured_at | timestamptz | — | — |
category | string | — | Canonical category. Pitcher props: - strikeouts_pitcher, hits_allowed, walks_allowed, - earned_runs, outs_recorded, pitching_outs, win, quality_start Batter props: - hits, home_runs, rbis, total_bases, runs, walks, - stolen_bases, strikeouts_batter, hits_runs_rbis |
is_opening | boolean | — | — |
line | decimalnullable | — | Prop line for over/under markets (e.g., 5.5 strikeouts) |
market_key | string | — | Raw market key from source API (e.g., pitcher_strikeouts) |
no_odds | integernullable | — | — |
outcome_type | string | — | ou | yes_no |
over_odds | integernullable | — | — |
period_code | stringnullable | — | Optional period code (F5) |
subcategory | stringnullable | — | Optional subtype (alternate, boosted, etc.) |
under_odds | integernullable | — | — |
yes_odds | integernullable | — | — |
GET/api/v1/mlb/game_player_props/{id}Get a single game_player_prop by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_player_prop row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_player_props/{pk_value}'Responses
200Single game_player_prop row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(18 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — | |
operator_id | bigint | — | |
player_id | bigint | — | |
season_id | bigint | Denormalized for efficient season-level queries | |
book_count | integer | — | Number of curated books contributing to this consensus value |
captured_at | timestamptz | — | — |
category | string | — | Canonical category. Pitcher props: - strikeouts_pitcher, hits_allowed, walks_allowed, - earned_runs, outs_recorded, pitching_outs, win, quality_start Batter props: - hits, home_runs, rbis, total_bases, runs, walks, - stolen_bases, strikeouts_batter, hits_runs_rbis |
is_opening | boolean | — | — |
line | decimalnullable | — | Prop line for over/under markets (e.g., 5.5 strikeouts) |
market_key | string | — | Raw market key from source API (e.g., pitcher_strikeouts) |
no_odds | integernullable | — | — |
outcome_type | string | — | ou | yes_no |
over_odds | integernullable | — | — |
period_code | stringnullable | — | Optional period code (F5) |
subcategory | stringnullable | — | Optional subtype (alternate, boosted, etc.) |
under_odds | integernullable | — | — |
yes_odds | integernullable | — | — |
Lineups & Roster
team_player_rosters
mlb.team_player_rostersDay-by-day player-to-team affiliations across the MLB season — who was on each 40-man roster, who was on the IL, who was optioned to the minors, and who was designated for assignment.
GET/api/v1/mlb/team_player_rostersList team_player_rosters for MLB
Requires one of:
team_id — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_player_rosters?team_id=1'Responses
200team_player_rosters rows matching the declared filter set, wrapped in { team_player_rosters, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 165 | |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 30 | |
day | integer | — | — e.g. 20260621 |
position | stringnullable | — | — Values:PCRF3BLF2B1BCFSSDHOFIFTWP |
position_depth | integernullable | — | — e.g. 1 |
position_group | stringnullable | — | — Values:PitcherInfielderOutfielderCatcherHitterTwo-Way Player |
roster_type | string | — | — Values:40ManactivefullSeason |
GET/api/v1/mlb/team_player_rosters/{id}Get a single team_player_roster by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_player_roster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_player_rosters/{pk_value}'Responses
200Single team_player_roster row.application/jsonshow example ▸
404Row not found.
Response Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 165 | |
season_id | bigint | — e.g. 2024 | |
team_id | bigint | — e.g. 30 | |
day | integer | — | — e.g. 20260621 |
position | stringnullable | — | — Values:PCRF3BLF2B1BCFSSDHOFIFTWP |
position_depth | integernullable | — | — e.g. 1 |
position_group | stringnullable | — | — Values:PitcherInfielderOutfielderCatcherHitterTwo-Way Player |
roster_type | string | — | — Values:40ManactivefullSeason |
team_starting_lineups
mlb.team_starting_lineupsEach MLB team's starting lineup for each game — the nine batters in batting order plus the starting pitcher (and DH where applicable).
GET/api/v1/mlb/team_starting_lineupsList team_starting_lineups for MLB
Requires one of:
team_id or game_id — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter by team.
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_starting_lineups?team_id=1'Responses
200team_starting_lineups rows matching the declared filter set, wrapped in { team_starting_lineups, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 64 | |
pitcher_id | bigintnullable | — e.g. 50028 | |
team_id | bigint | — e.g. 27 | |
batter_status | integer | — | — e.g. 1 |
pitcher_status | integer | — | — e.g. 1 |
GET/api/v1/mlb/team_starting_lineups/{id}Get a single team_starting_lineup by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_starting_lineup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_starting_lineups/{pk_value}'Responses
200Single team_starting_lineup row.application/jsonshow example ▸
404Row not found.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 64 | |
pitcher_id | bigintnullable | — e.g. 50028 | |
team_id | bigint | — e.g. 27 | |
batter_status | integer | — | — e.g. 1 |
pitcher_status | integer | — | — e.g. 1 |
game_team_rosters
mlb.game_team_rostersThe active gameday roster for each MLB team in each game — the 26 players in uniform that day, with positions and any pre-game lineup designations.
GET/api/v1/mlb/game_team_rostersList game_team_rosters for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_team_rosters?game_id=1'Responses
200game_team_rosters rows matching the declared filter set, wrapped in { game_team_rosters, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 14259 | |
player_id | bigint | — e.g. 1365 | |
team_id | bigint | — e.g. 27 | |
batting_order | integernullable | — | — e.g. 9 |
comment | stringnullable | — | — e.g. — (all-null in sample) |
position | stringnullable | — | — Values:PC2BLF1BCF3BRFSSPHDHPR |
starter | boolean | — | — Values:falsetrue |
status | stringnullable | — | — e.g. Active |
GET/api/v1/mlb/game_team_rosters/{id}Get a single game_team_roster by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_team_roster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_team_rosters/{pk_value}'Responses
200Single game_team_roster row.application/jsonshow example ▸
404Row not found.
Response Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 14259 | |
player_id | bigint | — e.g. 1365 | |
team_id | bigint | — e.g. 27 | |
batting_order | integernullable | — | — e.g. 9 |
comment | stringnullable | — | — e.g. — (all-null in sample) |
position | stringnullable | — | — Values:PC2BLF1BCF3BRFSSPHDHPR |
starter | boolean | — | — Values:falsetrue |
status | stringnullable | — | — e.g. Active |
team_starting_lineup_batters
mlb.team_starting_lineup_battersEach batter in each MLB starting lineup — position in the order (1 through 9), defensive position, and batting handedness for the day.
GET/api/v1/mlb/team_starting_lineup_battersList team_starting_lineup_batters for MLB
Requires one of:
team_starting_lineup_id — requests satisfying none of these return 400.Parameters
team_starting_lineup_idquerybigintoptionalFilter to a single starting lineup.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_starting_lineup_batters?team_starting_lineup_id=1'Responses
200team_starting_lineup_batters rows matching the declared filter set, wrapped in { team_starting_lineup_batters, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(5 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1040 | |
team_starting_lineup_id | bigint | — e.g. 1 | |
batting_order | string | — | — e.g. 1 |
position | string | — | — Values:SS3BRF2BCF1BLFCDHPPHPR |
GET/api/v1/mlb/team_starting_lineup_batters/{id}Get a single team_starting_lineup_batter by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_starting_lineup_batter row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_starting_lineup_batters/{pk_value}'Responses
200Single team_starting_lineup_batter row.application/jsonshow example ▸
404Row not found.
Response Schema(5 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1040 | |
team_starting_lineup_id | bigint | — e.g. 1 | |
batting_order | string | — | — e.g. 1 |
position | string | — | — Values:SS3BRF2BCF1BLFCDHPPHPR |
Misc
venues
mlb.venuesMLB ballparks — current home stadiums and historical venues, with dimensions, surface, capacity, and roof type.
GET/api/v1/mlb/venuesList venues for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/venues?limit=3'Responses
200venues rows matching the declared filter set, wrapped in { venues, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_venue_id | integernullable | — | Official MLB venue ID from statsapi.mlb.com e.g. 2523 |
address | stringnullable | — | — e.g. — (all-null in sample) |
capacity | integernullable | — | — e.g. 14014 |
city | string | — | — e.g. West Sacramento |
closed_date | timestamptznullable | — | — e.g. — (all-null in sample) |
country | stringnullable | — | — Values:USACAN |
description | stringnullable | — | — e.g. — (all-null in sample) |
elevation | floatnullable | — | Elevation in feet above sea level e.g. 596 |
hr_factor | decimalnullable | — | Historical home run park factor (1.0 = neutral) e.g. — (all-null in sample) |
image_url | stringnullable | — | URL to aerial/overview image of ballpark e.g. — (all-null in sample) |
latitude | floatnullable | — | — e.g. 27.9778 |
longitude | floatnullable | — | — e.g. -82.5055 |
name | string | — | — e.g. Sutter Health Park |
opened_date | timestamptznullable | — | — e.g. 2000-05-15T04:00:00.000Z |
orientation | floatnullable | — | Field orientation in degrees (0-360). Direction home plate faces. 0/360=North, 90=East, 180=South, 270=West e.g. 45 |
roof_type | stringnullable | — | Open, Dome, Retractable Values:OpenRetractableClosed |
state | stringnullable | — | — Values:CAFLILOHTXMONYPAAZGAMDMACOMIWIMNWAONDC |
surface | stringnullable | — | — Values:GrassArtificial TurfNatural Grass |
team_name | stringnullable | — | — e.g. Tampa Bay Rays |
timezone | stringnullable | — | IANA timezone (e.g., America/New_York) e.g. — (all-null in sample) |
GET/api/v1/mlb/venues/{id}Get a single venue by id
Parameters
idpathbigintrequiredPrimary key (id) of the venue row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/venues/{pk_value}'Responses
200Single venue row.application/jsonshow example ▸
404Row not found.
Response Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_venue_id | integernullable | — | Official MLB venue ID from statsapi.mlb.com e.g. 2523 |
address | stringnullable | — | — e.g. — (all-null in sample) |
capacity | integernullable | — | — e.g. 14014 |
city | string | — | — e.g. West Sacramento |
closed_date | timestamptznullable | — | — e.g. — (all-null in sample) |
country | stringnullable | — | — Values:USACAN |
description | stringnullable | — | — e.g. — (all-null in sample) |
elevation | floatnullable | — | Elevation in feet above sea level e.g. 596 |
hr_factor | decimalnullable | — | Historical home run park factor (1.0 = neutral) e.g. — (all-null in sample) |
image_url | stringnullable | — | URL to aerial/overview image of ballpark e.g. — (all-null in sample) |
latitude | floatnullable | — | — e.g. 27.9778 |
longitude | floatnullable | — | — e.g. -82.5055 |
name | string | — | — e.g. Sutter Health Park |
opened_date | timestamptznullable | — | — e.g. 2000-05-15T04:00:00.000Z |
orientation | floatnullable | — | Field orientation in degrees (0-360). Direction home plate faces. 0/360=North, 90=East, 180=South, 270=West e.g. 45 |
roof_type | stringnullable | — | Open, Dome, Retractable Values:OpenRetractableClosed |
state | stringnullable | — | — Values:CAFLILOHTXMONYPAAZGAMDMACOMIWIMNWAONDC |
surface | stringnullable | — | — Values:GrassArtificial TurfNatural Grass |
team_name | stringnullable | — | — e.g. Tampa Bay Rays |
timezone | stringnullable | — | IANA timezone (e.g., America/New_York) e.g. — (all-null in sample) |
broadcasters
mlb.broadcastersNetworks, regional sports networks, and streaming services that air MLB games — Apple TV+, ESPN, FOX, TBS, MLB Network, MLB.TV, plus team-local RSNs.
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/broadcastersList broadcasters for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_team_id | integer | — | — |
region_id | integer | — | — |
broadcaster_abbreviation | string | — | — |
broadcaster_description | stringnullable | — | — |
broadcaster_display | string | — | — |
broadcaster_media | string | — | — |
broadcaster_ranking | integer | — | — |
broadcaster_scope | string | — | — |
broadcaster_video_link | stringnullable | — | — |
tape_delay_comments | stringnullable | — | — |
GET/api/v1/mlb/broadcasters/{id}Get a single broadcaster by id
Parameters
idpathbigintrequiredPrimary key (id) of the broadcaster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/broadcasters/{pk_value}'Responses
200Single broadcaster row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_team_id | integer | — | — |
region_id | integer | — | — |
broadcaster_abbreviation | string | — | — |
broadcaster_description | stringnullable | — | — |
broadcaster_display | string | — | — |
broadcaster_media | string | — | — |
broadcaster_ranking | integer | — | — |
broadcaster_scope | string | — | — |
broadcaster_video_link | stringnullable | — | — |
tape_delay_comments | stringnullable | — | — |
umpires
mlb.umpiresMLB umpires — the four-person crew of home-plate, first-base, second-base, and third-base umpires who work each game (six in the postseason with outfield umpires added).
GET/api/v1/mlb/umpiresList umpires for MLB
Parameters
activequerybooleanoptionalFilter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/umpires?limit=3'Responses
200umpires rows matching the declared filter set, wrapped in { umpires, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
mlb_umpire_id | integer | — | — e.g. 427044 |
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) |
experience | integernullable | — | — e.g. — (all-null in sample) |
first_name | string | — | — e.g. Mike |
full_name | string | — | — e.g. CB Bucknor |
last_name | string | — | — e.g. Jimenez |
GET/api/v1/mlb/umpires/{id}Get a single umpire by id
Parameters
idpathbigintrequiredPrimary key (id) of the umpire row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/umpires/{pk_value}'Responses
200Single umpire row.application/jsonshow example ▸
404Row not found.
Response Schema(11 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
mlb_umpire_id | integer | — | — e.g. 427044 |
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) |
experience | integernullable | — | — e.g. — (all-null in sample) |
first_name | string | — | — e.g. Mike |
full_name | string | — | — e.g. CB Bucknor |
last_name | string | — | — e.g. Jimenez |
venue_dimensions
mlb.venue_dimensionsOutfield dimensions and wall heights for each MLB ballpark — distances to left field, center field, right field, and the power alleys, plus the height of the outfield walls.
GET/api/v1/mlb/venue_dimensionsList venue_dimensions for MLB
Requires one of:
venue_id — requests satisfying none of these return 400.Parameters
venue_idquerybigintoptionalFilter by venue.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/venue_dimensions?venue_id=1'Responses
200venue_dimensions rows matching the declared filter set, wrapped in { venue_dimensions, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
mlb_venue_id | integer | — | — e.g. 1 |
venue_id | bigint | — e.g. 2 | |
altitude_ft | floatnullable | — | Venue altitude in feet (denormalized from venue for query convenience) e.g. — (all-null in sample) |
backstop_distance | floatnullable | — | Distance from home plate to backstop (feet) e.g. — (all-null in sample) |
center_field | float | — | — e.g. 400 |
center_field_fence_height | float | — | — e.g. 8 |
description | stringnullable | — | — e.g. — (all-null in sample) |
fair_territory_sq_ft | floatnullable | — | — e.g. 113800 |
foul_territory_rating | decimalnullable | — | Relative foul territory size (1.0 = average, >1 = large) e.g. — (all-null in sample) |
foul_territory_sq_ft | floatnullable | — | — e.g. 21500 |
left_center_field | floatnullable | — | — e.g. 385 |
left_field | float | — | — e.g. 330 |
left_field_fence_height | float | — | — e.g. 8 |
orientation | float | — | — e.g. 45 |
right_center_field | floatnullable | — | — e.g. 375 |
right_field | float | — | — e.g. 330 |
right_field_fence_height | float | — | — e.g. 8 |
total_territory_sq_ft | floatnullable | — | — e.g. 137000 |
venue_name | stringnullable | — | — e.g. Angel Stadium |
year | integer | — | — e.g. 2000 |
GET/api/v1/mlb/venue_dimensions/{id}Get a single venue_dimension by id
Parameters
idpathbigintrequiredPrimary key (id) of the venue_dimension row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/venue_dimensions/{pk_value}'Responses
200Single venue_dimension row.application/jsonshow example ▸
404Row not found.
Response Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
mlb_venue_id | integer | — | — e.g. 1 |
venue_id | bigint | — e.g. 2 | |
altitude_ft | floatnullable | — | Venue altitude in feet (denormalized from venue for query convenience) e.g. — (all-null in sample) |
backstop_distance | floatnullable | — | Distance from home plate to backstop (feet) e.g. — (all-null in sample) |
center_field | float | — | — e.g. 400 |
center_field_fence_height | float | — | — e.g. 8 |
description | stringnullable | — | — e.g. — (all-null in sample) |
fair_territory_sq_ft | floatnullable | — | — e.g. 113800 |
foul_territory_rating | decimalnullable | — | Relative foul territory size (1.0 = average, >1 = large) e.g. — (all-null in sample) |
foul_territory_sq_ft | floatnullable | — | — e.g. 21500 |
left_center_field | floatnullable | — | — e.g. 385 |
left_field | float | — | — e.g. 330 |
left_field_fence_height | float | — | — e.g. 8 |
orientation | float | — | — e.g. 45 |
right_center_field | floatnullable | — | — e.g. 375 |
right_field | float | — | — e.g. 330 |
right_field_fence_height | float | — | — e.g. 8 |
total_territory_sq_ft | floatnullable | — | — e.g. 137000 |
venue_name | stringnullable | — | — e.g. Angel Stadium |
year | integer | — | — e.g. 2000 |
operator_team_lookups
mlb.operator_team_lookupsHow each sportsbook and fantasy operator names every MLB team — the mapping from each operator's team code to the unified franchise record.
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/operator_team_lookupsList operator_team_lookups for MLB
Requires one of:
operator_id — requests satisfying none of these return 400.Parameters
operator_idquerybigintoptionalFilter by operator.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io. | |
operator_team_id | string | — | External team ID from operator |
team_id | bigint | Internal mlb.teams.id reference | |
abbreviation | stringnullable | — | Team abbreviation for reconciliation |
team_name | stringnullable | — | Team name for reconciliation |
GET/api/v1/mlb/operator_team_lookups/{id}Get a single operator_team_lookup by id
Parameters
idpathbigintrequiredPrimary key (id) of the operator_team_lookup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/operator_team_lookups/{pk_value}'Responses
200Single operator_team_lookup row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io. | |
operator_team_id | string | — | External team ID from operator |
team_id | bigint | Internal mlb.teams.id reference | |
abbreviation | stringnullable | — | Team abbreviation for reconciliation |
team_name | stringnullable | — | Team name for reconciliation |
playoffs
mlb.playoffsThe MLB postseason bracket — Wild Card Series, Division Series, League Championship Series, and the World Series, tracked as the seeded matchups and outcomes.
GET/api/v1/mlb/playoffsList playoffs for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/playoffs?limit=3'Responses
200playoffs rows matching the declared filter set, wrapped in { playoffs, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 44 | |
home_team_id | bigint | — e.g. 27 | |
season_id | bigint | — e.g. 2020 | |
series_id | bigint | — | — e.g. 401 |
away_team_wins | integer | — | — e.g. 2 |
games_played | integer | — | — e.g. 5 |
home_team_wins | integer | — | — e.g. 3 |
max_games | integer | — | — e.g. 5 |
series_name | string | — | — Values:AL Division SeriesNL Division SeriesAL Wild Card SeriesNL Wild Card SeriesWorld SeriesNL Championship SeriesAL Championship SeriesNL Wild Card GameAL Wild Card Game |
series_text | string | — | — e.g. LAD won 4-3 |
status | string | — | — e.g. Completed |
GET/api/v1/mlb/playoffs/{id}Get a single playoff by id
Parameters
idpathbigintrequiredPrimary key (id) of the playoff row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/playoffs/{pk_value}'Responses
200Single playoff row.application/jsonshow example ▸
404Row not found.
Response Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
away_team_id | bigint | — e.g. 44 | |
home_team_id | bigint | — e.g. 27 | |
season_id | bigint | — e.g. 2020 | |
series_id | bigint | — | — e.g. 401 |
away_team_wins | integer | — | — e.g. 2 |
games_played | integer | — | — e.g. 5 |
home_team_wins | integer | — | — e.g. 3 |
max_games | integer | — | — e.g. 5 |
series_name | string | — | — Values:AL Division SeriesNL Division SeriesAL Wild Card SeriesNL Wild Card SeriesWorld SeriesNL Championship SeriesAL Championship SeriesNL Wild Card GameAL Wild Card Game |
series_text | string | — | — e.g. LAD won 4-3 |
status | string | — | — e.g. Completed |
operator_player_lookups
mlb.operator_player_lookupsHow each sportsbook and fantasy operator names every MLB player — the mapping from each operator's player identifier to a unified player record.
GET/api/v1/mlb/operator_player_lookupsList operator_player_lookups for MLB
Requires one of:
operator_id — requests satisfying none of these return 400.Parameters
operator_idquerybigintoptionalFilter by operator.
limitqueryintegeroptionaldefault 100Page size. Defaults to 100; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/operator_player_lookups?operator_id=1'Responses
200operator_player_lookups rows matching the declared filter set, wrapped in { operator_player_lookups, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io. e.g. 2240 | |
operator_player_id | string | — | External player ID from operator e.g. 598286 |
player_id | bigintnullable | Internal mlb.players.id reference e.g. 1589 | |
decided_at | timestamptznullable | — | When the pin or block was decided. e.g. — (all-null in sample) |
decided_reason | stringnullable | — | Evidence behind a pinned or blocked decision. e.g. — (all-null in sample) |
decision | stringnullable | — | How this mapping was decided: 'derived' (finder answer, overwritable), 'pinned' (decided on evidence, trigger-protected), 'blocked' (no player we hold is this id; player_id NULL, never retried). DB default 'derived'; a BEFORE UPDATE trigger preserves non-derived rows. e.g. derived |
player_name | stringnullable | — | Player name for reconciliation e.g. Max Muncy |
position | stringnullable | — | Position for reconciliation e.g. P |
GET/api/v1/mlb/operator_player_lookups/{id}Get a single operator_player_lookup by id
Parameters
idpathbigintrequiredPrimary key (id) of the operator_player_lookup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/operator_player_lookups/{pk_value}'Responses
200Single operator_player_lookup row.application/jsonshow example ▸
404Row not found.
Response Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io. e.g. 2240 | |
operator_player_id | string | — | External player ID from operator e.g. 598286 |
player_id | bigintnullable | Internal mlb.players.id reference e.g. 1589 | |
decided_at | timestamptznullable | — | When the pin or block was decided. e.g. — (all-null in sample) |
decided_reason | stringnullable | — | Evidence behind a pinned or blocked decision. e.g. — (all-null in sample) |
decision | stringnullable | — | How this mapping was decided: 'derived' (finder answer, overwritable), 'pinned' (decided on evidence, trigger-protected), 'blocked' (no player we hold is this id; player_id NULL, never retried). DB default 'derived'; a BEFORE UPDATE trigger preserves non-derived rows. e.g. derived |
player_name | stringnullable | — | Player name for reconciliation e.g. Max Muncy |
position | stringnullable | — | Position for reconciliation e.g. P |
player_awards
mlb.player_awardsMLB player awards — MVP, Cy Young, Rookie of the Year, Gold Gloves, Silver Sluggers, All-Star selections, and other end-of-season honors.
GET/api/v1/mlb/player_awardsList player_awards for MLB
Requires one of:
player_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to a single player.
season_idquerybigintoptionalFilter to a season.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/player_awards?player_id=1'Responses
200player_awards rows matching the declared filter set, wrapped in { player_awards, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(8 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1369 | |
season_id | bigint | — e.g. 2019 | |
team_id | bigintnullable | — e.g. 41 | |
award_date | datenullable | — | Date the award was announced e.g. 2025-11-13 |
award_name | string | — | — e.g. All-MLB First Team |
award_type | string | — | — e.g. MLBAFIRST |
is_winner | boolean | — | statsapi publishes recipients (winners) only — always true e.g. true |
GET/api/v1/mlb/player_awards/{id}Get a single player_award by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_award row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/player_awards/{pk_value}'Responses
200Single player_award row.application/jsonshow example ▸
404Row not found.
Response Schema(8 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 1369 | |
season_id | bigint | — e.g. 2019 | |
team_id | bigintnullable | — e.g. 41 | |
award_date | datenullable | — | Date the award was announced e.g. 2025-11-13 |
award_name | string | — | — e.g. All-MLB First Team |
award_type | string | — | — e.g. MLBAFIRST |
is_winner | boolean | — | statsapi publishes recipients (winners) only — always true e.g. true |
player_injuries
mlb.player_injuriesThe ongoing injury record for each MLB player — body part, severity, IL designation (10-day, 15-day, 60-day), and expected return timeline.
GET/api/v1/mlb/player_injuriesList player_injuries for MLB
Requires one of:
player_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to a single player.
team_idquerybigintoptionalFilter by team.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/player_injuries?player_id=1'Responses
200player_injuries rows matching the declared filter set, wrapped in { player_injuries, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(16 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 636 | |
season_id | bigint | — e.g. 2026 | |
team_id | bigint | — e.g. 42 | |
body_part | string | — | — e.g. Elbow |
description | stringnullable | — | — e.g. no |
end_date | timestamptznullable | — | — e.g. — (all-null in sample) |
expected_return_date | timestamptznullable | — | — e.g. 2027-02-01T05:00:00.000Z |
games_missed | integernullable | — | — e.g. — (all-null in sample) |
injury_type | string | — | — Values:SurgeryStrainInflammationNot SpecifiedSorenessFracturePinched NerveUnknownSprainBruiseConcussionTendinitisSpasmsPlantar FasciitisCrampsBone SpurAbrasionLacerationInfectionDislocated |
is_surgery_required | booleannullable | — | — e.g. — (all-null in sample) |
side | stringnullable | — | — Values:RightLeftNot Specified |
source | stringnullable | — | — e.g. espn |
start_date | timestamptz | — | — e.g. 2026-05-08T11:02:00.000Z |
status | string | — | — Values:60-Day-ILDay-To-Day15-Day-IL10-Day-ILOut7-Day ILdevelopmental listsuspension7-day ilpaternitybereavementBereavementPaternitySuspension |
updated_date | timestamptz | — | — e.g. 2026-08-04T11:19:23.925Z |
GET/api/v1/mlb/player_injuries/{id}Get a single player_injury by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_injury row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/player_injuries/{pk_value}'Responses
200Single player_injury row.application/jsonshow example ▸
404Row not found.
Response Schema(16 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 636 | |
season_id | bigint | — e.g. 2026 | |
team_id | bigint | — e.g. 42 | |
body_part | string | — | — e.g. Elbow |
description | stringnullable | — | — e.g. no |
end_date | timestamptznullable | — | — e.g. — (all-null in sample) |
expected_return_date | timestamptznullable | — | — e.g. 2027-02-01T05:00:00.000Z |
games_missed | integernullable | — | — e.g. — (all-null in sample) |
injury_type | string | — | — Values:SurgeryStrainInflammationNot SpecifiedSorenessFracturePinched NerveUnknownSprainBruiseConcussionTendinitisSpasmsPlantar FasciitisCrampsBone SpurAbrasionLacerationInfectionDislocated |
is_surgery_required | booleannullable | — | — e.g. — (all-null in sample) |
side | stringnullable | — | — Values:RightLeftNot Specified |
source | stringnullable | — | — e.g. espn |
start_date | timestamptz | — | — e.g. 2026-05-08T11:02:00.000Z |
status | string | — | — Values:60-Day-ILDay-To-Day15-Day-IL10-Day-ILOut7-Day ILdevelopmental listsuspension7-day ilpaternitybereavementBereavementPaternitySuspension |
updated_date | timestamptz | — | — e.g. 2026-08-04T11:19:23.925Z |
game_broadcasters
mlb.game_broadcastersWhich networks broadcast each MLB game — the national TV partner, regional carriers, radio calls, and streaming providers.
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/game_broadcastersList game_broadcasters for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/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/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_id | bigint | — | |
game_id | bigint | — | |
broadcaster_type | string | — | — |
GET/api/v1/mlb/game_broadcasters/{id}Get a single game_broadcaster by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_broadcaster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_broadcasters/{pk_value}'Responses
200Single game_broadcaster row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
broadcaster_id | bigint | — | |
game_id | bigint | — | |
broadcaster_type | string | — | — |
game_umpires
mlb.game_umpiresThe umpiring crew assigned to each MLB game — who worked home plate, who worked each base.
GET/api/v1/mlb/game_umpiresList game_umpires for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_umpires?game_id=1'Responses
200game_umpires rows matching the declared filter set, wrapped in { game_umpires, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 1454 | |
umpire_id | bigint | — e.g. 46 | |
position | stringnullable | — | — Values:Home PlateFirst BaseSecond BaseThird Base |
GET/api/v1/mlb/game_umpires/{id}Get a single game_umpire by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_umpire row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_umpires/{pk_value}'Responses
200Single game_umpire row.application/jsonshow example ▸
404Row not found.
Response Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 1454 | |
umpire_id | bigint | — e.g. 46 | |
position | stringnullable | — | — Values:Home PlateFirst BaseSecond BaseThird Base |
game_weathers
mlb.game_weathersOn-field weather throughout each MLB game — temperature, wind direction and speed, humidity, and precipitation captured at fixed intervals from first pitch.
GET/api/v1/mlb/game_weathersList game_weathers for MLB
Requires one of:
game_id — requests satisfying none of these return 400.Parameters
game_idquerybigintoptionalFilter to a single game.
venue_idquerybigintoptionalFilter by venue.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_weathers?game_id=1'Responses
200game_weathers rows matching the declared filter set, wrapped in { game_weathers, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(27 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 1454 | |
venue_id | bigint | — e.g. 14 | |
air_density | floatnullable | — | Calculated air density (lb/ft³) e.g. — (all-null in sample) |
ball_carry_factor | decimalnullable | — | Estimated ball carry factor (1.0 = neutral, >1 = carries more) e.g. — (all-null in sample) |
cloud_cover | floatnullable | — | — e.g. — (all-null in sample) |
dew_point | floatnullable | — | — e.g. — (all-null in sample) |
feels_like_temperature | floatnullable | — | — e.g. — (all-null in sample) |
humidity | floatnullable | — | — e.g. — (all-null in sample) |
is_dome | booleannullable | — | — Values:falsetrue |
precipitation | floatnullable | — | — e.g. — (all-null in sample) |
precipitation_probability | floatnullable | — | — e.g. — (all-null in sample) |
pressure | floatnullable | — | — e.g. — (all-null in sample) |
recorded_at | timestamptznullable | — | — e.g. 2018-09-30T19:10:00.000Z |
roof_status | stringnullable | — | open, closed, retractable_open, retractable_closed Values:ClosedOpen |
temperature | floatnullable | — | — e.g. 72 |
time_minutes | integer | — | Minutes from game start (0, 30, 60, 90, 120, 150, 180 for 3-hour game) e.g. 0 |
uv_index | floatnullable | — | — e.g. — (all-null in sample) |
visibility | floatnullable | — | — e.g. — (all-null in sample) |
weather_condition | stringnullable | — | — Values:Partly CloudyClearCloudyRoof ClosedSunnyOvercastDomeRainDrizzleSnow |
weather_description | stringnullable | — | — Values:NoneOut To CFL To RR To LOut To LFOut To RFIn From RFIn From CFIn From LFVariesCalm |
wind_blowing_out | booleannullable | — | True if wind is blowing from home plate toward outfield Values:truefalse |
wind_component_out | floatnullable | — | Wind speed component blowing out to CF (mph, negative = blowing in) e.g. — (all-null in sample) |
wind_direction | floatnullable | — | — e.g. — (all-null in sample) |
wind_direction_relative | floatnullable | — | Wind direction relative to batter's box (degrees) e.g. — (all-null in sample) |
wind_gust | floatnullable | — | — e.g. — (all-null in sample) |
wind_speed | floatnullable | — | — e.g. 0 |
GET/api/v1/mlb/game_weathers/{id}Get a single game_weather by id
Parameters
idpathbigintrequiredPrimary key (id) of the game_weather row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/game_weathers/{pk_value}'Responses
200Single game_weather row.application/jsonshow example ▸
404Row not found.
Response Schema(27 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
game_id | bigint | — e.g. 1454 | |
venue_id | bigint | — e.g. 14 | |
air_density | floatnullable | — | Calculated air density (lb/ft³) e.g. — (all-null in sample) |
ball_carry_factor | decimalnullable | — | Estimated ball carry factor (1.0 = neutral, >1 = carries more) e.g. — (all-null in sample) |
cloud_cover | floatnullable | — | — e.g. — (all-null in sample) |
dew_point | floatnullable | — | — e.g. — (all-null in sample) |
feels_like_temperature | floatnullable | — | — e.g. — (all-null in sample) |
humidity | floatnullable | — | — e.g. — (all-null in sample) |
is_dome | booleannullable | — | — Values:falsetrue |
precipitation | floatnullable | — | — e.g. — (all-null in sample) |
precipitation_probability | floatnullable | — | — e.g. — (all-null in sample) |
pressure | floatnullable | — | — e.g. — (all-null in sample) |
recorded_at | timestamptznullable | — | — e.g. 2018-09-30T19:10:00.000Z |
roof_status | stringnullable | — | open, closed, retractable_open, retractable_closed Values:ClosedOpen |
temperature | floatnullable | — | — e.g. 72 |
time_minutes | integer | — | Minutes from game start (0, 30, 60, 90, 120, 150, 180 for 3-hour game) e.g. 0 |
uv_index | floatnullable | — | — e.g. — (all-null in sample) |
visibility | floatnullable | — | — e.g. — (all-null in sample) |
weather_condition | stringnullable | — | — Values:Partly CloudyClearCloudyRoof ClosedSunnyOvercastDomeRainDrizzleSnow |
weather_description | stringnullable | — | — Values:NoneOut To CFL To RR To LOut To LFOut To RFIn From RFIn From CFIn From LFVariesCalm |
wind_blowing_out | booleannullable | — | True if wind is blowing from home plate toward outfield Values:truefalse |
wind_component_out | floatnullable | — | Wind speed component blowing out to CF (mph, negative = blowing in) e.g. — (all-null in sample) |
wind_direction | floatnullable | — | — e.g. — (all-null in sample) |
wind_direction_relative | floatnullable | — | Wind direction relative to batter's box (degrees) e.g. — (all-null in sample) |
wind_gust | floatnullable | — | — e.g. — (all-null in sample) |
wind_speed | floatnullable | — | — e.g. 0 |
player_news
mlb.player_newsNews about MLB players — trades, IL placements, lineup decisions, suspensions, and general beat-reporter updates, unified from beat-writer scrapers, operator feeds, and AI summarization.
GET/api/v1/mlb/player_newsList player_news for MLB
Requires one of:
player_id or team_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to a single player.
team_idquerybigintoptionalFilter by team.
categoryquerystringoptionalFilter by news category (injury, transaction, lineup, general, depth_chart, suspension, contract, performance). Values: general, injury, lineup, transaction, depth_chart, suspension, contract, performance.
status_enumquerystringoptionalFilter by player status designation. Values: RULED_OUT, DOUBTFUL, QUESTIONABLE, PROBABLE, CLEARED, MINUTES_LIMIT, MINUTES_LIFTED, STARTING, BENCHED, INACTIVE, ACTIVE, IR_PLACED, IR_ACTIVATED, OUT_SEASON, TRADED, RELEASED, SIGNED, ROUTINE, UNSIGNED.
urgencyquerystringoptionalFilter by news urgency. Values: BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE.
news_timequerytimestamptzoptionalFilter by publication time (ISO 8601). Use news_time__gte to poll for items since your last check. Range syntax: news_time__gte=, news_time__lte=, news_time__between=.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/player_news?player_id=1'Responses
200player_news rows matching the declared filter set, wrapped in { player_news, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(23 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | string | — | Source-specific unique identifier e.g. sportsdata-197163 |
game_id | bigintnullable | Associated game ID when this news item relates to a specific game. e.g. 169744 | |
opponent_team_id | bigintnullable | Opponent team ID when this news item relates to an upcoming or active game matchup. e.g. 16 | |
player_id | bigintnullable | Player ID associated with the news report. e.g. 1369 | |
team_id | bigintnullable | Team ID of the player at the time of publication. e.g. 27 | |
ai_processed | boolean | — | Whether this story was generated or enriched via LLM summarization. Values:falsetrue |
analysis | stringnullable | — | Fantasy and tactical analysis of the news. e.g. — (all-null in sample) |
author | stringnullable | — | Reporter or author of the article. e.g. Staff |
category | stringnullable | — | injury, transaction, lineup, general Values:injurygeneraltransactionlineupdepth_chartcontractsuspensionperformanceworkload |
content | stringnullable | — | Full text content of the news report. e.g. Milwaukee Brewers first baseman/outfielder Jake Bauers is p… |
description | stringnullable | — | Brief synopsis or summary of the news event. e.g. San Francisco pitcher Sam Hentges is sidelined with a forea… |
first_reported_at | timestamptznullable | — | Timestamp when this story was first reported before multi-source compaction. e.g. 2026-09-07T01:25:32.000Z |
link | stringnullable | — | URL link to the original article or source video. e.g. https://www.rotoballer.com/player-news/jake-bauers-is-becom… |
news_time | timestamptz | — | Publication timestamp of the news story. e.g. 2026-09-01T04:00:00.000Z |
priority | integer | — | Display priority score (1-10). e.g. 10 |
processed_at | timestamptznullable | — | Timestamp when the story was processed. e.g. — (all-null in sample) |
situational_impact | jsonbnullable | — | Structured situational impact assessment and fantasy implications for the player. e.g. {"affected_player_ids":[],"affected_players":[]} |
↳type situational_impact.type | stringnullable | — | Impact direction: positive, negative, or neutral. |
↳impact_enum situational_impact.impact_enum | stringnullable | — | Standardized impact state (ACTIVE, CLEARED, QUESTIONABLE, etc.). |
↳reason situational_impact.reason | stringnullable | — | Narrative explaining the fantasy and playing-time impact. |
↳ripple_effect situational_impact.ripple_effect | stringnullable | — | Downstream tactical or fantasy consequences. |
↳affected_players situational_impact.affected_players | listnullable | — | Teammates whose opportunity or role is impacted. |
↳affected_player_ids situational_impact.affected_player_ids | listnullable | — | IDs of impacted teammates. |
source | string | — | News source identifier (cbs, espn, rotoworld, sportsdata, etc.) Values:cbs_sportssportsdatarotoworldespnrotoql_sportsdata |
sources | jsonbnullable | — | Source citations with source name, URL, author, and published timestamp. e.g. [{"published_at":"2026-06-07T01:57:06.000Z","source":"sport… |
↳url sources.url | stringnullable | — | Source article or media link. |
↳source sources.source | stringnullable | — | Publisher or feed identifier. |
↳author sources.author | stringnullable | — | Reporting journalist or source author. |
↳published_at sources.published_at | timestamptznullable | — | Source publication timestamp. |
status_enum | stringnullable | — | Standardized player status designation (RULED_OUT, DOUBTFUL, QUESTIONABLE, PROBABLE, CLEARED, MINUTES_LIMIT, MINUTES_LIFTED, STARTING, BENCHED, INACTIVE, ACTIVE, IR_PLACED, IR_ACTIVATED, TRADED, RELEASED, SIGNED, ROUTINE). Values:ACTIVEROUTINEIR_PLACEDBENCHEDINACTIVESTARTINGQUESTIONABLEIR_ACTIVATEDCLEAREDSIGNEDRULED_OUTRELEASEDPROBABLEMINUTES_LIMITTRADEDDOUBTFUL |
title | string | — | Headline of the news report. e.g. Robby Snelling Out Until at Least June 1 with Elbow Injury |
urgency | stringnullable | — | Urgency level of the news event (BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE). Values:ROUTINEHIGHMEDIUMBREAKING_GAME_TIME |
GET/api/v1/mlb/player_news/{id}Get a single player_new by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_new row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/player_news/{pk_value}'Responses
200Single player_new row.application/jsonshow example ▸
404Row not found.
Response Schema(23 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | string | — | Source-specific unique identifier e.g. sportsdata-197163 |
game_id | bigintnullable | Associated game ID when this news item relates to a specific game. e.g. 169744 | |
opponent_team_id | bigintnullable | Opponent team ID when this news item relates to an upcoming or active game matchup. e.g. 16 | |
player_id | bigintnullable | Player ID associated with the news report. e.g. 1369 | |
team_id | bigintnullable | Team ID of the player at the time of publication. e.g. 27 | |
ai_processed | boolean | — | Whether this story was generated or enriched via LLM summarization. Values:falsetrue |
analysis | stringnullable | — | Fantasy and tactical analysis of the news. e.g. — (all-null in sample) |
author | stringnullable | — | Reporter or author of the article. e.g. Staff |
category | stringnullable | — | injury, transaction, lineup, general Values:injurygeneraltransactionlineupdepth_chartcontractsuspensionperformanceworkload |
content | stringnullable | — | Full text content of the news report. e.g. Milwaukee Brewers first baseman/outfielder Jake Bauers is p… |
description | stringnullable | — | Brief synopsis or summary of the news event. e.g. San Francisco pitcher Sam Hentges is sidelined with a forea… |
first_reported_at | timestamptznullable | — | Timestamp when this story was first reported before multi-source compaction. e.g. 2026-09-07T01:25:32.000Z |
link | stringnullable | — | URL link to the original article or source video. e.g. https://www.rotoballer.com/player-news/jake-bauers-is-becom… |
news_time | timestamptz | — | Publication timestamp of the news story. e.g. 2026-09-01T04:00:00.000Z |
priority | integer | — | Display priority score (1-10). e.g. 10 |
processed_at | timestamptznullable | — | Timestamp when the story was processed. e.g. — (all-null in sample) |
situational_impact | jsonbnullable | — | Structured situational impact assessment and fantasy implications for the player. e.g. {"affected_player_ids":[],"affected_players":[]} |
↳type situational_impact.type | stringnullable | — | Impact direction: positive, negative, or neutral. |
↳impact_enum situational_impact.impact_enum | stringnullable | — | Standardized impact state (ACTIVE, CLEARED, QUESTIONABLE, etc.). |
↳reason situational_impact.reason | stringnullable | — | Narrative explaining the fantasy and playing-time impact. |
↳ripple_effect situational_impact.ripple_effect | stringnullable | — | Downstream tactical or fantasy consequences. |
↳affected_players situational_impact.affected_players | listnullable | — | Teammates whose opportunity or role is impacted. |
↳affected_player_ids situational_impact.affected_player_ids | listnullable | — | IDs of impacted teammates. |
source | string | — | News source identifier (cbs, espn, rotoworld, sportsdata, etc.) Values:cbs_sportssportsdatarotoworldespnrotoql_sportsdata |
sources | jsonbnullable | — | Source citations with source name, URL, author, and published timestamp. e.g. [{"published_at":"2026-06-07T01:57:06.000Z","source":"sport… |
↳url sources.url | stringnullable | — | Source article or media link. |
↳source sources.source | stringnullable | — | Publisher or feed identifier. |
↳author sources.author | stringnullable | — | Reporting journalist or source author. |
↳published_at sources.published_at | timestamptznullable | — | Source publication timestamp. |
status_enum | stringnullable | — | Standardized player status designation (RULED_OUT, DOUBTFUL, QUESTIONABLE, PROBABLE, CLEARED, MINUTES_LIMIT, MINUTES_LIFTED, STARTING, BENCHED, INACTIVE, ACTIVE, IR_PLACED, IR_ACTIVATED, TRADED, RELEASED, SIGNED, ROUTINE). Values:ACTIVEROUTINEIR_PLACEDBENCHEDINACTIVESTARTINGQUESTIONABLEIR_ACTIVATEDCLEAREDSIGNEDRULED_OUTRELEASEDPROBABLEMINUTES_LIMITTRADEDDOUBTFUL |
title | string | — | Headline of the news report. e.g. Robby Snelling Out Until at Least June 1 with Elbow Injury |
urgency | stringnullable | — | Urgency level of the news event (BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE). Values:ROUTINEHIGHMEDIUMBREAKING_GAME_TIME |
team_news
mlb.team_newsNews and updates about MLB teams — game previews, managerial changes, front-office moves, and beat reports.
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/mlb/team_newsList team_news for MLB
Requires one of:
team_id — requests satisfying none of these return 400.Parameters
team_idquerybigintoptionalFilter by team.
categoryquerystringoptionalFilter by category (game_preview, coaching, transaction, general, draft, depth_chart). Values: game_preview, coaching, transaction, general, draft, depth_chart.
urgencyquerystringoptionalFilter by news urgency. Values: BREAKING_GAME_TIME, HIGH, MEDIUM, ROUTINE.
news_timequerytimestamptzoptionalFilter by publication time (ISO 8601). Use news_time__gte to poll for items since your last check. Range syntax: news_time__gte=, news_time__lte=, news_time__between=.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_news?team_id=1'Responses
200team_news rows matching the declared filter set, wrapped in { team_news, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/json503Coming soon — handler returns 503 until data is wired in.
Response Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | stringnullable | — | Canonical external identifier for deduplication. e.g. espn-mlb-2026-09-07-White Sox bullpen throws gem in 10-1 win |
game_id | bigintnullable | Associated game ID when news relates to a specific game. e.g. — (all-null in sample) | |
opponent_team_id | bigintnullable | Opponent team ID when news relates to an upcoming or completed game matchup. e.g. — (all-null in sample) | |
team_id | bigint | Team ID that this news event pertains to. e.g. 42 | |
ai_processed | booleannullable | — | Whether this story was generated or enriched via LLM summarization. e.g. true |
category | stringnullable | — | game_preview, coaching, transaction, general e.g. game_preview |
news_time | timestamptz | — | Publication timestamp of the team story. e.g. 2026-09-07T01:48:29.000Z |
sources | jsonbnullable | — | Source citations with publisher name, URL, author, and published timestamp. e.g. [{"published_at":"2026-09-07T01:48:29.000Z","source":"espn"… |
↳url sources.url | stringnullable | — | Source article or media link. |
↳source sources.source | stringnullable | — | Publisher or feed identifier. |
↳author sources.author | stringnullable | — | Reporting journalist or source author. |
↳published_at sources.published_at | timestamptznullable | — | Source publication timestamp. |
summary | string | — | Concise journalistic summary of the team news event. e.g. The White Sox defeated the Minnesota Twins 10-1 behind a do… |
title | string | — | Headline of the team news story. e.g. White Sox Bullpen Dominates in 10-1 Win Over Twins |
urgency | stringnullable | — | ROUTINE, MEDIUM, HIGH, BREAKING_GAME_TIME e.g. ROUTINE |
GET/api/v1/mlb/team_news/{id}Get a single team_new by id
Parameters
idpathbigintrequiredPrimary key (id) of the team_new row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/team_news/{pk_value}'Responses
200Single team_new row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
Response Schema(12 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | stringnullable | — | Canonical external identifier for deduplication. e.g. espn-mlb-2026-09-07-White Sox bullpen throws gem in 10-1 win |
game_id | bigintnullable | Associated game ID when news relates to a specific game. e.g. — (all-null in sample) | |
opponent_team_id | bigintnullable | Opponent team ID when news relates to an upcoming or completed game matchup. e.g. — (all-null in sample) | |
team_id | bigint | Team ID that this news event pertains to. e.g. 42 | |
ai_processed | booleannullable | — | Whether this story was generated or enriched via LLM summarization. e.g. true |
category | stringnullable | — | game_preview, coaching, transaction, general e.g. game_preview |
news_time | timestamptz | — | Publication timestamp of the team story. e.g. 2026-09-07T01:48:29.000Z |
sources | jsonbnullable | — | Source citations with publisher name, URL, author, and published timestamp. e.g. [{"published_at":"2026-09-07T01:48:29.000Z","source":"espn"… |
↳url sources.url | stringnullable | — | Source article or media link. |
↳source sources.source | stringnullable | — | Publisher or feed identifier. |
↳author sources.author | stringnullable | — | Reporting journalist or source author. |
↳published_at sources.published_at | timestamptznullable | — | Source publication timestamp. |
summary | string | — | Concise journalistic summary of the team news event. e.g. The White Sox defeated the Minnesota Twins 10-1 behind a do… |
title | string | — | Headline of the team news story. e.g. White Sox Bullpen Dominates in 10-1 Win Over Twins |
urgency | stringnullable | — | ROUTINE, MEDIUM, HIGH, BREAKING_GAME_TIME e.g. ROUTINE |