MLB API endpoint
Returns catcher, catching-team, or league caught-stealing and throw-quality rows with the public season, game, attempt-threshold, target-base, split-years, team, and roster-membership filters. Table sorting and pagination are applied locally. Catcher rows can be expanded with mlb-statcast-catcher-throwing-details. CSV, charts, and page-local display controls are excluded.
/mlb/statcast-catcher-throwingReturns the first-party Catcher Throwing table for catchers, catching teams, or
league totals. Rows include caught-stealing run value, caught-stealing and
expected caught-stealing attempts, rate metrics, pop/exchange/flight timing,
arm strength, and attempt counts. Sorting and pagination run locally after the
source table is fetched. Catcher rows can be expanded with
GET /api/v1/mlb/statcast-catcher-throwing-details.
Query parameters:
type: Cat, Pitching Team, League; defaults to Cat.season_start, season_end: 2016, 2017, 2018, 2019, 2020,
2021, 2022, 2023, 2024, 2025, 2026; both default to 2026.
The start must not exceed the end.game_type: Regular, Playoff, All; defaults to Regular.minimum: q, 1, 5, 10, 20, 30, 40, 50, 75, 100;
defaults to q (q is the source's qualified setting).target_base: 2B, 3B, All; defaults to All.split: yes, no; defaults to no.team: empty string for all teams, split for team stints, or one of
108, 117, 133, 141, 144, 158, 138, 112, 109, 119,
137, 114, 136, 146, 121, 120, 110, 135, 143, 134,
140, 139, 111, 113, 115, 118, 116, 142, 145, 147.with_team_only: true, false; defaults to true, filters catchers to
the selected team's roster when a specific team is selected.sort: entity_name, start_year, n, cs_raa, n_cs_aa, n_cs,
rate_cs, n_xcs, rate_xcs, rate_cs_aa, seasonal_sprint_speed,
distance_to_target, pop_time, exchange_time, arm_strength,
n_xcs_with_flight_over_xcs, n_xcs_with_exchange_over_xcs,
n_xcs_with_accuracy_over_xcs, n_xcs_with_ground_other_over_xcs,
n_xcs_with_onfly_other_over_xcs, n_xcs_with_untracked_other_over_xcs;
defaults to n_cs_aa.sort_dir: asc, desc; defaults to desc.limit: 1-500; defaults to 100.offset: 0-5000; defaults to 0.mlb_discovery returns the complete live-verified closed value sets for the
groups, seasons, game types, minimum attempts, target bases, 30 team ids, and
sortable table fields.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| accuracy_impact_seconds | 40 | -0.21 to -0.06, median -0.14 |
| arm_strength | 40 | 74.28 to 85.77, median 80.82 |
| cs_raa | 40 | -0.22 to 5.18, median 1.53 |
| distance_to_target | 40 | 52.9 to 56.72, median 54.61 |
| end_year | 40 | 2,026 |
| end_year_upper | 40 | 9,999 |
| entity_choice | 40 | C in all 40 |
| entity_code | 40 | |
| entity_id | 40 | |
| entity_name | 40 | “Mack, Joe” and 39 other values |
| est_flight_time | 40 | 1.14 to 1.33, median 1.2 |
| exchange_time | 40 | 0.56 to 0.7, median 0.62 |
| flight_time | 40 | 1.19 to 1.38, median 1.24 |
| generic_time_to_target | 40 | 1.87 to 1.98, median 1.93 |
| implied_accuracy_seconds | 40 | -0.2 to -0.05, median -0.13 |
| key_file_code | 40 | |
| key_game_type | 40 | |
| key_name_abbrev | 40 | |
| key_name_display_club | 40 | |
| key_target_base | 40 | |
| key_team_id | 40 | |
| n | 40 | 17 to 75, median 39 |
| n_cs | 40 | 4 to 19, median 10 |
| n_cs_aa | 40 | -0.33 to 7.97, median 2.36 |
| n_xcs | 40 | 2.75 to 14.51, median 7.87 |
| n_xcs_with_accuracy | 40 | 2.15 to 14.28, median 7.58 |
| n_xcs_with_accuracy_over_xcs | 40 | -2.33 to 2.89, median 0.29 |
| n_xcs_with_exchange_over_xcs | 40 | -2.16 to 4.07, median 0.72 |
| n_xcs_with_flight_over_xcs | 40 | -2.81 to 3.12, median 0.46 |
| n_xcs_with_ground_other_over_xcs | 40 | -1.93 to 4.06, median 0.17 |
| n_xcs_with_onfly_other_over_xcs | 40 | -2.24 to 4.04, median 0.52 |
| n_xcs_with_other_over_xcs | 40 | -4.41 to 5.9, median -0.19 |
| n_xcs_with_untracked_other_over_xcs | 40 | -0.97 to 0, median 0 |
| n_xcs_without_catchrel | 40 | 3.28 to 18.36, median 7.96 |
| n_xcs_without_flight | 40 | 3.09 to 15.02, median 7.27 |
| num_teams | 40 | 1 to 4, median 1 |
| pop_time | 40 | 1.78 to 1.98, median 1.89 |
| rate_accuracy_high | 40 | 0.13 to 0.59, median 0.33 |
| rate_accuracy_low | 40 | 0.14 to 0.65, median 0.36 |
| rate_accuracy_norm | 40 | 0.14 to 0.48, median 0.28 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| type | string | No | Table group Allowed values: Cat, Pitching Team, League. | ||
| season_start | string | No | First season Allowed values: 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| season_end | string | No | Last season; must be >= season_start Allowed values: 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| game_type | string | No | Game type Allowed values: Regular, Playoff, All. | ||
| minimum | string | No | Minimum steal attempts Allowed values: q, 1, 5, 10, 20, 30, 40, 50, 75, 100. | ||
| target_base | string | No | Throw target Allowed values: 2B, 3B, All. | ||
| split | string | No | Split results by season Allowed values: yes, no. | ||
| team | string | No | Empty for all teams, split for team stints, or an MLB team id Allowed values: split, 108, 117, 133, 141, 144, 158, 138, 112, 109, 119, 137, 114, 136, 146, 121, 120, 110, 135, 143, 134, 140, 139, 111, 113, 115, 118, 116, 142, 145, 147. | ||
| with_team_only | boolean | No | For a selected team, include only catchers on that team | ||
| sort | string | No | Local sort field Allowed values: entity_name, start_year, n, cs_raa, n_cs_aa, n_cs, rate_cs, n_xcs, rate_xcs, rate_cs_aa, seasonal_sprint_speed, distance_to_target, pop_time, exchange_time, arm_strength, n_xcs_with_flight_over_xcs, n_xcs_with_exchange_over_xcs, n_xcs_with_accuracy_over_xcs, n_xcs_with_ground_other_over_xcs, n_xcs_with_onfly_other_over_xcs, n_xcs_with_untracked_other_over_xcs. | ||
| sort_dir | string | No | Local 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-catcher-throwing?type=Cat&season_start=2016&season_end=2016&game_type=Regular&minimum=q&target_base=2B&split=yes&team=split&with_team_only=true&sort=entity_name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"board": "catcher-throwing",
"type": "Cat",
"season_start": "2026",
"season_end": "2026",
"game_type": "Regular",
"minimum_attempts": "q",
"target_base": "All",
"split": "no",
"team": "",
"with_team_only": true,
"total": 72,
"sort": "n_cs_aa",
"sort_dir": "desc",
"offset": 0,
"limit": 100,
"rows": [
{
"entity_id": 521692,
"entity_name": "Perez, Salvador",
"row_id": "521692_2026_118",
"key_team_id": 118,
"n_cs_aa": 1.464667859270122,
"arm_strength": "76.880352",
"pop_time": "1.945266667"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastCatcherThrowingResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | mlb.StatcastCatcherThrowingResponse | No | ||||
| data.board | string | No | ||||
| data.fetched_at | string | No | ||||
| data.game_type | string | No | ||||
| data.limit | integer | No | ||||
| data.minimum_attempts | string | No | ||||
| data.offset | integer | No | ||||
| data.rows | array | No | ||||
| data.season_end | string | No | ||||
| data.season_start | string | No | ||||
| data.sort | string | No | ||||
| data.sort_dir | string | No | ||||
| data.source_url | string | No | ||||
| data.split | string | No | ||||
| data.target_base | string | No | ||||
| data.team | string | No | ||||
| data.total | integer | No | ||||
| data.type | string | No | ||||
| data.with_team_only | boolean | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/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-catcher-throwing?type=Cat&season_start=2016&season_end=2016&game_type=Regular&minimum=q&target_base=2B&split=yes&team=split&with_team_only=true&sort=entity_name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"