Major League Baseball Stats API
Operations pertaining to stats
Operations pertaining to stats
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/major-league-baseball-stats-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.0.1
info:
title: API Documentation Analytics Stats API
description: Official API for Major League Baseball.
version: 2.0.0
servers:
- url: https://statsapi.mlb.com
description: Production
- url: https://beta-statsapi.mlb.com
description: Beta
- url: https://qa-statsapi.mlb.com
description: QA
- url: http://localhost:8080
description: Local
tags:
- name: Stats
description: Operations pertaining to stats
paths:
/api/v1/stats:
get:
tags:
- Stats
summary: View stats
operationId: stats_2
parameters:
- name: stats
in: query
description: 'Type of statistics. Format: Individual, Team, Career, etc. Available types in /api/v1/statTypes'
required: true
schema:
type: array
items:
$ref: '#/components/schemas/StatType'
- name: personId
in: query
description: 'Unique Player Identifier. Format: 434538, 429665, etc'
required: false
schema:
type: integer
format: int32
- name: teamId
in: query
description: 'Unique Team Identifier. Format: 141, 147, etc'
required: false
schema:
type: integer
format: int32
- name: teamIds
in: query
description: Comma delimited list of Unique Team identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: group
in: query
description: Category of statistic to return. Available types in /api/v1/statGroups
required: true
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/StatGroup'
- name: gameType
in: query
description: Type of Game. Available types in /api/v1/gameTypes
required: false
schema:
$ref: '#/components/schemas/GameTypeEnum'
- name: season
in: query
description: Season of play
required: false
schema:
type: string
- name: seasons
in: query
description: Comma delimited list of Seasons of play
required: false
schema:
type: array
items:
type: string
- name: sportId
in: query
description: Top level organization of a sport
required: false
schema:
type: integer
format: int32
x-lookup:
name: Sports
- name: sportIds
in: query
description: Comma delimited list of top level organizations of a sport
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
x-lookup:
name: Sports
- name: leagueId
in: query
description: Unique League Identifier
required: false
schema:
type: integer
format: int32
- name: leagueIds
in: query
description: Comma delimited list of Unique league identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: leagueListId
in: query
description: Unique League List Identifier
required: false
schema:
$ref: '#/components/schemas/LeagueListsEnum'
- name: metrics
in: query
description: Name of metric(s) for metric log stats. Available metrics in /api/v1/metrics
required: false
schema:
type: array
items:
$ref: '#/components/schemas/MetricType'
- name: gamePk
in: query
description: Unique Primary Key Representing a Game
required: false
schema:
type: integer
format: int32
- name: batterTeamId
in: query
description: A unique identifier for the batter's team
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: pitcherTeamId
in: query
description: A unique identifier for the pitcher's team
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: batterId
in: query
description: 'Unique Player Identifier. Format: 434538, 429665, etc'
required: false
schema:
type: integer
format: int32
- name: pitcherId
in: query
description: 'Unique Player Identifier. Format: 434538, 429665, etc'
required: false
schema:
type: integer
format: int32
- name: sitCodes
in: query
description: Situation code for a given stat split.
required: false
schema:
type: array
items:
type: string
- name: combineSits
in: query
description: 'If true, gathers stats where all of the situational criteria are met. If false, returns stats where any of the situational criteria are met. Default: false'
required: false
schema:
type: boolean
- name: opposingTeamId
in: query
description: A unique identifier for the opposing team. Must be used with Team ID
required: false
schema:
type: integer
format: int32
- name: fields
in: query
required: false
schema:
uniqueItems: true
type: array
items:
type: string
- name: sortStat
in: query
description: Baseball stat to sort splits by.
required: false
schema:
$ref: '#/components/schemas/BaseballStatsEnum'
- name: order
in: query
description: The order of sorting, ascending or descending
required: false
schema:
$ref: '#/components/schemas/SortOrderEnum'
- name: playerPool
in: query
description: Return "ALL" or only "QUALIFIED" players based on plate appearances.
required: false
schema:
$ref: '#/components/schemas/PlayerPoolEnum'
- name: position
in: query
description: 'Position number. Format: 1, 2, 3, etc'
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/BaseballPosition'
- name: startDate
in: query
description: 'Start date for range of data (must be used with end date). Format: MM/DD/YYYY'
required: false
schema:
type: string
format: date
- name: endDate
in: query
description: 'End date for range of data (must be used with start date). Format: MM/DD/YYYY'
required: false
schema:
type: string
format: date
- name: daysBack
in: query
description: Returns results from the last 'X' days (Starting from yesterday).
required: false
schema:
type: integer
format: int32
- name: gamesBack
in: query
description: Returns results from the last 'X' games played.
required: false
schema:
type: integer
format: int32
- name: excludeTradedPlayers
in: query
description: Excludes players who have since been traded from the input team
required: false
schema:
type: boolean
- name: offset
in: query
description: The pointer to start for a return set; used for pagination
required: false
schema:
type: integer
format: int32
- name: limit
in: query
description: Number of results to return
required: false
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/StatsRestObject'
/api/v1/stats/search:
get:
tags:
- Stats
summary: View stats from search
operationId: beastStats
parameters:
- name: group
in: query
description: Category of statistic to return. Available types in /api/v1/statGroups
required: true
schema:
type: array
items:
$ref: '#/components/schemas/StatGroup'
- name: gamePks
in: query
description: Comma delimited list of unique primary keys
required: false
schema:
type: array
items:
type: integer
format: int32
- name: playIds
in: query
description: Comma delimited list of unique play identifiers
required: false
schema:
type: array
items:
type: string
- name: seasons
in: query
description: Comma delimited list of Seasons of play
required: false
schema:
type: array
items:
type: string
- name: gameTypes
in: query
description: Type of Game. Available types in /api/v1/gameTypes
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/GameTypeEnum'
- name: date
in: query
description: 'Date of Game. Format: YYYY-MM-DD'
required: false
schema:
type: string
format: date
- name: startDate
in: query
description: 'Date of Game. Format: YYYY-MM-DD'
required: false
schema:
type: string
format: date
- name: endDate
in: query
description: 'Date of Game. Format: YYYY-MM-DD'
required: false
schema:
type: string
format: date
- name: teamIds
in: query
description: 'Unique Team Identifier. Format: 141, 147, etc'
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: pitcherTeamIds
in: query
description: 'Unique Team Identifier. Format: 141, 147, etc'
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: batterTeamIds
in: query
description: 'Unique Team Identifier. Format: 141, 147, etc'
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: sportIds
in: query
description: Comma delimited list of top level organizations of a sport
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
x-lookup:
name: Sports
- name: pitcherSportIds
in: query
description: Comma delimited list of top level organizations of a sport
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
x-lookup:
name: Sports
- name: batterSportIds
in: query
description: Comma delimited list of top level organizations of a sport
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
x-lookup:
name: Sports
- name: leagueIds
in: query
description: Comma delimited list of Unique league identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: pitcherLeagueIds
in: query
description: Comma delimited list of Unique league identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: batterLeagueIds
in: query
description: Comma delimited list of Unique league identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: divisionIds
in: query
description: Comma delimited list of Unique League Identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: pitcherDivisionIds
in: query
description: Comma delimited list of Unique League Identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: batterDivisionIds
in: query
description: Comma delimited list of Unique League Identifiers
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: pitchersOnTeamIds
in: query
description: 'Unique Team Identifier. Format: 141, 147, etc'
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: battersOnTeamIds
in: query
description: 'Unique Team Identifier. Format: 141, 147, etc'
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: playerIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: playerPool
in: query
description: Return "ALL" or only "QUALIFIED" players based on plate appearances.
required: false
schema:
$ref: '#/components/schemas/PlayerPoolEnum'
- name: pitcherIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: batterIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: catcherIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: firstBasemanIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: secondBasemanIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: thirdBasemanIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: shortstopIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: leftFielderIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: centerFielderIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: rightFielderIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: runnerFirstIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: runnerSecondIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: runnerThirdIds
in: query
description: A unique identifier for a player
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: venueIds
in: query
description: Unique Venue Identifier
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: pitchHand
in: query
description: Handedness of pitcher
required: false
schema:
type: string
- name: batSide
in: query
description: Bat side of hitter
required: false
schema:
type: string
- name: pitchTypes
in: query
description: Classification of pitch (fastball, curveball, etc...)
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/PitchType'
- name: pitchCodes
in: query
description: Result of the pitch (ball, called strike, etc...)
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/PitchCode'
- name: eventTypes
in: query
description: Type of event
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/EventType'
- name: positions
in: query
description: All of the details of a player's position
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/BaseballPosition'
- name: primaryPositions
in: query
description: All of the details of a player's position
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/BaseballPosition'
- name: minPitchSpeed
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxPitchSpeed
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minSpinRate
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxSpinRate
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minExtension
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxExtension
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minExitVelocityAgainst
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxExitVelocityAgainst
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minLaunchAngleAgainst
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxLaunchAngleAgainst
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minExitVelocity
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxExitVelocity
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minLaunchAngle
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxLaunchAngle
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minHomeRunDistance
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxHomeRunDistance
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minHitDistance
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxHitDistance
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minHangTime
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxHangTime
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minHitProbability
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxHitProbability
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: minCatchProbability
in: query
description: Minimum value to filter on
required: false
schema:
type: number
format: double
- name: maxCatchProbability
in: query
description: Maximum value to filter on
required: false
schema:
type: number
format: double
- name: isBarrel
in: query
description: Whether or not a play resulted in a barreled ball
required: false
schema:
type: boolean
- name: hitTrajectories
in: query
description: Trajectory of hit (line drive, fly ball, etc...)
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/HitTrajectory'
- name: limit
in: query
description: Number of results to return
required: false
schema:
type: integer
format: int32
- name: offset
in: query
description: The pointer to start for a return set; used for pagination
required: false
schema:
type: integer
format: int32
- name: groupBy
in: query
description: Group stats by PLAYER, TEAM, SEASON, VENUE, SPORT or STAT_GROUP
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/GroupByEnum'
- name: compareOver
in: query
description: Group stats by PLAYER, TEAM, SEASON, VENUE, SPORT or STAT_GROUP
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/GroupByEnum'
- name: sortStat
in: query
description: Baseball stat to sort splits by.
required: false
schema:
$ref: '#/components/schemas/BaseballStatsEnum'
- name: sortModifier
in: query
description: The prefix modifier for the sort stat. avg, min, max. I.E minExitVelocity, maxLaunchAngle, avgHitDistance
required: false
schema:
$ref: '#/components/schemas/AggregateSortTypeEnum'
- name: sortOrder
in: query
description: The order of sorting, ascending or descending
required: false
schema:
$ref: '#/components/schemas/SortOrderEnum'
- name: percentile
in: query
description: Only return averages above this percentile. used for best effort plays
required: false
schema:
type: integer
format: int32
- name: minOccurrences
in: query
description: Minimum occurrences to filter upon
required: false
schema:
type: integer
format: int32
- name: minPlateAppearances
in: query
description: Minimum occurrences to filter upon
required: false
schema:
type: integer
format: int32
- name: minInnings
in: query
description: Minimum occurrences to filter upon
required: false
schema:
type: integer
format: int32
- name: qualifierRate
in: query
description: Minimum occurrences to filter upon
required: false
schema:
type: number
format: double
- name: sitCodes
in: query
description: Situation code for a given stat split.
required: false
schema:
type: array
items:
type: string
- name: showTotals
in: query
description: Columns to return totals
required: false
schema:
type: boolean
- name: includeNullMetrics
in: query
description: Show events with null metrics
required: false
schema:
type: boolean
- name: statFields
in: query
description: Baseball stat fields to populate
required: false
schema:
type: array
items:
$ref: '#/components/schemas/StatField'
- name: atBatNumbers
in: query
description: 'The at bat number of a given game. Format: 1, 2, 3, etc'
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: pitchNumbers
in: query
description: 'The pitch number of a given game. Format: 1, 2, 3, etc'
required: false
schema:
uniqueItems: true
type: array
items:
type: integer
format: int32
- name: fields
in: query
description: 'Comma delimited list of specific fields to be returned. Format: topLevelNode, childNode, attribute'
required: false
schema:
uniqueItems: true
type: array
items:
type: string
- name: debug
in: query
required: false
schema:
type: boolean
- name: activeStatus
in: query
description: Whether or not a player is active
required: false
schema:
$ref: '#/components/schemas/PlayerActiveStatusEnum'
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/StatContainerRestObject'
/api/v1/stats/metrics:
get:
tags:
- Stats
summary: View metric stats
operationId: metricStats
parameters:
- name: personId
in: query
description: 'Unique Player Identifier. Format: 434538, 429665, etc'
required: false
schema:
type: integer
format: int32
- name: personIds
in: query
description: 'Unique Player Identifier. Format: 434538, 429665, etc'
required: false
schema:
type: array
items:
type: integer
format: int32
- name: batterId
in: query
description: 'Unique Player Identifier. Format: 434538, 429665, etc'
required: false
schema:
type: integer
format: int32
- name: pitcherId
in: query
description: 'Unique Player Identifier. Format: 434538, 429665, etc'
required: false
schema:
type: integer
format: int32
- name: teamId
in: query
description: 'Unique Team Identifier. Format: 141, 147, etc'
required: false
schema:
type: integer
format: int32
- name: stats
in: query
description: 'Type of statistics. Format: Individual, Team, Career, etc. Available types in /api/v1/statTypes'
required: true
schema:
type: array
items:
$ref: '#/components/schemas/StatType'
- name: group
in: query
description: Category of statistic to return. Available types in /api/v1/statGroups
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/StatGroup'
- name: season
in: query
description: Season of play
required: false
schema:
type: string
- name: seasons
in: query
description: Comma delimited list of Seasons of play
required: false
schema:
type: array
items:
type: string
- name: sportId
in: query
description: Top level organization of a sport
required: false
schema:
type: integer
format: int32
x-lookup:
name: Sports
- name: opposingTeamId
in: query
description: A unique identifier for the opposing team. Must be used with Team ID
required: false
schema:
type: integer
format: int32
- name: opposingPlayerId
in: query
description: A unique identifier for the opposing team
required: false
schema:
type: integer
format: int32
- name: position
in: query
description: All of the details of a player's position
required: false
schema:
uniqueItems: true
type: array
items:
$ref: '#/components/schemas/BaseballPosition'
- name: eventType
in: query
description: Type of event
required: false
schema:
uniqueItems: true
type: array
# --- truncated at 32 KB (287 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/major-league-baseball/refs/heads/main/openapi/major-league-baseball-stats-api-openapi.yml