MLB API endpoint
Returns the Arm Value section's complete embedded table, including its Run, Fld, Pit, team, and league views, filters, local sorting, and pagination. Expanded player rows are available from mlb-statcast-arm-value-details. The JSON rows contain the same selected records as the upstream CSV export.
/mlb/statcast-arm-valueQuery parameters:
q: optional case- and accent-insensitive substring search on the displayed row name, applied locally before sorting and pagination; maximum 100 characters.type: Run, Fld, Pit, Batting Team, Pitching Team, or League. Defaults to Fld (Arm Value fielders).game_type: Regular, Playoff, or All. Defaults to Regular.key_base_out: All, r10_to_2b_210, r10_to_3b_210, r11_to_3b_10, r11_to_3b_2, r11_to_hp_10, r11_to_hp_2, r12_to_hp_10, r12_to_hp_2, r13_to_hp_0, or r13_to_hp_1. Defaults to All; use mlb_discovery for descriptions.minimum_opps: top, 1, 5, 10, 20, 30, 40, 50, 75, 100, 250, 500, or 1000. Defaults to top (Qualified).start_year, end_year: ordered seasons from the discovery list: 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 at verification time; the accepted range advances with the current season. Both default to the current season.split: no or yes. yes returns separate player/team rows for each season in the selected range.team_id: one of 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; split returns player rows split by team stint. Omit it for all teams.with_team_only: 1 or 0. Defaults to 1; applies only to Run, Fld, and Pit player views with a specific numeric team_id. 1 limits to rows with roster membership for the selected team; 0 includes matching player rows without that roster-membership condition. Omit it for team and league views or when team_id is empty or split.sort: entity_name, team_name, start_year, runner_runs, fielder_runs, runner_runs_swipe, runner_runs_snipe, runner_runs_freeze, fielder_runs_swipe, fielder_runs_snipe, fielder_runs_freeze, n_opp_xb, n_att_xb, rate_att_xb, est_rate_att_generic_runner, est_rate_att_generic_fielder, rate_att_xb_diff_runner, rate_att_xb_diff_fielder, n_safe, rate_safe, or rate_safe_per_attempt. Sorting is local; defaults to runner_runs for type=Run, otherwise fielder_runs.sort_dir: asc or desc. Defaults to desc.limit: number of rows from 1 to 500. Defaults to 100.offset: zero-based row offset from 0 to 5000. Defaults to 0.The first-party page is labeled Arm Value, although it is served from /leaderboard/baserunning?type=Fld with a generic document title. The endpoint covers all six first-party view choices, preserves row fields, locally searches/sorts/paginates the embedded table, and returns the same selected records as the source CSV export in JSON form (raw CSV response mode is not exposed). Use /api/v1/mlb/statcast-arm-value-details to fetch the game-level play rows shown when expanding a Run, Fld, or Pit player row. The exhaustive verified enum values are also available from /api/v1/mlb/discovery.
Example:
GET /api/v1/mlb/statcast-arm-value?q=Judge&type=Fld&game_type=Regular&key_base_out=All&minimum_opps=top&start_year=2026&end_year=2026&team_id=147&with_team_only=1&sort=fielder_runs&sort_dir=desc&limit=2
| Field | Filled in, of 7 checked | Values in the sample |
|---|---|---|
| end_year | 7 | 2,026 |
| entity_code | 7 | |
| entity_id | 7 | |
| entity_name | 7 | “Bellinger, Cody” and 6 other values |
| est_rate_att_generic_fielder | 7 | 0.31 to 0.4, median 0.36 |
| est_rate_att_generic_runner | 7 | 0.32 to 0.41, median 0.34 |
| fielder_runs | 7 | -0.9 to 2.87, median -0.25 |
| fielder_runs_freeze | 7 | 0.97 to 3.82, median 2.1 |
| fielder_runs_snipe | 7 | 0 to 5.03, median 0.82 |
| fielder_runs_swipe | 7 | -5.21 to -1.73, median -2.56 |
| key_name_abbrev | 7 | |
| key_team_id | 7 | |
| n_att_xb | 7 | 21 to 88, median 44 |
| n_opp_xb | 7 | 67 to 263, median 136 |
| n_out | 7 | 0 to 6, median 1 |
| n_safe | 7 | 21 to 84, median 43 |
| num_teams | 7 | 1 to 2, median 1 |
| rate_att_xb | 7 | 0.3 to 0.39, median 0.34 |
| rate_att_xb_diff_fielder | 7 | -0.03 to 0.03, median -0.01 |
| rate_att_xb_diff_runner | 7 | -0.02 to 0.03, median -0.01 |
| rate_out | 7 | 0 to 0.02, median 0.01 |
| rate_out_per_attempt | 7 | 0 to 0.07, median 0.02 |
| rate_safe | 7 | 0.3 to 0.38, median 0.33 |
| rate_safe_per_attempt | 7 | 0.93 to 1, median 0.98 |
| row_id | 7 | |
| runner_runs | 7 | -2.75 to 1.26, median -0.21 |
| runner_runs_freeze | 7 | -4.13 to -1.16, median -1.89 |
| runner_runs_snipe | 7 | -4.93 to 0, median -0.84 |
| runner_runs_swipe | 7 | 1.57 to 5.72, median 2.75 |
| start_year | 7 | 2,026 |
| team_image_url | 7 | mlbstatic.com |
| team_name | 7 | NYY in all 7 |
| team_selection_id | 7 | |
| timeframe | 7 | 2,026 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Case- and accent-insensitive local substring on the displayed row name; up to 100 characters | ||
| type | string | No | Leaderboard view Allowed values: Run, Fld, Pit, Batting Team, Pitching Team, League. | ||
| game_type | string | No | Game type Allowed values: Regular, Playoff, All. | ||
| key_base_out | string | No | Baserunner situation Allowed values: All, r10_to_2b_210, r10_to_3b_210, r11_to_3b_10, r11_to_3b_2, r11_to_hp_10, r11_to_hp_2, r12_to_hp_10, r12_to_hp_2, r13_to_hp_0, r13_to_hp_1. | ||
| minimum_opps | string | No | Minimum opportunities Allowed values: top, 1, 5, 10, 20, 30, 40, 50, 75, 100, 250, 500, 1000. | ||
| start_year | integer | No | Start season, 2016 through current season Minimum: 2016. | ||
| end_year | integer | No | End season, 2016 through current season; must be >= start_year Minimum: 2016. | ||
| split | string | No | Return one row per season Allowed values: no, yes. | ||
| team_id | string | No | MLB team id from mlb_discovery, split for All Teams Split by Team, or empty for All Teams 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, split. | ||
| with_team_only | string | No | Team-roster membership for a selected team Allowed values: 1, 0. | ||
| sort | string | No | Local table sort field Allowed values: entity_name, team_name, start_year, runner_runs, fielder_runs, runner_runs_swipe, runner_runs_snipe, runner_runs_freeze, fielder_runs_swipe, fielder_runs_snipe, fielder_runs_freeze, n_opp_xb, n_att_xb, rate_att_xb, est_rate_att_generic_runner, est_rate_att_generic_fielder, rate_att_xb_diff_runner, rate_att_xb_diff_fielder, n_safe, rate_safe, rate_safe_per_attempt. | ||
| 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-arm-value?q=coffee&type=Run&game_type=Regular&key_base_out=All&minimum_opps=top&split=no&team_id=108&with_team_only=1&sort=entity_name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"board": "arm-value",
"type": "Fld",
"game_type": "Regular",
"key_base_out": "All",
"minimum_opps": "top",
"start_year": 2026,
"end_year": 2026,
"split": "no",
"team_id": "147",
"with_team_only": true,
"sort": "fielder_runs",
"sort_dir": "desc",
"total": 4,
"offset": 0,
"limit": 2,
"source_url": "https://baseballsavant.mlb.com/leaderboard/baserunning?game_type=Regular&key_base_out=All&n=top&season_end=2026&season_start=2026&split=no&team=147&type=Fld&with_team_only=1",
"fetched_at": "2026-09-29T00:00:00Z",
"rows": [
{
"entity_name": "Example Player",
"entity_id": 677800,
"entity_code": "Fld",
"fielder_runs": 2.62,
"runner_runs": -0.32,
"n_opp_xb": 309,
"n_att_xb": 91,
"team_name": "BOS"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastArmValueResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | mlb.StatcastArmValueResponse | No | ||||
| data.board | string | No | ||||
| data.end_year | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.game_type | string | No | ||||
| data.key_base_out | string | No | ||||
| data.limit | integer | No | ||||
| data.minimum_opps | string | No | ||||
| data.offset | integer | No | ||||
| data.q | string | No | ||||
| data.rows | array | No | ||||
| data.sort | string | No | ||||
| data.sort_dir | string | No | ||||
| data.source_url | string | No | ||||
| data.split | string | No | ||||
| data.start_year | integer | No | ||||
| data.team_id | 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 |
| 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-arm-value?q=coffee&type=Run&game_type=Regular&key_base_out=All&minimum_opps=top&split=no&team_id=108&with_team_only=1&sort=entity_name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"