MLB API endpoint
Returns pitcher Active Spin table rows for the selected season/calculation method, minimum pitch count, and throwing hand. Table sorting and pagination are applied locally. The player search only highlights pitchers in the first-party SVG visualization; the SVG chart and CSV download remain outside this JSON table contract.
/mlb/statcast-active-spinQuery parameters:
year: the season and calculation method. Values: 2026_spin-based, 2026_observed, 2025_spin-based, 2025_observed, 2024_spin-based, 2024_observed, 2023_spin-based, 2023_observed, 2022_spin-based, 2022_observed, 2021_spin-based, 2021_observed, 2020_spin-based, 2020_observed, 2019_observed, 2018_observed, 2017_observed; defaults to 2026_spin-based.min: minimum pitch count: 50, 100, 250, 500, 750, 1000, 1500, 2000, 2500, 3000; defaults to 50.hand: R or L; omit it to include both.sort: name_display_last_first, team_id, pitch_hand, formatted_active_spin_fourseam, formatted_active_spin_sinker, formatted_active_spin_cutter, formatted_active_spin_changeup, formatted_active_spin_splitter, formatted_active_spin_curve, formatted_active_spin_slider, formatted_active_spin_sweeper, formatted_active_spin_slurve; defaults to formatted_active_spin_fourseam.sort_dir: asc or desc; defaults to desc.limit: 1–500; defaults to 100. offset: 0–5000; defaults to 0.Notable response behavior: Season/method, pitch minimum, and hand are upstream filters. Table sorting and pagination are local. The pitcher search highlights a row in the first-party SVG visualization, and CSV is a separate output; neither is included in this table endpoint. The embedded HTML anchor is omitted from each row; use its numeric pitcher id to link with the MLB player endpoint.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| active_spin_changeup | 20 | 59 to 99.3, median 86.7 |
| active_spin_curve | 13 | 37.8 to 95.6, median 75.5 |
| active_spin_cutter | 19 | 22.4 to 80.6, median 58.5 |
| active_spin_fourseam | 22 | 98.9 to 99.7, median 99.3 |
| active_spin_sinker | 23 | 58.7 to 99.6, median 88.6 |
| active_spin_slider | 27 | 10.6 to 64.2, median 29.6 |
| active_spin_slurve | 1 | 60.1 |
| active_spin_splitter | 9 | 69.4 to 94.8, median 88.5 |
| active_spin_sweeper | 15 | 35.8 to 67.6, median 49.4 |
| calc_method | 40 | spin-based in all 40 |
| changeup_code | 20 | |
| curve_code | 13 | |
| cutter_code | 19 | |
| file_code | 40 | |
| formatted_active_spin_changeup | 20 | 59 to 99.3, median 86.7 |
| formatted_active_spin_curve | 13 | 37.8 to 95.6, median 75.5 |
| formatted_active_spin_cutter | 19 | 22.4 to 80.6, median 58.5 |
| formatted_active_spin_fourseam | 22 | 98.9 to 99.7, median 99.3 |
| formatted_active_spin_sinker | 23 | 58.7 to 99.6, median 88.6 |
| formatted_active_spin_slider | 27 | 10.6 to 64.2, median 29.6 |
| formatted_active_spin_slurve | 1 | 60.1 |
| formatted_active_spin_splitter | 9 | 69.4 to 94.8, median 88.5 |
| formatted_active_spin_sweeper | 15 | 35.8 to 67.6, median 49.4 |
| fourseam_code | 22 | |
| is_sport_minors | 40 | 0 |
| is_sport_mlb | 40 | 1 |
| n | 40 | 254 to 2,297, median 733 |
| n_changeup | 20 | 10 to 466, median 112 |
| n_curve | 13 | 14 to 280, median 88 |
| n_cutter | 19 | 16 to 666, median 111 |
| n_fourseam | 22 | 59 to 1,116, median 350 |
| n_sinker | 23 | 17 to 761, median 164 |
| n_slider | 27 | 56 to 576, median 153 |
| n_slurve | 1 | 88 |
| n_splitter | 9 | 26 to 664, median 345 |
| n_sweeper | 15 | 11 to 404, median 106 |
| name_abbrev | 40 | “TOR” and 21 other values |
| name_display_club | 40 | “Blue Jays” and 21 other values |
| name_display_first_last | 40 | “Tyler Rogers” and 39 other values |
| name_display_last_first | 40 | “Rogers, Tyler” and 39 other values |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| year | string | No | Season and calculation method Allowed values: 2026_spin-based, 2026_observed, 2025_spin-based, 2025_observed, 2024_spin-based, 2024_observed, 2023_spin-based, 2023_observed, 2022_spin-based, 2022_observed, 2021_spin-based, 2021_observed, 2020_spin-based, 2020_observed, 2019_observed, 2018_observed, 2017_observed. | ||
| min | string | No | Minimum total pitches Allowed values: 50, 100, 250, 500, 750, 1000, 1500, 2000, 2500, 3000. | ||
| hand | string | No | Pitcher throwing hand; omit for both Allowed values: R, L. | ||
| sort | string | No | Local table sort field Allowed values: name_display_last_first, team_id, pitch_hand, formatted_active_spin_fourseam, formatted_active_spin_sinker, formatted_active_spin_cutter, formatted_active_spin_changeup, formatted_active_spin_splitter, formatted_active_spin_curve, formatted_active_spin_slider, formatted_active_spin_sweeper, formatted_active_spin_slurve. | ||
| 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-active-spin?year=2026_spin-based&min=50&hand=R&sort=name_display_last_first&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"board": "active-spin",
"year": "2026_spin-based",
"min": "50",
"total": 712,
"rows": [
{
"pitcher": 669622,
"name_display_first_last": "Anthony Bender",
"team_id": 146,
"pitch_hand": "R",
"formatted_active_spin_sinker": "79.3"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastActiveSpinResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| board | string | No | active-spin | |||
| hand | string | No | R | |||
| min | string | No | 50 | |||
| rows | array | No | ||||
| total | integer | No | 712 | |||
| year | string | No | 2026_spin-based |
| 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-active-spin?year=2026_spin-based&min=50&hand=R&sort=name_display_last_first&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"