MLB API endpoint
Returns individual attempted-running plays expanded from a pitcher or pitching-team Running Game row. Pass its entity_id and repeat the same table filters. For team-stint rows, pass that row's team id; League rows do not expose a detail feed.
/mlb/statcast-running-game-detailsQuery parameters:
entity_id: required positive player or pitching-team entity id from a Running Game leaderboard row.type: Pit or Pitching Team; defaults to Pit. League rows do not have detail data.game_type: Regular, Playoff, or All; defaults to Regular.pitch_hand: all, L, or R; defaults to all.runner_moved: All, Advance, Out, or Hold; defaults to All.target_base: All, 2B, or 3B; defaults to All.prior_pk: All, 0, 1, 2, or 3; 3 means 3 or more prior pickoff/disengagement attempts.n: q, 1, 50, 100, 200, 500, 1000, 1500, or 2000; defaults to q.season_start and season_end: 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 on the observation date; default to the current season. The start must not exceed the end. The season set advances with the live page.split: yes or no; defaults to no.team: optional single MLB team id: 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, or 158. When expanding a team=split leaderboard row, use that row's actual team id.with_team_only: true or false; defaults to true. It is supported for Pit rows with one specific team id.limit: 1-500 play rows; defaults to 100. offset: zero-based offset up to 100000.Notable response behavior: This returns individual attempted-running plays from Baseball Savant's anonymous JSON detail feed. Rows preserve the upstream game/play ids, pitcher/catcher/fielder/runner identities, target base, movement code, run value, lead distances, and attempt outcome flags. Use the same filters as the source leaderboard row. For a year-split row, pass that row's season as both season_start and season_end. League rows do not expose an expander. Use /mlb/discovery and statcast_running_game_filters for accepted values.
| Field | Filled in, of 4 checked | Values in the sample |
|---|---|---|
| catcher_id | 4 | |
| catcher_name | 4 | Dingler, Dillon in all 4 |
| entity_id | 4 | |
| fielder_id | 4 | |
| fielder_name | 4 | “Peck, John” and 2 other values |
| game_date | 4 | 2026-08-25 to 2026-09-25 |
| is_runner_bk | 4 | 0 |
| is_runner_cs | 4 | 0 to 1, median 0 |
| is_runner_fb | 4 | 0 |
| is_runner_pk | 4 | 0 |
| is_runner_sb | 4 | 0 to 1, median 1 |
| pitcher_cs_aa | 4 | -0.15 to 0.16, median -0.13 |
| pitcher_id | 4 | |
| pitcher_name | 4 | Jobe, Jackson in all 4 |
| play_id | 4 | |
| r_primary_lead | 4 | 11.42 to 13.07, median 11.75 |
| r_sec_minus_prim_lead | 4 | 8.96 to 15.45, median 9.74 |
| r_secondary_lead | 4 | 20.71 to 28.09, median 21.16 |
| runner_id | 4 | |
| runner_moved_cd | 4 | SB (3), CS (1) |
| runner_name | 4 | “Cruz, Oneil” and 3 other values |
| runs_prevented_on_running_attr | 4 | -0.16 to 0.02, median -0.16 |
| target_base | 4 | 2B in all 4 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| entity_id | integer | Yes | Positive player or team entity id from the Running Game leaderboard | 695549 | |
| type | string | No | Detail group Allowed values: Pit, Pitching Team. | ||
| game_type | string | No | Game scope Allowed values: Regular, Playoff, All. | ||
| pitch_hand | string | No | Pitcher's throwing hand Allowed values: all, L, R. | ||
| runner_moved | string | No | Runner movement outcome Allowed values: All, Advance, Out, Hold. | ||
| target_base | string | No | Target base Allowed values: All, 2B, 3B. | ||
| prior_pk | string | No | Prior pickoff/disengagement count Allowed values: All, 0, 1, 2, 3. | ||
| n | string | No | Minimum pitcher opportunities Allowed values: q, 1, 50, 100, 200, 500, 1000, 1500, 2000. | ||
| season_start | integer | No | Inclusive first season Allowed values: 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| season_end | integer | No | Inclusive last season Allowed values: 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| split | string | No | Return separate year rows Allowed values: yes, no. | ||
| team | string | No | One MLB team id; use the row's team id for split-team rows Allowed values: 108, 117, 133, 141, 144, 158, 138, 112, 109, 119, 137, 114, 136, 146, 121, 120, 110, 135, 143, 134, 140, 139, 113, 111, 115, 118, 116, 142, 145, 147. | ||
| with_team_only | boolean | No | Restrict player rows to selected team; only valid with a specific team and Pit type | ||
| limit | integer | No | Play rows per page, 1-500 Minimum: 1. Maximum: 500. | ||
| offset | integer | No | Zero-based play-row offset Minimum: 0. Maximum: 100000. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/mlb/statcast-running-game-details?entity_id=695549&type=Pit&game_type=Regular&pitch_hand=all&runner_moved=All&target_base=All&prior_pk=All&n=q&season_start=2016&season_end=2016&split=yes&team=108&with_team_only=true&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"board": "pitcher-running-game-details",
"entity_id": 695549,
"type": "Pit",
"total": 4,
"rows": [
{
"entity_id": 695549,
"play_id": "3e8918ac-abdf-3a6d-a692-005802038dd7",
"pitcher_name": "Jobe, Jackson",
"runner_name": "Cruz, Oneil",
"target_base": "2B",
"runner_moved_cd": "SB"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastRunningGameDetailsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | mlb.StatcastRunningGameDetailsResponse | No | ||||
| data.board | string | No | ||||
| data.entity_id | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.filters | mlb.StatcastRunningGameDetailsOption | No | ||||
| data.filters.entity_id | string | No | ||||
| data.filters.game_type | string | No | ||||
| data.filters.limit | integer | No | ||||
| data.filters.min_pitches | string | No | ||||
| data.filters.offset | integer | No | ||||
| data.filters.pitch_hand | string | No | ||||
| data.filters.prior_pk | string | No | ||||
| data.filters.runner_moved | string | No | ||||
| data.filters.season_end | integer | No | ||||
| data.filters.season_start | integer | No | ||||
| data.filters.split | string | No | ||||
| data.filters.target_base | string | No | ||||
| data.filters.team | string | No | ||||
| data.filters.type | string | No | ||||
| data.filters.with_team_only | boolean | No | ||||
| data.limit | integer | No | ||||
| data.offset | integer | No | ||||
| data.rows | array | No | ||||
| data.source_url | string | No | ||||
| data.total | integer | No | ||||
| data.type | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/mlb/statcast-running-game-details?entity_id=695549&type=Pit&game_type=Regular&pitch_hand=all&runner_moved=All&target_base=All&prior_pk=All&n=q&season_start=2016&season_end=2016&split=yes&team=108&with_team_only=true&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"