MLB API endpoint
Returns the player or team Arm Strength leaderboard with verified year, team, position metric, minimum throws, local sort, and pagination filters. The player detail route returns individual throw records.
/mlb/statcast-arm-strengthQuery parameters:
type: player or team. Defaults to player.year: 2020, 2021, 2022, 2023, 2024, 2025, 2026, or 9999 (all years). Defaults to the current verified season.team_id: optional MLB 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, or 147.position: optional throwing position metric: arm_inf, arm_of, arm_1b, arm_2b, arm_3b, arm_ss, arm_lf, arm_cf, or arm_rf.min_throws: 50, 100, 300, 500, or 1000. Defaults to 50.sort: fielder_name, team_name, total_throws, max_arm_strength, arm_overall, arm_inf, arm_of, arm_1b, arm_2b, arm_3b, arm_ss, arm_lf, arm_cf, or arm_rf. Defaults to max_arm_strength.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 upstream page embeds the complete filtered table. Sorting and pagination are applied locally. Row fields preserve the source leaderboard fields. The team_id filter uses current MLB team IDs also listed by /api/v1/mlb/teams.
Example:
GET /api/v1/mlb/statcast-arm-strength?type=player&year=2026&team_id=147&position=arm_ss&min_throws=100&sort=max_arm_strength&sort_dir=desc&limit=2
| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| arm_1b | 0 | |
| arm_2b | 1 | 74.9 |
| arm_3b | 0 | |
| arm_cf | 0 | |
| arm_inf | 3 | 78.5 to 85.9, median 81.9 |
| arm_lf | 0 | |
| arm_of | 0 | |
| arm_overall | 3 | 78.5 to 85.9, median 81.9 |
| arm_rf | 0 | |
| arm_ss | 3 | 79 to 85.9, median 81.5 |
| fielder_name | 3 | “Caballero, José” and 2 other values |
| fld_name_display_club | 3 | “Yankees” |
| fld_team_id | 3 | |
| fld_team_id_display | 3 | |
| group_category | 3 | “Annual Fielder Team Summary” |
| is_annual_rollup | 3 | 1 |
| is_fielder_rollup | 3 | 1 |
| is_team_rollup | 3 | 1 |
| is_total_rollup | 3 | 0 |
| max_arm_strength | 3 | 83.1 to 91.5, median 89.8 |
| player_id | 3 | |
| primary_pos | 3 | 6 |
| primary_pos_name | 3 | “Shortstop” |
| primary_pos_name_short | 3 | “SS” |
| total_throws | 3 | 206 to 477, median 348 |
| total_throws_1b | 3 | 0 |
| total_throws_2b | 3 | 0 to 75, median 67 |
| total_throws_3b | 3 | 0 to 53, median 0 |
| total_throws_cf | 3 | 0 to 11, median 0 |
| total_throws_inf | 3 | 206 to 433, median 348 |
| total_throws_lf | 3 | 0 to 18, median 0 |
| total_throws_of | 3 | 0 to 44, median 0 |
| total_throws_rf | 3 | 0 to 15, median 0 |
| total_throws_ss | 3 | 206 to 313, median 273 |
| year | 3 | 2,026 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| type | string | No | Leaderboard row type Allowed values: player, team. | ||
| year | string | No | Season or all years Allowed values: 2020, 2021, 2022, 2023, 2024, 2025, 2026, 9999. | ||
| team_id | string | No | 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. | ||
| position | string | No | Position metric Allowed values: arm_inf, arm_of, arm_1b, arm_2b, arm_3b, arm_ss, arm_lf, arm_cf, arm_rf. | ||
| min_throws | string | No | Minimum throws Allowed values: 50, 100, 300, 500, 1000. | ||
| sort | string | No | Local sort field Allowed values: fielder_name, team_name, total_throws, max_arm_strength, arm_overall, arm_inf, arm_of, arm_1b, arm_2b, arm_3b, arm_ss, arm_lf, arm_cf, arm_rf. | ||
| 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-arm-strength?type=player&year=2020&team_id=108&position=arm_inf&min_throws=50&sort=fielder_name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"board": "arm-strength",
"type": "player",
"year": "2026",
"team_id": "147",
"position": "arm_ss",
"min_throws": "100",
"sort": "max_arm_strength",
"sort_dir": "desc",
"total": 8,
"offset": 0,
"limit": 2,
"source_url": "https://baseballsavant.mlb.com/leaderboard/arm-strength?minThrows=100&pos=arm_ss&team=147&type=player&year=2026",
"fetched_at": "2026-09-29T00:00:00Z",
"rows": [
{
"player_id": 694374,
"fielder_name": "Example Player",
"max_arm_strength": 91.4,
"arm_ss": 90.8,
"total_throws": 123
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastArmStrengthResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | mlb.StatcastArmStrengthResponse | No | ||||
| data.board | string | No | ||||
| data.fetched_at | string | No | ||||
| data.limit | integer | No | ||||
| data.min_throws | string | No | ||||
| data.offset | integer | No | ||||
| data.position | string | No | ||||
| data.rows | array | No | ||||
| data.sort | string | No | ||||
| data.sort_dir | string | No | ||||
| data.source_url | string | No | ||||
| data.team_id | string | No | ||||
| data.total | integer | No | ||||
| data.type | string | No | ||||
| data.year | 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-arm-strength?type=player&year=2020&team_id=108&position=arm_inf&min_throws=50&sort=fielder_name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"