MLB API endpoint
Returns the public Catcher Stance table for catchers, catching teams, batters, batting teams, pitchers, or league totals. Supports the live year, game, date, threshold, team, pitch type, batter/pitcher hand, knee posture, grouping, sorting, and pagination controls. Grouping accepts up to four values. Use mlb_discovery for exact value sets. Chart series and page-local search/column toggles are not included.
/mlb/statcast-catcher-stanceReturns Baseball Savant's Catcher Stance table. The page's embedded data table is returned as rows with all source fields. The separate chart series, page-local search box, visible-column toggle, and pinned league-average display are not returned.
type: catcher, catching-team, batter, batting-team, pitcher, league. Defaults to catcher.season_start, season_end: 2020, 2021, 2022, 2023, 2024, 2025, 2026. Defaults to 2020 and 2026; start must not be after end.game_type: Any, Playoff, Regular. Defaults to Regular.min_pitches: q, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, 15000, 20000. Defaults to q (qualified).min_results: 1, 25, 50, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, 15000, 20000. Defaults to 1.date_start, date_end: optional YYYY-MM-DD bounds.bat_side, pitch_hand: L or R; omit for all values.knee_code: 9999 (Knee(s) Down), 4 (Both Up), 1 (Both Down), 2 (R Up, L Down), or 3 (L Up, R Down).teams: repeat for multiple team IDs: 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.pitch_types: repeat for multiple pitch codes: FF, SI, FC, CH, FS, FO, SC, CU, SL, ST, SV, KN.group_by: repeat up to four: year, api_game_date_month_text, game_type, knee_code_overview, pitch_hand, bat_side, api_pitch_type_group03, knee_code. Use the sole value none to disable grouping; omitted group_by defaults to year.sort: local sort field. Allowed values: name, id, team_id, team_name, year, pitches, skeletal_pitches, n_both_down, n_both_up, n_inside_down, n_l_down, n_leg_extended, n_one_down, n_outside_down, n_r_down, n_teams, pct_both_down, pct_both_up, pct_inside_down, pct_l_down, pct_leg_extended, pct_one_down, pct_outside_down, pct_r_down, one_knee_blocking, one_knee_blocking_162, one_knee_csaa, one_knee_csp, one_knee_framing, one_knee_framing_162, one_knee_pbwp, one_knee_pitching, one_knee_pitching_162, one_knee_ron_num, one_knee_ron_pbwp, one_knee_sba_csaa, one_knee_sba_num, one_knee_shadow_cs, one_knee_shadow_num, one_knee_throwing, one_knee_throwing_162, other_blocking, other_blocking_162, other_csaa, other_csp, other_framing, other_framing_162, other_pbwp, other_pitching, other_pitching_162, other_ron_num, other_ron_pbwp, other_sba_csaa, other_sba_num, other_shadow_cs, other_shadow_num, other_throwing, other_throwing_162, total_blocking, total_framing, total_frv, total_throwing, total_untracked. Defaults to pct_one_down.sort_dir: asc or desc; defaults to desc.limit: 1–500; defaults to 100.offset: zero-based; 0–5000.Team, pitch-type, and grouping values are sent as repeatable query parameters. The endpoint validates every closed value against the sets exposed by mlb_discovery. The page's minSwings, minGroupSwings, and minContact state fields were directly replayed and did not change the returned data; they are omitted. Sorting, pagination, search, and display toggles are page-local; this endpoint applies local sorting and pagination, while search/display controls are excluded.
GET /api/v1/mlb/statcast-catcher-stance?type=catcher&season_start=2024&season_end=2024&game_type=Regular
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| f2_name_display_first_last | 40 | “Smith, Will” and 39 other values |
| fielder_2 | 40 | 521,692 to 701,852, median 669,134 |
| id | 40 | |
| n_both_down | 40 | 32 to 3,140, median 221 |
| n_both_up | 40 | 56 to 505, median 202 |
| n_inside_down | 40 | 2,327 to 9,312, median 4,140 |
| n_l_down | 40 | 3 to 16,568, median 2,179 |
| n_leg_extended | 40 | 12 to 8,923, median 1,991 |
| n_one_down | 40 | 4,735 to 17,097, median 8,461 |
| n_outside_down | 40 | 2,158 to 9,160, median 3,960 |
| n_r_down | 40 | 0 to 15,271, median 5,174 |
| n_teams | 40 | 1 to 4, median 1 |
| name | 40 | “Smith, Will” and 39 other values |
| one_knee_blocking | 40 | -3.15 to 2.89, median -0.24 |
| one_knee_blocking_162 | 40 | -9.38 to 5.66, median -0.7 |
| one_knee_csaa | 40 | -12.14 to 7.71, median -0.73 |
| one_knee_csp | 40 | 0.43 to 0.51, median 0.47 |
| one_knee_framing | 40 | -8.79 to 7.35, median -0.24 |
| one_knee_framing_162 | 40 | -25.53 to 21.38, median -0.86 |
| one_knee_pbwp | 40 | 0.26 to 0.89, median 0.56 |
| one_knee_pitching | 40 | -102.52 to 108.35, median 9.14 |
| one_knee_pitching_162 | 40 | -186.53 to 186.08, median 30.47 |
| one_knee_ron_num | 40 | 2,137 to 7,215, median 3,564 |
| one_knee_ron_pbwp | 40 | 7 to 41, median 20 |
| one_knee_sba_csaa | 40 | -4.86 to 2.91, median -0.22 |
| one_knee_sba_num | 40 | 10 to 101, median 40 |
| one_knee_shadow_cs | 40 | 428 to 1,572, median 761 |
| one_knee_shadow_num | 40 | 891 to 3,285, median 1,557 |
| one_knee_throwing | 40 | -4.86 to 2.91, median -0.22 |
| one_knee_throwing_162 | 40 | -16.12 to 8.56, median -0.57 |
| other_blocking | 40 | -0.19 to 0.32, median 0.06 |
| other_blocking_162 | 40 | -38.18 to 31.11, median 7.41 |
| other_csaa | 38 | -17.57 to 59.85, median 0.41 |
| other_csp | 40 | 0.18 to 0.67, median 0.46 |
| other_framing | 40 | -0.79 to 1.25, median -0.05 |
| other_framing_162 | 40 | -96.23 to 107.61, median -4.2 |
| other_pbwp | 40 | 0 to 4.17, median 0 |
| other_pitching | 40 | -5.48 to 6.42, median 0.28 |
| other_pitching_162 | 40 | -927.76 to 1,506, median 16.75 |
| other_ron_num | 40 | 13 to 279, median 92 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| type | string | No | Table entity type Allowed values: catcher, catching-team, batter, batting-team, pitcher, league. | ||
| season_start | string | No | First season Allowed values: 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| season_end | string | No | Last season; must be >= season_start Allowed values: 2020, 2021, 2022, 2023, 2024, 2025, 2026. | ||
| game_type | string | No | Game type Allowed values: Any, Playoff, Regular. | ||
| min_pitches | string | No | Minimum pitches Allowed values: q, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, 15000, 20000. | ||
| min_results | string | No | Minimum results Allowed values: 1, 25, 50, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000, 15000, 20000. | ||
| date_start | string | No | Start date YYYY-MM-DD | ||
| date_end | string | No | End date YYYY-MM-DD | ||
| bat_side | string | No | Batter side; omit for all Allowed values: L, R. | ||
| pitch_hand | string | No | Pitcher hand; omit for all Allowed values: L, R. | ||
| knee_code | string | No | Knee posture Allowed values: 9999, 4, 1, 2, 3. | ||
| teams | array<string> | No | One or more MLB team ids Allowed values: 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. Repeat this query parameter for multiple values. | ||
| pitch_types | array<string> | No | One or more pitch types Allowed values: FF, SI, FC, CH, FS, FO, SC, CU, SL, ST, SV, KN. Repeat this query parameter for multiple values. | ||
| group_by | array<string> | No | Up to four grouping dimensions; none disables grouping Allowed values: none, year, api_game_date_month_text, game_type, knee_code_overview, pitch_hand, bat_side, api_pitch_type_group03, knee_code. Repeat this query parameter for multiple values. | ||
| sort | string | No | Local row sort field Allowed values: name, id, team_id, team_name, year, pitches, skeletal_pitches, n_both_down, n_both_up, n_inside_down, n_l_down, n_leg_extended, n_one_down, n_outside_down, n_r_down, n_teams, pct_both_down, pct_both_up, pct_inside_down, pct_l_down, pct_leg_extended, pct_one_down, pct_outside_down, pct_r_down, one_knee_blocking, one_knee_blocking_162, one_knee_csaa, one_knee_csp, one_knee_framing, one_knee_framing_162, one_knee_pbwp, one_knee_pitching, one_knee_pitching_162, one_knee_ron_num, one_knee_ron_pbwp, one_knee_sba_csaa, one_knee_sba_num, one_knee_shadow_cs, one_knee_shadow_num, one_knee_throwing, one_knee_throwing_162, other_blocking, other_blocking_162, other_csaa, other_csp, other_framing, other_framing_162, other_pbwp, other_pitching, other_pitching_162, other_ron_num, other_ron_pbwp, other_sba_csaa, other_sba_num, other_shadow_cs, other_shadow_num, other_throwing, other_throwing_162, total_blocking, total_framing, total_frv, total_throwing, total_untracked. | ||
| 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-catcher-stance?type=catcher&season_start=2020&season_end=2020&game_type=Any&min_pitches=q&min_results=1&bat_side=L&pitch_hand=L&knee_code=9999&teams=108&pitch_types=FF&group_by=none&sort=name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"board": "catcher-stance",
"type": "catcher",
"season_start": "2024",
"season_end": "2024",
"game_type": "Regular",
"min_pitches": "q",
"min_results": "1",
"total": 58,
"sort": "pct_one_down",
"sort_dir": "desc",
"offset": 0,
"limit": 100,
"rows": [
{
"id": 669127,
"name": "Langeliers, Shea",
"team_name": "Athletics",
"year": 2024,
"pct_one_down": 0.9443526170798898
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastCatcherStanceResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | mlb.StatcastCatcherStanceResponse | No | ||||
| data.board | string | No | ||||
| data.fetched_at | string | No | ||||
| data.game_type | string | No | ||||
| data.group_by | array | No | ||||
| data.limit | integer | No | ||||
| data.min_pitches | string | No | ||||
| data.min_results | 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.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-catcher-stance?type=catcher&season_start=2020&season_end=2020&game_type=Any&min_pitches=q&min_results=1&bat_side=L&pitch_hand=L&knee_code=9999&teams=108&pitch_types=FF&group_by=none&sort=name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"