MLB
38 tablesEvery 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.
Machine-readable spec: /api/openapi/public.json (OpenAPI 3.1)
Main· 4 tables
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.
▸Fields9
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| league_id | stringnullable | — | Official MLB season identifier |
| short_id | string | — | — |
| description | stringnullable | — | — |
| end_date | timestamptznullable | — | — |
| post_season_start_date | timestamptznullable | — | — |
| regular_season_start_date | timestamptznullable | — | — |
| start_date | timestamptz | — | — |
| start_year | integer | — | — |
GET/api/v1/mlb/seasonsList seasons for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
teams
mlb.teamsThe 30 MLB franchises, organized into the American and National Leagues with three divisions in each.
▸Fields11
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| league_team_id | integernullable | Official MLB team ID from statsapi.mlb.com | |
| venue_id | bigintnullable | — | |
| abbreviation | string | — | — |
| active | boolean | — | — |
| city | string | — | — |
| division | string | — | — |
| full_name | string | — | — |
| league | string | — | — |
| logo_url | stringnullable | — | URL to team logo image |
| name | string | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields31
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| away_team_id | bigint | — | |
| home_team_id | bigint | — | |
| league_game_id | integernullable | Official MLB gamePk from statsapi.mlb.com | |
| league_id | stringnullable | — | Official MLB game identifier |
| losing_pitcher_id | bigintnullable | — | Losing pitcher of record |
| save_pitcher_id | bigintnullable | — | Save pitcher (if any) |
| season_id | bigint | — | |
| venue_id | bigintnullable | — | |
| winning_pitcher_id | bigintnullable | — | Winning pitcher of record |
| attendance | integernullable | — | — |
| away_team_score | integer | — | — |
| channel | stringnullable | — | — |
| day | integer | — | — |
| day_night | stringnullable | — | D=Day, N=Night |
| doubleheader | boolean | — | — |
| duration_minutes | integernullable | — | Total game duration in minutes |
| end_time | timestamptznullable | — | — |
| game_label | stringnullable | — | — |
| game_number | integer | — | For doubleheaders: 1 or 2 |
| game_time | timestamptz | — | Canonical game start time (use this over start_time) |
| game_type | string | — | R=Regular, S=Spring, F=Wild Card, D=Division, L=League, W=World Series, E=Exhibition, A=All-Star |
| home_team_score | integer | — | — |
| if_necessary | booleannullable | — | — |
| neutral_venue | boolean | — | — |
| postponed_status | stringnullable | — | — |
| season_type | string | — | Regular Season, Postseason, Spring Training, All-Star |
| series_game_number | stringnullable | — | — |
| series_name | stringnullable | — | — |
| series_text | stringnullable | — | — |
| status | string | — | Final, Live, Scheduled, Postponed, Suspended, Cancelled |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/games?season_id=2026'Responses
200games rows matching the declared filter set, wrapped in { games, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/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 \
-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.
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.
▸Fields30
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| league_id | stringnullable | — | Official MLB player identifier |
| league_player_id | integer | Official MLB player ID from statsapi.mlb.com | |
| team_id | bigintnullable | — | |
| bats | stringnullable | — | — |
| birth_city | stringnullable | — | — |
| birth_country | stringnullable | — | — |
| birth_date | datenullable | — | — |
| birth_state | stringnullable | — | — |
| debut_date | timestamptznullable | — | — |
| display_fi_last | stringnullable | — | — |
| display_last_comma_first | stringnullable | — | — |
| draft_number | stringnullable | — | — |
| draft_round | stringnullable | — | — |
| draft_year | stringnullable | — | — |
| first_name | string | — | — |
| full_name | string | — | — |
| full_position_list | stringnullable | — | — |
| height | integernullable | — | — |
| jersey | stringnullable | — | — |
| last_name | string | — | — |
| league_slug | stringnullable | — | — |
| position_category | stringnullable | — | — |
| primary_position | string | — | — |
| profile_pic_url | stringnullable | — | URL to player profile picture image |
| roster_status | stringnullable | — | — |
| school | stringnullable | — | — |
| status | stringnullable | — | — |
| throws | stringnullable | — | — |
| weight | integernullable | — | — |
GET/api/v1/mlb/playersList players for MLB
Parameters
team_idquerybigintoptionalFilter to players whose current team_id matches. Null team_id rows (free agents, retired) are excluded when this filter is applied.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/players?limit=3'Responses
200players rows matching the declared filter set, wrapped in { players, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/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 \
-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.
Plays· 4 tables
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.
▸Fields10
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| away_team_errors | integer | — | — |
| away_team_hits | integer | — | — |
| away_team_runs | integer | — | — |
| home_team_errors | integer | — | — |
| home_team_hits | integer | — | — |
| home_team_runs | integer | — | — |
| inning_half | string | — | — |
| inning_number | integer | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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).
▸Fields72
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| at_bat_id | bigint | — | — |
| batter_id | bigint | — | — |
| game_id | bigint | — | |
| pitcher_id | bigint | — | — |
| play_id | bigint | — | — |
| air_out | boolean | — | Whether this pitch resulted in an air out |
| ball | boolean | — | — |
| barrel | booleannullable | — | Optimal combination of exit velocity and launch angle |
| break_angle | floatnullable | — | — |
| break_length | floatnullable | — | — |
| break_y | floatnullable | — | — |
| breaking_ball | booleannullable | — | Breaking ball (curveball, slider, knuckleball) |
| call | string | — | — |
| catchers_interference | boolean | — | Whether this pitch resulted in catchers interference |
| chase | booleannullable | — | Whether batter swung at pitch outside zone |
| double | boolean | — | Whether this pitch resulted in a double |
| effective_speed | floatnullable | — | Perceived speed to batter (mph) |
| expected_batting_avg | decimalnullable | — | xBA based on exit velocity and launch angle |
| expected_woba | decimalnullable | — | xwOBA based on exit velocity and launch angle |
| extension | floatnullable | — | — |
| fastball | booleannullable | — | Fastball variant (4-seam, 2-seam, sinker, cutter) |
| flare_burner | booleannullable | — | Launch angle 10-25 AND exit velocity < 95 |
| fly_out | boolean | — | Whether this pitch resulted in a fly out |
| ground_into_double_play | boolean | — | Whether this pitch resulted in grounding into double play |
| ground_into_triple_play | boolean | — | Whether this pitch resulted in grounding into triple play |
| ground_out | boolean | — | Whether this pitch resulted in a ground out |
| hard_hit | booleannullable | — | Exit velocity >= 95 MPH |
| hit_by_pitch | boolean | — | Whether this pitch resulted in hit by pitch |
| hit_coord_x | floatnullable | — | Hit coordinate X (feet from home plate) |
| hit_coord_y | floatnullable | — | Hit coordinate Y (feet from home plate) |
| hit_distance | integernullable | — | Distance of batted ball (feet) |
| hit_exit_velocity | floatnullable | — | Exit velocity of batted ball (mph) |
| hit_launch_angle | floatnullable | — | Launch angle of batted ball (degrees) |
| home_run | boolean | — | Whether this pitch resulted in a home run |
| in_play | boolean | — | — |
| in_strike_zone | booleannullable | — | Whether pitch was in the strike zone |
| intentional_walk | boolean | — | Whether this pitch resulted in an intentional walk |
| launch_speed_angle_zone | integernullable | — | 1=Weak, 2=Topped, 3=Under, 4=Flare/Burner, 5=Solid, 6=Barrel |
| line_out | boolean | — | Whether this pitch resulted in a line out |
| offspeed | booleannullable | — | Offspeed pitch (changeup, splitter, forkball) |
| pitch_number | integer | — | — |
| pitch_speed | floatnullable | — | — |
| pitch_type | stringnullable | — | — |
| pitch_x | floatnullable | — | — |
| pitch_y | floatnullable | — | — |
| pitch_z | floatnullable | — | — |
| pitch_zone | integernullable | — | — |
| plate_x | floatnullable | — | — |
| plate_z | floatnullable | — | — |
| pop_out | boolean | — | Whether this pitch resulted in a pop out |
| release_speed | floatnullable | — | Speed at release point (mph) |
| result | string | — | — |
| sacrifice_fly | boolean | — | Whether this pitch resulted in a sacrifice fly |
| sacrifice_hit | boolean | — | Whether this pitch resulted in a sacrifice bunt |
| single | boolean | — | Whether this pitch resulted in a single |
| solid_contact | booleannullable | — | Launch angle 20-25 AND exit velocity 95-100 |
| spin_axis | floatnullable | — | Spin axis (degrees) |
| spin_direction | floatnullable | — | — |
| spin_rate | floatnullable | — | — |
| spray_angle | floatnullable | — | Horizontal angle from center field (degrees) |
| statcast_quality_score | decimalnullable | — | Statcast data quality score (0.0-1.0) |
| strike | boolean | — | — |
| strike_zone_bottom | floatnullable | — | — |
| strike_zone_top | floatnullable | — | — |
| strikeout | boolean | — | Whether this pitch resulted in a strikeout |
| sweet_spot | booleannullable | — | Launch angle between 8-32 degrees |
| topped | booleannullable | — | Launch angle < 10 AND exit velocity < 90 |
| tracking_confidence | decimalnullable | — | Confidence in tracking data accuracy |
| triple | boolean | — | Whether this pitch resulted in a triple |
| under | booleannullable | — | Launch angle less than 10 degrees |
| walk | boolean | — | Whether this pitch resulted in a 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.).
▸Fields35
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| batter_id | bigint | — | — |
| game_id | bigint | — | |
| inning_id | bigint | — | |
| pitcher_id | bigint | — | — |
| at_bat_number | integer | — | — |
| balls | integer | — | — |
| end_outs | integer | — | — |
| end_runners | integer | — | — |
| expected_batting_avg | decimalnullable | — | — |
| expected_woba | decimalnullable | — | — |
| hit_coord_x | floatnullable | — | — |
| hit_coord_y | floatnullable | — | — |
| hit_distance | integernullable | — | — |
| hit_exit_velocity | floatnullable | — | — |
| hit_launch_angle | floatnullable | — | — |
| hit_location | stringnullable | — | — |
| hit_type | stringnullable | — | — |
| is_barrel | booleannullable | — | — |
| is_flare_burner | booleannullable | — | Launch angle 10-25 AND exit velocity < 95 |
| is_hard_hit | booleannullable | — | — |
| is_solid_contact | booleannullable | — | Launch angle 20-25 AND exit velocity 95-100 |
| is_sweet_spot | booleannullable | — | Launch angle between 8-32 degrees |
| is_topped | booleannullable | — | Launch angle < 10 AND exit velocity < 90 |
| is_under | booleannullable | — | Launch angle less than 10 degrees |
| launch_speed_angle_zone | integernullable | — | — |
| pitch_count | integer | — | — |
| result | string | — | — |
| runs_scored | integer | — | — |
| spray_angle | floatnullable | — | Horizontal angle from center field (degrees) |
| start_outs | integer | — | — |
| start_runners | integer | — | — |
| statcast_quality_score | decimalnullable | — | Statcast data quality score (0.0-1.0) |
| strikes | integer | — | — |
| tracking_confidence | decimalnullable | — | Confidence in tracking data accuracy |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields22
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| at_bat_id | bigintnullable | — | — |
| batter_id | bigintnullable | — | — |
| catcher_id | bigintnullable | — | — |
| first_base_runner_id | bigintnullable | — | — |
| game_id | bigint | — | |
| inning_id | bigint | — | |
| pitcher_id | bigintnullable | — | — |
| play_id | bigint | — | — |
| player_id | bigintnullable | — | |
| second_base_runner_id | bigintnullable | — | — |
| team_id | bigint | — | |
| third_base_runner_id | bigintnullable | — | — |
| count_balls | integer | — | — |
| count_strikes | integer | — | — |
| event_sub_type | integer | — | — |
| event_type | integer | — | — |
| hit_location | stringnullable | — | — |
| hit_type | stringnullable | — | — |
| mlb_event_num | integer | — | — |
| outs | integer | — | — |
| runners_on_base | integer | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
Stats· 10 tables
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.
▸Fields18
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| season_id | bigint | — | |
| venue_id | bigint | — | |
| basic_park_factor | decimal | — | Overall park factor for runs (1.0 = neutral) |
| double_factor | decimal | — | Park factor for doubles |
| fly_ball_factor | decimalnullable | — | Park factor for fly balls |
| ground_ball_factor | decimalnullable | — | Park factor for ground balls |
| handedness_factor | decimal | — | Park effect on handedness advantage |
| home_run_factor | decimal | — | Park factor for home runs (1.0 = neutral) |
| left_handed_factor | decimal | — | Park factor for left-handed batters |
| right_handed_factor | decimal | — | Park factor for right-handed batters |
| run_factor | decimalnullable | — | Park factor for total runs |
| single_factor | decimal | — | Park factor for singles |
| strikeout_factor | decimal | — | Park factor for strikeouts |
| triple_factor | decimal | — | Park factor for triples |
| updated_date | timestamptz | — | — |
| walk_factor | decimal | — | Park factor for walks |
| years_of_data | integer | — | Number of years used to calculate factors |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields10
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| season_id | bigint | — | |
| batting_average_on_balls_in_play | decimal | — | League average BABIP |
| fip_constant | decimal | — | FIP constant to scale FIP to ERA |
| home_run_per_fly_ball | decimal | — | League average HR/FB rate |
| runs_per_out | decimal | — | League average runs per out made |
| runs_per_plate_appearance | decimal | — | League average runs per plate appearance |
| strikeout_rate | decimal | — | League average strikeout rate |
| updated_date | timestamptz | — | — |
| walk_rate | decimal | — | League average walk rate |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/season_run_environments?season_id=2026'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/jsonGET/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 \
-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.
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+.
▸Fields12
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| season_id | bigint | — | |
| double_weight | decimal | — | Weight for doubles (w2B) |
| hit_by_pitch_weight | decimal | — | Weight for hit by pitch (wHBP) |
| home_run_weight | decimal | — | Weight for home runs (wHR) |
| league_obp | decimal | — | League average OBP for calibration |
| league_woba | decimal | — | League average wOBA for the season |
| single_weight | decimal | — | Weight for singles (w1B) |
| triple_weight | decimal | — | Weight for triples (w3B) |
| updated_date | timestamptz | — | When these weights were last updated |
| walk_weight | decimal | — | Weight for unintentional walks (wBB) |
| woba_scale | decimal | — | Scale factor to convert wOBA to runs |
GET/api/v1/mlb/woba_weightsList woba_weights for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields6
| 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 |
⚠️ 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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.
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 \
-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.
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).
▸Fields36
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| season_id | bigint | — | |
| team_id | bigint | — | |
| at_bats | integer | — | — |
| batting_average | decimal | — | — |
| blown_saves | integer | — | — |
| caught_stealing | integer | — | — |
| complete_games | integer | — | — |
| double_plays | integer | — | — |
| doubles | integer | — | — |
| earned_run_average | decimal | — | — |
| earned_runs | integer | — | — |
| errors | integer | — | — |
| fielding_percentage | decimal | — | — |
| games_played | integer | — | — |
| hits | integer | — | — |
| holds | integer | — | — |
| home_runs | integer | — | — |
| innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) |
| losses | integer | — | — |
| on_base_percentage | decimal | — | — |
| on_base_plus_slugging | decimal | — | — |
| runs_allowed | integer | — | — |
| runs_batted_in | integer | — | — |
| runs_scored | integer | — | — |
| save_opportunities | integer | — | — |
| saves | integer | — | — |
| shutouts | integer | — | — |
| slugging_percentage | decimal | — | — |
| stolen_bases | integer | — | — |
| strikeouts | integer | — | — |
| ties | integer | — | — |
| triples | integer | — | — |
| walks | integer | — | — |
| whip | decimal | — | — |
| wins | integer | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/season_team_stats?season_id=2026'Responses
200season_team_stats rows matching the declared filter set, wrapped in { season_team_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/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 \
-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.
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.
▸Fields42
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| player_id | bigint | — | |
| team_id | bigint | — | |
| air_outs | integer | — | — |
| at_bats | integer | — | — |
| at_bats_per_home_run | decimal | — | — |
| babip | decimal | — | — |
| balls_in_play | integer | — | — |
| batting_average | decimal | — | — |
| catchers_interference | integer | — | — |
| caught_stealing | integer | — | — |
| double_plays | integer | — | — |
| doubles | integer | — | — |
| fly_outs | integer | — | — |
| ground_into_double_play | integer | — | — |
| ground_into_triple_play | integer | — | — |
| ground_outs | integer | — | — |
| hit_by_pitch | integer | — | — |
| hits | integer | — | — |
| home_runs | integer | — | — |
| intentional_walks | integer | — | — |
| isolated_power | decimal | — | — |
| left_on_base | integer | — | — |
| line_outs | integer | — | — |
| on_base_percentage | decimal | — | — |
| on_base_plus_slugging | decimal | — | — |
| pickoffs | integer | — | — |
| plate_appearances | integer | — | — |
| pop_outs | integer | — | — |
| runs | integer | — | — |
| runs_batted_in | integer | — | — |
| sacrifice_flies | integer | — | — |
| sacrifices | integer | — | — |
| singles | integer | — | — |
| slugging_percentage | decimal | — | — |
| stolen_bases | integer | — | — |
| strikeouts | integer | — | — |
| total_bases | integer | — | — |
| triples | integer | — | — |
| walks | integer | — | — |
| woba | decimal | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields68
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| player_id | bigint | — | |
| team_id | bigint | — | |
| air_outs | integer | — | — |
| babip | decimal | — | — |
| balks | integer | — | — |
| balls | integer | — | — |
| balls_in_play | integer | — | — |
| batters_faced | integer | — | — |
| blown_save | integer | — | — |
| catchers_interference | integer | — | — |
| complete_games | integer | — | — |
| double_plays | integer | — | — |
| doubles_allowed | integer | — | — |
| earned_run_average | decimal | — | — |
| earned_runs | integer | — | — |
| fip | decimal | — | — |
| fly_outs | integer | — | — |
| games_finished | integer | — | — |
| games_pitched | integer | — | — |
| games_started | integer | — | — |
| grand_slams_allowed | integer | — | — |
| ground_into_double_play | integer | — | — |
| ground_outs | integer | — | — |
| hit_by_pitch | integer | — | — |
| hits_allowed | integer | — | — |
| hold | integer | — | — |
| home_runs_allowed | integer | — | — |
| home_runs_per_nine | decimal | — | — |
| inherited_runners | integer | — | — |
| inherited_runners_scored | integer | — | — |
| inning_started | integer | — | — |
| innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) |
| intentional_walks | integer | — | — |
| left_on_base | decimal | — | — |
| line_outs | integer | — | — |
| loss | integer | — | — |
| no_hitters | integer | — | — |
| on_base_percentage | decimal | — | — |
| on_base_plus_slugging | decimal | — | — |
| outs | integer | — | — |
| perfect_games | integer | — | — |
| pickoffs | integer | — | — |
| pitches_thrown | integer | — | — |
| plate_appearances | integer | — | — |
| pop_outs | integer | — | — |
| quality_starts | integer | — | — |
| runs_allowed | integer | — | — |
| runs_scored_per_nine | decimal | — | — |
| sacrifice_flies_allowed | integer | — | — |
| sacrifices_allowed | integer | — | — |
| save | integer | — | — |
| shutouts | integer | — | — |
| singles_allowed | integer | — | — |
| slugging_percentage | decimal | — | — |
| strike_percentage | decimal | — | — |
| strikeouts_per_nine | decimal | — | — |
| strikeouts_pitched | integer | — | — |
| strikes | integer | — | — |
| total_bases_allowed | integer | — | — |
| triples_allowed | integer | — | — |
| walks_allowed | integer | — | — |
| walks_per_nine | decimal | — | — |
| whip | decimal | — | — |
| wild_pitches | integer | — | — |
| win | integer | — | — |
| woba | decimal | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields37
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| team_id | bigint | — | |
| assists | integer | — | — |
| balks | integer | — | — |
| batters_faced | integer | — | — |
| batting_average | decimal | — | — |
| caught_stealing | integer | — | — |
| double_plays_turned | integer | — | — |
| doubles | integer | — | — |
| earned_run_average | decimal | — | — |
| earned_runs | integer | — | — |
| errors | integer | — | — |
| grounded_into_double_play | integer | — | — |
| hit_by_pitch | integer | — | — |
| hits | integer | — | — |
| home_runs | integer | — | — |
| innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) |
| left_on_base | integer | — | — |
| loss | integer | — | — |
| on_base_percentage | decimal | — | — |
| on_base_plus_slugging | decimal | — | — |
| passed_balls | integer | — | — |
| pitches_thrown | integer | — | — |
| putouts | integer | — | — |
| runs | integer | — | — |
| runs_batted_in | integer | — | — |
| sacrifice_flies | integer | — | — |
| sacrifice_hits | integer | — | — |
| slugging_percentage | decimal | — | — |
| stolen_bases | integer | — | — |
| strikeouts | integer | — | — |
| strikes | integer | — | — |
| triples | integer | — | — |
| walks | integer | — | — |
| wild_pitches | integer | — | — |
| win | integer | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields6
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io. | |
| operator_player_id | string | External player ID from operator | |
| player_id | bigint | Internal mlb.players.id reference | |
| player_name | stringnullable | — | Player name for reconciliation |
| position | stringnullable | — | Position for reconciliation |
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 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields69
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| player_id | bigint | — | |
| season_id | bigint | — | |
| assists | integer | — | — |
| at_bats | integer | — | — |
| balls | integernullable | — | — |
| batters_faced | integer | — | — |
| batting_average | decimal | — | — |
| blown_saves | integer | — | — |
| caught_stealing | integer | — | — |
| caught_stealing_by | integer | — | — |
| complete_games | integer | — | — |
| double_plays | integer | — | — |
| doubles | integer | — | — |
| earned_run_average | decimal | — | — |
| earned_runs | integer | — | — |
| errors | integer | — | — |
| fielding_games | integer | — | — |
| fielding_games_started | integer | — | — |
| fielding_percentage | decimal | — | — |
| fielding_position | string | — | — |
| games_pitched | integer | — | — |
| games_played | integer | — | — |
| games_started | integer | — | — |
| games_started_pitching | integer | — | — |
| grounded_into_double_play | integer | — | — |
| hit_by_pitch | integer | — | — |
| hits | integer | — | — |
| hits_allowed | integer | — | — |
| hits_per_nine | decimal | — | — |
| holds | integer | — | — |
| home_runs | integer | — | — |
| home_runs_allowed | integer | — | — |
| home_runs_per_nine | decimal | — | — |
| innings_pitched | decimal | — | Innings pitched in MLB notation (6.2 = 6 and 2/3 innings) |
| intentional_walks | integernullable | — | — |
| left_on_base | integernullable | — | — |
| losses | integer | — | — |
| on_base_percentage | decimal | — | — |
| on_base_plus_slugging | decimal | — | — |
| passed_balls | integer | — | — |
| pitches_thrown | integernullable | — | — |
| plate_appearances | integer | — | — |
| putouts | integer | — | — |
| quality_starts | integernullable | — | — |
| runs | integer | — | — |
| runs_allowed | integer | — | — |
| runs_batted_in | integer | — | — |
| sacrifice_flies | integer | — | — |
| sacrifice_hits | integer | — | — |
| save_opportunities | integer | — | — |
| saves | integer | — | — |
| shutouts | integer | — | — |
| singles | integernullable | — | Derivable from hits - doubles - triples - home_runs |
| slugging_percentage | decimal | — | — |
| stolen_bases | integer | — | — |
| stolen_bases_allowed | integer | — | — |
| strikeouts | integer | — | — |
| strikeouts_per_nine | decimal | — | — |
| strikeouts_pitched | integer | — | — |
| strikes | integernullable | — | — |
| total_bases | integernullable | — | Derivable: 1B + 2*2B + 3*3B + 4*HR |
| total_chances | integer | — | — |
| triples | integer | — | — |
| walks | integer | — | — |
| walks_allowed | integer | — | — |
| walks_per_nine | decimal | — | — |
| whip | decimal | — | — |
| wins | integer | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/season_player_stats?season_id=2026'Responses
200season_player_stats rows matching the declared filter set, wrapped in { season_player_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/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 \
-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.
Odds· 5 tables
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).
▸Fields11
| 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) |
⚠️ 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/series_odds?season_id=2026'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.
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 \
-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.
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.
▸Fields6
| 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 | — | — |
⚠️ 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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.
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 \
-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.
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).
▸Fields18
| 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 | — | When this snapshot was captured |
| implied_away_score | decimalnullable | — | — |
| implied_away_win_pct | decimalnullable | — | — |
| implied_home_score | decimalnullable | — | Calculated from spread + total |
| implied_home_win_pct | decimalnullable | — | From moneyline, 0-1 |
| is_opening | boolean | — | True if this is the opening line |
| moneyline_away | integernullable | — | American odds for away team win |
| moneyline_home | integernullable | — | American odds for home team win |
| over_odds | integernullable | — | American odds for over |
| spread | decimalnullable | — | Home team run line (e.g., -1.5 means home favored by 1.5 runs) |
| spread_away_odds | integernullable | — | American odds for away run line |
| spread_home_odds | integernullable | — | American odds for home run line (e.g., -130) |
| total | decimalnullable | — | Combined run total line (e.g., 8.5) |
| under_odds | integernullable | — | American odds for under |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields17
| 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 | — | — |
⚠️ 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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.
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 \
-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.
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.
▸Fields18
| 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 | — | — |
⚠️ 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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.
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 \
-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.
Lineups & Roster· 4 tables
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.
▸Fields10
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| player_id | bigint | — | |
| team_id | bigint | — | |
| batting_order | integernullable | — | — |
| comment | stringnullable | — | — |
| day | integer | — | — |
| position | stringnullable | — | — |
| starter | boolean | — | — |
| status | stringnullable | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields9
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| player_id | bigint | — | |
| season_id | bigint | — | |
| team_id | bigint | — | |
| day | integer | — | — |
| position | stringnullable | — | — |
| position_depth | integernullable | — | — |
| position_group | stringnullable | — | — |
| roster_type | string | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields5
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| player_id | bigint | — | |
| team_starting_lineup_id | bigint | — | — |
| batting_order | string | — | — |
| position | string | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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).
▸Fields6
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| pitcher_id | bigintnullable | — | — |
| team_id | bigint | — | |
| batter_status | integer | — | — |
| pitcher_status | integer | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
Misc· 11 tables
venues
mlb.venuesMLB ballparks — current home stadiums and historical venues, with dimensions, surface, capacity, and roof type.
▸Fields21
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| league_venue_id | integernullable | Official MLB venue ID from statsapi.mlb.com | |
| address | stringnullable | — | — |
| capacity | integernullable | — | — |
| city | string | — | — |
| closed_date | timestamptznullable | — | — |
| country | stringnullable | — | — |
| description | stringnullable | — | — |
| elevation | floatnullable | — | Elevation in feet above sea level |
| hr_factor | decimalnullable | — | Historical home run park factor (1.0 = neutral) |
| image_url | stringnullable | — | URL to aerial/overview image of ballpark |
| latitude | floatnullable | — | — |
| longitude | floatnullable | — | — |
| name | string | — | — |
| opened_date | timestamptznullable | — | — |
| orientation | floatnullable | — | Field orientation in degrees (0-360). Direction home plate faces. 0/360=North, 90=East, 180=South, 270=West |
| roof_type | stringnullable | — | Open, Dome, Retractable |
| state | stringnullable | — | — |
| surface | stringnullable | — | — |
| team_name | stringnullable | — | — |
| timezone | stringnullable | — | IANA timezone (e.g., America/New_York) |
GET/api/v1/mlb/venuesList venues for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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).
▸Fields11
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| mlb_umpire_id | integer | — | |
| active | boolean | — | — |
| birth_city | stringnullable | — | — |
| birth_country | stringnullable | — | — |
| birth_date | datenullable | — | — |
| birth_state | stringnullable | — | — |
| experience | integernullable | — | — |
| first_name | string | — | — |
| full_name | string | — | — |
| last_name | string | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields21
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| mlb_venue_id | integer | — | |
| venue_id | bigint | — | |
| altitude_ft | floatnullable | — | Venue altitude in feet (denormalized from venue for query convenience) |
| backstop_distance | floatnullable | — | Distance from home plate to backstop (feet) |
| center_field | float | — | — |
| center_field_fence_height | float | — | — |
| description | stringnullable | — | — |
| fair_territory_sq_ft | floatnullable | — | — |
| foul_territory_rating | decimalnullable | — | Relative foul territory size (1.0 = average, >1 = large) |
| foul_territory_sq_ft | floatnullable | — | — |
| left_center_field | floatnullable | — | — |
| left_field | float | — | — |
| left_field_fence_height | float | — | — |
| orientation | float | — | — |
| right_center_field | floatnullable | — | — |
| right_field | float | — | — |
| right_field_fence_height | float | — | — |
| total_territory_sq_ft | floatnullable | — | — |
| venue_name | stringnullable | — | — |
| year | integer | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields12
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| broadcaster_id | integer | — | |
| 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 | — | — |
⚠️ 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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.
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 \
-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.
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.
▸Fields12
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| away_team_id | bigint | — | |
| home_team_id | bigint | — | |
| season_id | bigint | — | |
| series_id | bigint | — | — |
| away_team_wins | integer | — | — |
| games_played | integer | — | — |
| home_team_wins | integer | — | — |
| max_games | integer | — | — |
| series_name | string | — | — |
| series_text | string | — | — |
| status | string | — | — |
GET/api/v1/mlb/playoffsList playoffs for MLB
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
game_broadcasters
mlb.game_broadcastersWhich networks broadcast each MLB game — the national TV partner, regional carriers, radio calls, and streaming providers.
▸Fields4
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| broadcaster_id | bigint | — | |
| game_id | bigint | — | |
| broadcaster_type | string | — | — |
⚠️ 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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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.
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 \
-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.
game_umpires
mlb.game_umpiresThe umpiring crew assigned to each MLB game — who worked home plate, who worked each base.
▸Fields4
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| umpire_id | bigint | — | |
| position | stringnullable | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields8
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| player_id | bigint | — | |
| season_id | bigint | — | |
| team_id | bigintnullable | — | |
| award_date | datenullable | — | Date the award was announced |
| award_name | string | — | — |
| award_type | string | — | — |
| is_winner | boolean | — | statsapi publishes recipients (winners) only — always true |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields16
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| player_id | bigint | — | |
| season_id | bigint | — | |
| team_id | bigint | — | |
| body_part | string | — | — |
| description | stringnullable | — | — |
| end_date | timestamptznullable | — | — |
| expected_return_date | timestamptznullable | — | — |
| games_missed | integernullable | — | — |
| injury_type | string | — | — |
| is_surgery_required | booleannullable | — | — |
| side | stringnullable | — | — |
| source | stringnullable | — | — |
| start_date | timestamptz | — | — |
| status | string | — | — |
| updated_date | timestamptz | — | — |
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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
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.
▸Fields17
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| external_id | string | — | Source-specific unique identifier |
| player_id | bigintnullable | — | |
| team_id | bigintnullable | — | |
| ai_processed | boolean | — | — |
| analysis | stringnullable | — | — |
| author | stringnullable | — | — |
| category | stringnullable | — | injury, transaction, lineup, general |
| content | stringnullable | — | — |
| description | stringnullable | — | — |
| link | stringnullable | — | — |
| news_time | timestamptz | — | — |
| priority | integer | — | — |
| processed_at | timestamptznullable | — | — |
| situational_impact | jsonbnullable | — | — |
| source | string | — | News source identifier (cbs, espn, rotoworld, sportsdata, etc.) |
| title | string | — | — |
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.
news_timequerytimestamptzoptionalFilter by publication time (ISO 8601). Use news_time__gte to poll for items since your last check. Range syntax: news_time__gte=, news_time__lte=, news_time__between=.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/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/jsonGET/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 \
-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.
venue_weathers
mlb.venue_weathersOn-field weather throughout each MLB game — temperature, wind direction and speed, humidity, and precipitation captured at fixed intervals from first pitch.
▸Fields27
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | |
| venue_id | bigint | — | |
| air_density | floatnullable | — | Calculated air density (lb/ft³) |
| ball_carry_factor | decimalnullable | — | Estimated ball carry factor (1.0 = neutral, >1 = carries more) |
| cloud_cover | floatnullable | — | — |
| dew_point | floatnullable | — | — |
| feels_like_temperature | floatnullable | — | — |
| humidity | floatnullable | — | — |
| is_dome | booleannullable | — | — |
| precipitation | floatnullable | — | — |
| precipitation_probability | floatnullable | — | — |
| pressure | floatnullable | — | — |
| recorded_at | timestamptznullable | — | — |
| roof_status | stringnullable | — | open, closed, retractable_open, retractable_closed |
| temperature | floatnullable | — | — |
| time_minutes | integer | — | Minutes from game start (0, 30, 60, 90, 120, 150, 180 for 3-hour game) |
| uv_index | floatnullable | — | — |
| visibility | floatnullable | — | — |
| weather_condition | stringnullable | — | — |
| weather_description | stringnullable | — | — |
| wind_blowing_out | booleannullable | — | True if wind is blowing from home plate toward outfield |
| wind_component_out | floatnullable | — | Wind speed component blowing out to CF (mph, negative = blowing in) |
| wind_direction | floatnullable | — | — |
| wind_direction_relative | floatnullable | — | Wind direction relative to batter's box (degrees) |
| wind_gust | floatnullable | — | — |
| wind_speed | floatnullable | — | — |
GET/api/v1/mlb/venue_weathersList venue_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 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/venue_weathers?game_id=1'Responses
200venue_weathers rows matching the declared filter set, wrapped in { venue_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/jsonGET/api/v1/mlb/venue_weathers/{id}Get a single venue_weather by id
Parameters
idpathbigintrequiredPrimary key (id) of the venue_weather row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/mlb/venue_weathers/{pk_value}'Responses
200Single venue_weather row.application/jsonshow example ▸
404Row not found.