MLB API endpoint
Returns the Catcher Framing table for catcher, catching-team, batter, batting-team, pitcher, or league groups. Supports observed game, season, one-team, pitch/result minimum, date, bat-side, pitch-hand, pitch-type, ball/strike, and call-model filters, plus local sort and pagination. Use mlb_discovery for exact enum values; chart-only groupings and player comparison controls are excluded.
/mlb/statcast-catcher-framingQuery parameters:
type: catcher (default), catching-team, batter, batting-team, pitcher, league.game_type: Any, Playoff, Regular (default).team: optional single team id: 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. Repeated team ids fail upstream and are not supported.min_pitches: q (default), 100, 250, 500, 750, 1000, 1250, 1500.min_results: 1 (default), 25, 50, 100, 250, 500, 750, 1000, 1250, 1500.season_start, season_end: ordered seasons from 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. Both default to the current season.date_start, date_end: optional inclusive YYYY-MM-DD bounds; either bound may be supplied independently.bat_side: L or R; omit for both.pitch_hand: L or R; omit for both.pitch_type: one of FF, SI, FC, CH, FS, FO, SC, CU, SL, ST, SV, KN. Repeated pitch types fail upstream.ball_strike: in or out.call: original (default) or final.sort: name, team_name, pitches, pitches_shadow, rv_tot, pct_tot, pitches_shadow_top, rv_shadow_top, pct_shadow_top, pitches_shadow_bot, rv_shadow_bot, pct_shadow_bot, pitches_11, rv_11, pct_11, pitches_12, rv_12, pct_12, pitches_13, rv_13, pct_13, pitches_14, rv_14, pct_14, pitches_16, rv_16, pct_16, pitches_17, rv_17, pct_17, pitches_18, rv_18, pct_18, pitches_19, rv_19, pct_19, pitches_heart, rv_heart, pct_heart, pitches_chwa, rv_chwa, pct_chwa, pitches_bin_minus10, pitches_bin_minus9, pitches_bin_minus8, pitches_bin_minus7, pitches_bin_minus6, pitches_bin_minus5, pitches_bin_minus4, pitches_bin_minus3, pitches_bin_minus2, pitches_bin_minus1, pitches_bin_0, pitches_bin_1, pitches_bin_2, pitches_bin_3, pitches_bin_4, pitches_bin_5, pitches_bin_6, pitches_bin_7, pitches_bin_8, pitches_bin_9, pct_bin_minus10, pct_bin_minus9, pct_bin_minus8, pct_bin_minus7, pct_bin_minus6, pct_bin_minus5, pct_bin_minus4, pct_bin_minus3, pct_bin_minus2, pct_bin_minus1, pct_bin_0, pct_bin_1, pct_bin_2, pct_bin_3, pct_bin_4, pct_bin_5, pct_bin_6, pct_bin_7, pct_bin_8, pct_bin_9. Defaults to rv_tot.sort_dir: asc or desc (default desc).limit: 1–500 (default 100).offset: 0–10000 (default 0).The table response returns the total before local pagination, selected filters, source URL, fetch time, and rows. Sort fields are validated against the discovered field list. Chart-only secondary grouping, shadow-zone chart controls, randomize-catchers, league-average toggle, and player-comparison selections are presentation controls and do not define a row query.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| f2_name_display_first_last | 40 | “Dingler, Dillon” and 39 other values |
| fielder_2 | 40 | 543,309 to 696,100, median 669,224 |
| id | 40 | |
| n_teams | 40 | 1 to 4, median 1 |
| name | 40 | “Dingler, Dillon” and 39 other values |
| pct_11 | 40 | 0.12 to 0.28, median 0.2 |
| pct_12 | 40 | 0.49 to 0.74, median 0.61 |
| pct_13 | 40 | 0.13 to 0.35, median 0.25 |
| pct_14 | 40 | 0.45 to 0.61, median 0.53 |
| pct_16 | 40 | 0.51 to 0.7, median 0.61 |
| pct_17 | 40 | 0.18 to 0.4, median 0.28 |
| pct_18 | 40 | 0.46 to 0.63, median 0.56 |
| pct_19 | 40 | 0.15 to 0.33, median 0.25 |
| pct_bin_0 | 40 | 0.29 to 0.46, median 0.4 |
| pct_bin_1 | 40 | 0.12 to 0.25, median 0.18 |
| pct_bin_2 | 40 | 0.03 to 0.13, median 0.06 |
| pct_bin_3 | 40 | 0 to 0.04, median 0.02 |
| pct_bin_4 | 40 | 0 to 0.02, median 0 |
| pct_bin_5 | 40 | 0 to 0.01, median 0 |
| pct_bin_6 | 40 | 0 to 0.01, median 0 |
| pct_bin_7 | 40 | 0 to 0.01, median 0 |
| pct_bin_8 | 40 | 0 to 0.01, median 0 |
| pct_bin_9 | 40 | 0 to 0.01, median 0 |
| pct_bin_minus1 | 40 | 0.59 to 0.74, median 0.65 |
| pct_bin_minus10 | 40 | 1 |
| pct_bin_minus2 | 40 | 0.81 to 0.93, median 0.85 |
| pct_bin_minus3 | 40 | 0.9 to 0.98, median 0.94 |
| pct_bin_minus4 | 40 | 0.97 to 1, median 0.99 |
| pct_bin_minus5 | 40 | 0.99 to 1, median 1 |
| pct_bin_minus6 | 40 | 0.99 to 1, median 1 |
| pct_bin_minus7 | 40 | 0.99 to 1, median 1 |
| pct_bin_minus8 | 40 | 1 |
| pct_bin_minus9 | 40 | 1 |
| pct_chwa | 40 | 0 to 0.01, median 0 |
| pct_heart | 40 | 0.99 to 1, median 1 |
| pct_shadow_bot | 40 | 0.35 to 0.49, median 0.42 |
| pct_shadow_top | 40 | 0.32 to 0.52, median 0.42 |
| pct_tot | 40 | 0.44 to 0.5, median 0.47 |
| pitches | 40 | 2,884 to 9,037, median 5,605 |
| pitches_11 | 40 | 63 to 261, median 166 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| type | string | No | Table group Allowed values: catcher, catching-team, batter, batting-team, pitcher, league. | ||
| game_type | string | No | Game type Allowed values: Any, Playoff, Regular. | ||
| team | string | No | Optional single MLB team id 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. | ||
| min_pitches | string | No | Minimum pitches Allowed values: q, 100, 250, 500, 750, 1000, 1250, 1500. | ||
| min_results | integer | No | Minimum results Allowed values: 1, 25, 50, 100, 250, 500, 750, 1000, 1250, 1500. | ||
| season_start | integer | No | First season Allowed values: 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| season_end | integer | No | Last season Allowed values: 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| date_start | string | No | Inclusive start date | ||
| date_end | string | No | Inclusive end date | ||
| bat_side | string | No | Batter side Allowed values: L, R. | ||
| pitch_hand | string | No | Pitcher hand Allowed values: L, R. | ||
| pitch_type | string | No | Single pitch type Allowed values: FF, SI, FC, CH, FS, FO, SC, CU, SL, ST, SV, KN. | ||
| ball_strike | string | No | Pitch location relative to strike zone Allowed values: in, out. | ||
| call | string | No | Framing model Allowed values: original, final. | ||
| sort | string | No | Local sort field Allowed values: name, team_name, pitches, pitches_shadow, rv_tot, pct_tot, pitches_shadow_top, rv_shadow_top, pct_shadow_top, pitches_shadow_bot, rv_shadow_bot, pct_shadow_bot, pitches_11, rv_11, pct_11, pitches_12, rv_12, pct_12, pitches_13, rv_13, pct_13, pitches_14, rv_14, pct_14, pitches_16, rv_16, pct_16, pitches_17, rv_17, pct_17, pitches_18, rv_18, pct_18, pitches_19, rv_19, pct_19, pitches_heart, rv_heart, pct_heart, pitches_chwa, rv_chwa, pct_chwa, pitches_bin_minus10, pitches_bin_minus9, pitches_bin_minus8, pitches_bin_minus7, pitches_bin_minus6, pitches_bin_minus5, pitches_bin_minus4, pitches_bin_minus3, pitches_bin_minus2, pitches_bin_minus1, pitches_bin_0, pitches_bin_1, pitches_bin_2, pitches_bin_3, pitches_bin_4, pitches_bin_5, pitches_bin_6, pitches_bin_7, pitches_bin_8, pitches_bin_9, pct_bin_minus10, pct_bin_minus9, pct_bin_minus8, pct_bin_minus7, pct_bin_minus6, pct_bin_minus5, pct_bin_minus4, pct_bin_minus3, pct_bin_minus2, pct_bin_minus1, pct_bin_0, pct_bin_1, pct_bin_2, pct_bin_3, pct_bin_4, pct_bin_5, pct_bin_6, pct_bin_7, pct_bin_8, pct_bin_9. | ||
| 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: 10000. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/mlb/statcast-catcher-framing?type=catcher&game_type=Any&team=108&min_pitches=q&min_results=1&season_start=2018&season_end=2018&bat_side=L&pitch_hand=L&pitch_type=FF&ball_strike=in&call=original&sort=name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"board": "catcher-framing",
"type": "catcher",
"game_type": "Regular",
"total": 56,
"sort": "rv_tot",
"sort_dir": "desc",
"offset": 0,
"limit": 1,
"rows": [
{
"name": "Tyler Stephenson",
"id": 663886,
"team_name": "CIN",
"rv_tot": 4.2
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastCatcherFramingResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| board | string | No | catcher-framing | |||
| fetched_at | string | No | ||||
| game_type | string | No | Regular | |||
| limit | integer | No | 100 | |||
| offset | integer | No | 0 | |||
| rows | array | No | ||||
| source_url | string | No | ||||
| total | integer | No | 56 | |||
| type | string | No | catcher |
| 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-catcher-framing?type=catcher&game_type=Any&team=108&min_pitches=q&min_results=1&season_start=2018&season_end=2018&bat_side=L&pitch_hand=L&pitch_type=FF&ball_strike=in&call=original&sort=name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"