MLB API endpoint
Returns batting or pitching Run Value rows from the Swing-Take leaderboard. Filters are cold-replay verified; sorting and pagination are applied locally. The Bat-side R/L selector was verified to leave the embedded rows byte-identical and is omitted. The page's visual charts and CSV export are separate formats.
/mlb/statcast-run-valueParameters:
group — Batter or Pitcher. Defaults to Batter.year — All, Career, 2026, 2025, 2024, 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, or 2008. Defaults to 2026 (current season).team — Optional numeric MLB team id from mlb_discovery; omit for all teams.min — q, 10, 25, 50, 75, 100, 150, 200, 250, 500, 600, 700, 800, 900, 1000, or 1500. Defaults to q.leverage — Neutral or Leveraged. Defaults to Neutral.type — All, Swing-Take, Pitch Type, Attack Region, or Bat-side. Defaults to All.sub_type — Conditional: for Swing-Take, Swing or Take; for Pitch Type, 4-Seam Fastball, Changeup, Curveball, Cutter, Knuckleball, Screwball, Sinker, Slider, Slurve, Split-Finger, or Sweeper; for Attack Region, Heart, Shadow, Chase, or Waste. Omit for All and Bat-side.sort — Locally sorted data field. Common fields: player_name, team_name_abbrev, year, pa, pitches, runs_all; non-region views also have runs_heart, runs_shadow, runs_chase, and runs_waste; Attack Region instead has runs_ff, runs_si, runs_fc, runs_ch, runs_fs, runs_cu, runs_sl, runs_st, runs_sv, runs_kn, and runs_sc. delta_runs is available for leveraged data. team_name_abbrev and year are unavailable for Career.sort_dir — asc or desc; defaults to desc.limit — Rows per page, 1–500; defaults to 100.offset — Zero-based row offset, 0–10000; defaults to 0.Call mlb_discovery for the current-season year and team ids. The page's Bat-side R/L sub-selector does not change the row data, so it is omitted as a non-filter. Requests whose closed-set query values are not accepted by the source page are returned as upstream errors. The REST response contains row objects; it omits source HTML links and visualizations. CSV and chart output remain separate page formats.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| grouping_code | 40 | |
| key_runvalue_method | 40 | |
| num_teams | 40 | 1 |
| pa | 40 | 416 to 719, median 630 |
| pid | 40 | |
| pitches | 40 | 1,734 to 2,998, median 2,542 |
| player_id | 40 | |
| player_name | 40 | “Alvarez, Yordan” and 39 other values |
| player_url | 40 | baseballsavant.mlb.com |
| runs_all | 40 | 19.75 to 60.85, median 25.71 |
| runs_chase | 40 | 6.93 to 33.33, median 18.36 |
| runs_heart | 40 | -11.06 to 15.45, median 3.89 |
| runs_shadow | 40 | -21.73 to 14.18, median -8.21 |
| runs_waste | 40 | 7.67 to 19.72, median 12.87 |
| team_id | 40 | |
| team_name_abbrev | 40 | “HOU” and 24 other values |
| year | 40 | 2,026 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| group | string | No | Row group Allowed values: Batter, Pitcher. | ||
| year | string | No | Season, All, or Career Allowed values: All, Career, 2026, 2025, 2024, 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008. | ||
| team | string | No | MLB numeric team id; omit for all teams | ||
| min | string | No | Minimum plate appearances Allowed values: q, 10, 25, 50, 75, 100, 150, 200, 250, 500, 600, 700, 800, 900, 1000, 1500. | ||
| leverage | string | No | Run-value method Allowed values: Neutral, Leveraged. | ||
| type | string | No | Table view Allowed values: All, Swing-Take, Pitch Type, Attack Region, Bat-side. | ||
| sub_type | string | No | Conditional subtype: Swing/Take; pitch name; or Heart/Shadow/Chase/Waste Allowed values: Swing, Take, 4-Seam Fastball, Changeup, Curveball, Cutter, Knuckleball, Screwball, Sinker, Slider, Slurve, Split-Finger, Sweeper, Heart, Shadow, Chase, Waste. | ||
| sort | string | No | Local table sort field; supported set varies by view Allowed values: player_name, team_name_abbrev, year, pa, pitches, runs_heart, runs_shadow, runs_chase, runs_waste, runs_all, runs_ff, runs_si, runs_fc, runs_ch, runs_fs, runs_cu, runs_sl, runs_st, runs_sv, runs_kn, runs_sc, delta_runs. | ||
| 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: 10000. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/mlb/statcast-run-value?group=Batter&year=All&min=q&leverage=Neutral&type=All&sub_type=Swing&sort=player_name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"board": "swing-take",
"group": "Batter",
"year": "2026",
"min": "q",
"leverage": "Neutral",
"type": "All",
"total": 300,
"sort": "runs_all",
"sort_dir": "desc",
"offset": 0,
"limit": 1,
"rows": [
{
"player_name": "Example Player",
"player_id": 123456,
"team_name_abbrev": "NYY",
"pa": 600,
"runs_all": 14.2,
"player_url": "https://baseballsavant.mlb.com/sporty-videos?player_id=123456"
}
],
"source_url": "https://baseballsavant.mlb.com/leaderboard/swing-take?...",
"fetched_at": "2026-09-30T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastRunValueResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| board | string | No | swing-take | |||
| group | string | No | Batter | |||
| rows | array | No | ||||
| total | integer | No | 300 | |||
| year | string | No | 2026 |
| 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-run-value?group=Batter&year=All&min=q&leverage=Neutral&type=All&sub_type=Swing&sort=player_name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"