STAT-API

MLB API Reference

Every MLB game from spring training through the World Series — the 162-game regular season, the postseason bracket, plus the players, ballparks, umpires, weather, Statcast metrics, and pitch-by-pitch detail.

Main

seasonsmlb.seasons
Each MLB season — spring training, the 162-game regular season, the Wild Card Series, the Division Series, the League Championship Series, and the World Series.
GET/api/v1/mlb/seasons
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/seasons/{id}
Parameters
idpathbigintrequired
Primary key (id) of the season row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/seasons/{pk_value}'
Responses
200Single season row.application/jsonshow example ▸
404Row not found.
teamsmlb.teams
The 30 MLB franchises, organized into the American and National Leagues with three divisions in each.
GET/api/v1/mlb/teams
Parameters
activequerybooleanoptional
Filter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/teams/{id}
Parameters
idpathbigintrequired
Primary key (id) of the team row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/teams/{pk_value}'
Responses
200Single team row.application/jsonshow example ▸
404Row not found.
gamesmlb.games
Every scheduled and played MLB game — spring training exhibitions, the 162-game regular season, the Wild Card Series, the Division and Championship Series, and the World Series.
GET/api/v1/mlb/games
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
home_team_idquerybigintoptional
Filter by home team.
away_team_idquerybigintoptional
Filter by away team.
statusquerystringoptional
Filter by game status.
dayqueryintegeroptional
Filter by calendar day (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 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/games/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/games/{pk_value}'
Responses
200Single game row.application/jsonshow example ▸
404Row not found.
playersmlb.players
Every individual who has played in Major League Baseball — current 26-man and 40-man rosters, minor-league call-ups, players on the injured list, free agents, and retired players.
GET/api/v1/mlb/players
Requires one of: team_id or roster_status — requests satisfying none of these return 400.
Parameters
team_idquerybigintoptional
Filter to players whose current team_id matches. Null team_id rows (free agents, retired) are excluded when this filter is applied.
roster_statusquerystringoptional
Filter by canonical roster status. The "on a team now" set is {active, injured_reserve, non_roster} (active 26-man, injured list, and 40-man-but-optioned); free_agent/retired/inactive are off-roster. Values: active, injured_reserve, non_roster, free_agent, retired, inactive.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/players?team_id=1'
Responses
200players rows matching the declared filter set, wrapped in { players, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.application/json
GET/api/v1/mlb/players/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/players/{pk_value}'
Responses
200Single player row.application/jsonshow example ▸
404Row not found.

Plays

inningsmlb.innings
Each half-inning of every MLB game — runs scored, hits, errors, base traffic, plate appearances, who pitched, and how the offense ended each frame.
GET/api/v1/mlb/innings
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/innings/{id}
Parameters
idpathbigintrequired
Primary key (id) of the inning row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/innings/{pk_value}'
Responses
200Single inning row.application/jsonshow example ▸
404Row not found.
pitchesmlb.pitches
Every individual pitch thrown in every MLB game — the pitch type, velocity, location, movement, spin, and the result (called strike, swinging strike, foul, ball, hit, walk).
GET/api/v1/mlb/pitches
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/pitches/{id}
Parameters
idpathbigintrequired
Primary key (id) of the pitche row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/pitches/{pk_value}'
Responses
200Single pitche row.application/jsonshow example ▸
404Row not found.
at_batsmlb.at_bats
Every plate appearance in every MLB game — the batter, the pitcher, the count, the pitch sequence, and the outcome (single, double, home run, strikeout, walk, hit-by-pitch, etc.).
GET/api/v1/mlb/at_bats
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/at_bats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the at_bat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/at_bats/{pk_value}'
Responses
200Single at_bat row.application/jsonshow example ▸
404Row not found.
play_by_playsmlb.play_by_plays
Every individual play of every MLB game — every plate appearance, baserunning event, defensive play, and substitution with the inning, outs, base state, and score at the moment.
GET/api/v1/mlb/play_by_plays
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/play_by_plays/{id}
Parameters
idpathbigintrequired
Primary key (id) of the play_by_play row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/play_by_plays/{pk_value}'
Responses
200Single play_by_play row.application/jsonshow example ▸
404Row not found.

Stats

season_team_statsmlb.season_team_stats
Season totals for each MLB team — wins and losses, runs scored and allowed, batting and pitching aggregates, fielding stats, and advanced team metrics (BaseRuns, pythagorean expectation, run differential).
GET/api/v1/mlb/season_team_stats
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/season_team_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the season_team_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/season_team_stats/{pk_value}'
Responses
200Single season_team_stat row.application/jsonshow example ▸
404Row not found.
game_player_batter_statsmlb.game_player_batter_stats
Each batter's box-score stat line for each MLB game — at-bats, hits, doubles, triples, home runs, RBIs, walks, strikeouts, stolen bases, and runs scored.
GET/api/v1/mlb/game_player_batter_stats
Requires one of: game_id or player_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/game_player_batter_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_player_batter_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_player_batter_stats/{pk_value}'
Responses
200Single game_player_batter_stat row.application/jsonshow example ▸
404Row not found.
game_player_pitching_statsmlb.game_player_pitching_stats
Each pitcher's box-score stat line for each MLB game — innings pitched, hits and runs allowed, earned runs, walks, strikeouts, home runs allowed, and pitches thrown.
GET/api/v1/mlb/game_player_pitching_stats
Requires one of: game_id or player_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/game_player_pitching_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_player_pitching_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_player_pitching_stats/{pk_value}'
Responses
200Single game_player_pitching_stat row.application/jsonshow example ▸
404Row not found.
game_team_statsmlb.game_team_stats
Each MLB team's stat line for each game — runs, hits, errors, batting averages, pitching lines, broken out per game with home/away context.
GET/api/v1/mlb/game_team_stats
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/game_team_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_team_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_team_stats/{pk_value}'
Responses
200Single game_team_stat row.application/jsonshow example ▸
404Row not found.
season_player_statsmlb.season_player_stats
Season totals for each MLB player — the full batting line (AVG, OBP, SLG, OPS), counting stats (HR, RBI, SB, R), and pitching line (W, L, ERA, WHIP, K, BB). Advanced run-value metrics (wRC+, FIP, WAR) are not carried here. Scope is not split by season type.
GET/api/v1/mlb/season_player_stats
Requires one of: season_id or player_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/season_player_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the season_player_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/season_player_stats/{pk_value}'
Responses
200Single season_player_stat row.application/jsonshow example ▸
404Row not found.

Advanced Stats

park_factorsmlb.park_factors
How each MLB ballpark inflates or suppresses run-scoring categories — runs, home runs, doubles, triples, and batting average relative to a neutral park, computed per season.
GET/api/v1/mlb/park_factors
Requires one of: venue_id — requests satisfying none of these return 400.
Parameters
venue_idquerybigintoptional
Filter by venue.
season_idquerybigintoptional
Filter to a season.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/park_factors/{id}
Parameters
idpathbigintrequired
Primary key (id) of the park_factor row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/park_factors/{pk_value}'
Responses
200Single park_factor row.application/jsonshow example ▸
404Row not found.
season_run_environmentsmlb.season_run_environments
League-wide offensive context per MLB season — average runs per game, league batting line, ERA, and the offensive baseline used to normalize player and team stats across eras.
GET/api/v1/mlb/season_run_environments
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/season_run_environments/{id}
Parameters
idpathbigintrequired
Primary key (id) of the season_run_environment row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/season_run_environments/{pk_value}'
Responses
200Single season_run_environment row.application/jsonshow example ▸
404Row not found.
woba_weightsmlb.woba_weights
The weighted on-base average coefficients for each MLB season — the run values assigned to walks, singles, doubles, triples, and home runs, used to compute wOBA and wRC+.
GET/api/v1/mlb/woba_weights
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/woba_weights/{id}
Parameters
idpathbigintrequired
Primary key (id) of the woba_weight row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/woba_weights/{pk_value}'
Responses
200Single woba_weight row.application/jsonshow example ▸
404Row not found.

Odds

series_oddsmlb.series_odds
Series-level odds for postseason MLB matchups — who wins each series and how many games it goes, with the price updating game by game as the series unfolds. MLB playoff series are best-of-5 (LDS/WC) or best-of-7 (LCS/WS).
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/mlb/series_odds
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a season. Defaults to the current season.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/mlb/series_odds/{id}
Parameters
idpathbigintrequired
Primary key (id) of the series_odd row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/series_odds/{pk_value}'
Responses
200Single series_odd row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
game_alt_linesmlb.game_alt_lines
Alternate MLB game lines — the full ladder of run-line and total offerings at non-standard prices that sportsbooks publish alongside the headline line.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/mlb/game_alt_lines
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/mlb/game_alt_lines/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_alt_line row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_alt_lines/{pk_value}'
Responses
200Single game_alt_line row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
game_linesmlb.game_lines
MLB game betting lines — moneylines, run lines (the baseball point-spread equivalent), and over/under totals from sportsbooks, captured over time as the lines move from opening to closing. In MLB, spread = run line (typically +/- 1.5).
GET/api/v1/mlb/game_lines
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/game_lines/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_line row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_lines/{pk_value}'
Responses
200Single game_line row.application/jsonshow example ▸
404Row not found.
game_period_linesmlb.game_period_lines
Period-specific MLB betting lines — first-five-innings markets (F5), individual-inning bets, and other partial-game spreads, moneylines, and totals. Each row is a time-series snapshot - only captured when values change.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/mlb/game_period_lines
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/mlb/game_period_lines/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_period_line row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_period_lines/{pk_value}'
Responses
200Single game_period_line row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
game_player_propsmlb.game_player_props
MLB player prop bets for each game — hits, runs, RBIs, total bases, home runs, strikeouts (for pitchers), and other player-statistic markets offered by sportsbooks.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/mlb/game_player_props
Requires one of: game_id or player_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/mlb/game_player_props/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_player_prop row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_player_props/{pk_value}'
Responses
200Single game_player_prop row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.

Lineups & Roster

game_team_rostersmlb.game_team_rosters
The active gameday roster for each MLB team in each game — the 26 players in uniform that day, with positions and any pre-game lineup designations.
GET/api/v1/mlb/game_team_rosters
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/game_team_rosters/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_team_roster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_team_rosters/{pk_value}'
Responses
200Single game_team_roster row.application/jsonshow example ▸
404Row not found.
team_player_rostersmlb.team_player_rosters
Day-by-day player-to-team affiliations across the MLB season — who was on each 40-man roster, who was on the IL, who was optioned to the minors, and who was designated for assignment.
GET/api/v1/mlb/team_player_rosters
Requires one of: team_id — requests satisfying none of these return 400.
Parameters
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/team_player_rosters/{id}
Parameters
idpathbigintrequired
Primary key (id) of the team_player_roster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/team_player_rosters/{pk_value}'
Responses
200Single team_player_roster row.application/jsonshow example ▸
404Row not found.
team_starting_lineup_battersmlb.team_starting_lineup_batters
Each batter in each MLB starting lineup — position in the order (1 through 9), defensive position, and batting handedness for the day.
GET/api/v1/mlb/team_starting_lineup_batters
Requires one of: team_starting_lineup_id — requests satisfying none of these return 400.
Parameters
team_starting_lineup_idquerybigintoptional
Filter to a single starting lineup.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/team_starting_lineup_batters/{id}
Parameters
idpathbigintrequired
Primary key (id) of the team_starting_lineup_batter row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/team_starting_lineup_batters/{pk_value}'
Responses
200Single team_starting_lineup_batter row.application/jsonshow example ▸
404Row not found.
team_starting_lineupsmlb.team_starting_lineups
Each MLB team's starting lineup for each game — the nine batters in batting order plus the starting pitcher (and DH where applicable).
GET/api/v1/mlb/team_starting_lineups
Requires one of: team_id or game_id — requests satisfying none of these return 400.
Parameters
team_idquerybigintoptional
Filter by team.
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/team_starting_lineups/{id}
Parameters
idpathbigintrequired
Primary key (id) of the team_starting_lineup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/team_starting_lineups/{pk_value}'
Responses
200Single team_starting_lineup row.application/jsonshow example ▸
404Row not found.

Misc

venuesmlb.venues
MLB ballparks — current home stadiums and historical venues, with dimensions, surface, capacity, and roof type.
GET/api/v1/mlb/venues
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/venues/{id}
Parameters
idpathbigintrequired
Primary key (id) of the venue row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/venues/{pk_value}'
Responses
200Single venue row.application/jsonshow example ▸
404Row not found.
umpiresmlb.umpires
MLB umpires — the four-person crew of home-plate, first-base, second-base, and third-base umpires who work each game (six in the postseason with outfield umpires added).
GET/api/v1/mlb/umpires
Parameters
activequerybooleanoptional
Filter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/umpires/{id}
Parameters
idpathbigintrequired
Primary key (id) of the umpire row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/umpires/{pk_value}'
Responses
200Single umpire row.application/jsonshow example ▸
404Row not found.
venue_dimensionsmlb.venue_dimensions
Outfield dimensions and wall heights for each MLB ballpark — distances to left field, center field, right field, and the power alleys, plus the height of the outfield walls.
GET/api/v1/mlb/venue_dimensions
Requires one of: venue_id — requests satisfying none of these return 400.
Parameters
venue_idquerybigintoptional
Filter by venue.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/venue_dimensions/{id}
Parameters
idpathbigintrequired
Primary key (id) of the venue_dimension row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/venue_dimensions/{pk_value}'
Responses
200Single venue_dimension row.application/jsonshow example ▸
404Row not found.
broadcastersmlb.broadcasters
Networks, regional sports networks, and streaming services that air MLB games — Apple TV+, ESPN, FOX, TBS, MLB Network, MLB.TV, plus team-local RSNs.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/mlb/broadcasters
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/mlb/broadcasters/{id}
Parameters
idpathbigintrequired
Primary key (id) of the broadcaster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/broadcasters/{pk_value}'
Responses
200Single broadcaster row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
operator_team_lookupsmlb.operator_team_lookups
How each sportsbook and fantasy operator names every MLB team — the mapping from each operator's team code to the unified franchise record.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/mlb/operator_team_lookups
Requires one of: operator_id — requests satisfying none of these return 400.
Parameters
operator_idquerybigintoptional
Filter by operator.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/mlb/operator_team_lookups/{id}
Parameters
idpathbigintrequired
Primary key (id) of the operator_team_lookup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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.
playoffsmlb.playoffs
The MLB postseason bracket — Wild Card Series, Division Series, League Championship Series, and the World Series, tracked as the seeded matchups and outcomes.
GET/api/v1/mlb/playoffs
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/playoffs/{id}
Parameters
idpathbigintrequired
Primary key (id) of the playoff row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/playoffs/{pk_value}'
Responses
200Single playoff row.application/jsonshow example ▸
404Row not found.
game_broadcastersmlb.game_broadcasters
Which networks broadcast each MLB game — the national TV partner, regional carriers, radio calls, and streaming providers.
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/mlb/game_broadcasters
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/mlb/game_broadcasters/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_broadcaster row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_broadcasters/{pk_value}'
Responses
200Single game_broadcaster row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.
game_umpiresmlb.game_umpires
The umpiring crew assigned to each MLB game — who worked home plate, who worked each base.
GET/api/v1/mlb/game_umpires
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/game_umpires/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_umpire row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/game_umpires/{pk_value}'
Responses
200Single game_umpire row.application/jsonshow example ▸
404Row not found.
operator_player_lookupsmlb.operator_player_lookups
How each sportsbook and fantasy operator names every MLB player — the mapping from each operator's player identifier to a unified player record.
GET/api/v1/mlb/operator_player_lookups
Requires one of: operator_id — requests satisfying none of these return 400.
Parameters
operator_idquerybigintoptional
Filter by operator.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/operator_player_lookups/{id}
Parameters
idpathbigintrequired
Primary key (id) of the operator_player_lookup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/operator_player_lookups/{pk_value}'
Responses
200Single operator_player_lookup row.application/jsonshow example ▸
404Row not found.
player_awardsmlb.player_awards
MLB player awards — MVP, Cy Young, Rookie of the Year, Gold Gloves, Silver Sluggers, All-Star selections, and other end-of-season honors.
GET/api/v1/mlb/player_awards
Requires one of: player_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
season_idquerybigintoptional
Filter to a season.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/player_awards/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player_award row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/player_awards/{pk_value}'
Responses
200Single player_award row.application/jsonshow example ▸
404Row not found.
player_injuriesmlb.player_injuries
The ongoing injury record for each MLB player — body part, severity, IL designation (10-day, 15-day, 60-day), and expected return timeline.
GET/api/v1/mlb/player_injuries
Requires one of: player_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
team_idquerybigintoptional
Filter by team.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/player_injuries/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player_injury row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/player_injuries/{pk_value}'
Responses
200Single player_injury row.application/jsonshow example ▸
404Row not found.
player_newsmlb.player_news
News about MLB players — trades, IL placements, lineup decisions, suspensions, and general beat-reporter updates, unified from beat-writer scrapers, operator feeds, and AI summarization.
GET/api/v1/mlb/player_news
Requires one of: player_id or team_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
team_idquerybigintoptional
Filter by team.
news_timequerytimestamptzoptional
Filter by publication time (ISO 8601). Use news_time__gte to poll for items since your last check. Range syntax: news_time__gte=, news_time__lte=, news_time__between=.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/player_news/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player_new row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/player_news/{pk_value}'
Responses
200Single player_new row.application/jsonshow example ▸
404Row not found.
venue_weathersmlb.venue_weathers
On-field weather throughout each MLB game — temperature, wind direction and speed, humidity, and precipitation captured at fixed intervals from first pitch.
GET/api/v1/mlb/venue_weathers
Requires one of: game_id — requests satisfying none of these return 400.
Parameters
game_idquerybigintoptional
Filter to a single game.
venue_idquerybigintoptional
Filter by venue.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/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/json
GET/api/v1/mlb/venue_weathers/{id}
Parameters
idpathbigintrequired
Primary key (id) of the venue_weather row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/mlb/venue_weathers/{pk_value}'
Responses
200Single venue_weather row.application/jsonshow example ▸
404Row not found.