MLB API endpoint
Returns pitcher, batter, pitching-team, batting-team, or league tempo rows. Season, game type, minimum pitch, team, year comparison, and team membership options mirror the live first-party controls; q and sorting are applied locally before pagination. Use mlb_discovery for exact value sets.
/mlb/statcast-pitch-tempoQuery parameters:
type: Pit, Bat, Pitching Team, Batting Team, or League; defaults to Pit.season_start, season_end: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, or 2026. The range must be ordered; season_start defaults to the current year and season_end defaults to season_start.game_type: Regular, Playoff, or All; defaults to Regular.n: minimum pitch threshold q, 1, 10, 50, 100, 250, 500, 1000, 2000, or 5000; defaults to q.team: optional 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.with_team_only: 0 or 1; only valid when team is selected. 0 sums rows into the player's last team; 1 returns only the selected-team stint.split: yes or no; defaults to no.q: optional case-insensitive local entity-name match, applied before sorting and pagination.sort: entity_name, start_year, tot_n_empty, median_seconds_empty, empty_equiv, freq_hot_empty, freq_cold_empty, tot_n_onbase, median_seconds_onbase, onbase_equiv, freq_hot_onbase, or freq_cold_onbase; defaults to median_seconds_empty.sort_dir: asc or desc; defaults to asc.limit: 1–500; defaults to 100.offset: 0–5000; defaults to 0.Notable behavior: page controls are replayed to Baseball Savant. Name search and sorting are performed locally. Empty result sets are valid for combinations with no matching data. The first-party team=split selector currently has no effect on the embedded rows, so it is not accepted as a team id.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| end_year | 40 | 2,026 |
| end_year_upper | 40 | 9,999 |
| entity_choice | 40 | P in all 40 |
| entity_code | 40 | |
| entity_id | 40 | |
| entity_name | 40 | “Suter, Brent” and 39 other values |
| freq_cold | 40 | 0.01 to 0.04, median 0.02 |
| freq_cold_empty | 40 | 0 to 0.03, median 0.01 |
| freq_cold_onbase | 40 | 0 to 0.06, median 0.02 |
| freq_hot | 40 | 0.36 to 0.72, median 0.5 |
| freq_hot_empty | 40 | 0.6 to 0.89, median 0.68 |
| freq_hot_onbase | 40 | 0 to 0.43, median 0.11 |
| freq_warm | 40 | 0.27 to 0.61, median 0.48 |
| freq_warm_empty | 40 | 0.1 to 0.39, median 0.29 |
| freq_warm_onbase | 40 | 0.55 to 0.99, median 0.86 |
| is_qualified | 40 | 1 |
| is_sport_minors | 40 | 0 |
| is_sport_mlb | 40 | 1 |
| key_file_code | 40 | |
| key_game_type | 40 | |
| key_name_abbrev | 40 | |
| key_name_display_club | 40 | |
| key_team_id | 40 | |
| median_seconds | 40 | 13.04 to 16.57, median 14.98 |
| median_seconds_empty | 40 | 11.52 to 14.36, median 13.82 |
| median_seconds_onbase | 40 | 15.24 to 19.95, median 17.29 |
| num_teams | 40 | 1 to 2, median 1 |
| pitcher_searchable | 40 | “suter, brent” and 39 other values |
| prev_is_take | 40 | 1 |
| sport_id | 40 | |
| start_year | 40 | 2,026 |
| start_year_lower | 40 | 0 to 2,026, median 2,026 |
| team_image_url | 40 | “/site-core/images/savant-mlb.svg” and 21 other values |
| team_name | 40 | “MLB” and 21 other values |
| team_selection_code | 40 | |
| team_selection_id | 40 | |
| timeframe | 40 | 2,026 |
| tot_n | 40 | 342 to 1,328, median 651 |
| tot_n_empty | 40 | 192 to 871, median 399 |
| tot_n_onbase | 40 | 108 to 543, median 279 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| type | string | No | Table group Allowed values: Pit, Bat, Pitching Team, Batting Team, League. | ||
| season_start | string | No | First season Allowed values: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| season_end | string | No | Last season; must be >= season_start Allowed values: 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| game_type | string | No | Game type Allowed values: Regular, Playoff, All. | ||
| n | string | No | Minimum pitch count Allowed values: q, 1, 10, 50, 100, 250, 500, 1000, 2000, 5000. | ||
| team | string | No | Optional MLB team id Allowed values: 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, 158. | ||
| split | string | No | Compare seasons separately Allowed values: yes, no. | ||
| with_team_only | string | No | Team membership mode; requires team Allowed values: 0, 1. | ||
| q | string | No | Case-insensitive local entity-name filter | ||
| sort | string | No | Local sort field Allowed values: entity_name, start_year, tot_n_empty, median_seconds_empty, empty_equiv, freq_hot_empty, freq_cold_empty, tot_n_onbase, median_seconds_onbase, onbase_equiv, freq_hot_onbase, freq_cold_onbase. | ||
| sort_dir | string | No | Sort direction Allowed values: asc, desc. | ||
| limit | integer | No | Rows per page (1-500) Minimum: 1. Maximum: 500. | ||
| offset | integer | No | Zero-based row offset Minimum: 0. Maximum: 5000. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/mlb/statcast-pitch-tempo?type=Pit&season_start=2010&season_end=2010&game_type=Regular&n=q&team=108&split=yes&with_team_only=0&q=coffee&sort=entity_name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"board": "pitch_tempo",
"type": "Pit",
"season_start": "2026",
"season_end": "2026",
"game_type": "Regular",
"minimum_pitches": "q",
"total": 348,
"rows": [
{
"entity_id": "608718",
"entity_name": "Suter Brent",
"tot_n_empty": 1200,
"median_seconds_empty": 18.2,
"median_seconds_onbase": 22.4
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastPitchTempoResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| board | string | No | pitch_tempo | |||
| game_type | string | No | Regular | |||
| minimum_pitches | string | No | q | |||
| rows | array | No | ||||
| season_end | string | No | 2026 | |||
| season_start | string | No | 2026 | |||
| total | integer | No | 348 | |||
| type | string | No | Pit |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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-pitch-tempo?type=Pit&season_start=2010&season_end=2010&game_type=Regular&n=q&team=108&split=yes&with_team_only=0&q=coffee&sort=entity_name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"