MLB API endpoint
Returns the separate Outs Above Average leaderboard for fielders, fielding teams, batters, batting teams, or pitchers. Supports season range, split years, team, monthly range, attempts, position, detailed fielder roles, local sorting, and pagination.
/mlb/statcast-oaaQuery parameters:
type is one of Fielder, Fielding_Team, Batter, Batting_Team, or Pitcher; defaults to Fielder.start_year and end_year are ordered seasons from 2016 through the current season; each defaults to the current season.split is no or yes; defaults to no.team_id is an optional MLB team id from /api/v1/mlb/teams.range is year, 4 (March/April), 5 (May), 6 (June), 7 (July), 8 (August), or 9 (September); defaults to year.minimum is q, 10, 25, 50, 75, 100, 150, 200, or 250; defaults to q.position is if, of, 3, 4, 5, 6, 7, 8, or 9.roles is an optional comma-separated list of 32, 30, 31, 77, 71, 70, 72, 78, 43, 42, 40, 41, 46, 87, 81, 82, 89, 64, 62, 60, 61, 98, 91, 90, 92, 99, 51, 50, or 52. Call /api/v1/mlb/discovery for each role's field-position description.sort is one of entity_name, display_team_name, primary_pos_formatted, fielding_runs_prevented, outs_above_average, outs_above_average_infront, outs_above_average_lateral, outs_above_average_behind, actual_success_rate, adj_estimated_success_rate, diff_success_rate, or n; defaults to outs_above_average.sort_dir is asc or desc; defaults to desc.limit is 1–500; defaults to 100.offset is 0–5000; defaults to 0.Sorting and pagination are applied locally. Team views ignore position, roles, and minimum attempts upstream, so non-default uses of those filters are rejected. The toggleViz display control on the source page changes only presentation and is not included. Discovery returns exact accepted values and role descriptions.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| rank | 40 | 1 to 40, median 20 |
| entity_id | 40 | |
| name | 40 | “Witt Jr., Bobby” and 39 other values |
| team_id | 40 | |
| team | 40 | “Royals” and 28 other values |
| position | 40 | SS (37), 3B (2), 2B (1) |
| qualified | 40 | true in 40 of 40 |
| metrics | 40 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| type | string | No | Leaderboard view Allowed values: Fielder, Fielding_Team, Batter, Batting_Team, Pitcher. | ||
| start_year | integer | No | Start season from 2016 through the current season | ||
| end_year | integer | No | End season from 2016 through the current season | ||
| split | string | No | Return one row per season in a year range Allowed values: no, yes. | ||
| team_id | string | No | Optional MLB team id from mlb_teams | ||
| range | string | No | Time range Allowed values: year, 4, 5, 6, 7, 8, 9. | ||
| minimum | string | No | Minimum attempts Allowed values: q, 10, 25, 50, 75, 100, 150, 200, 250. | ||
| position | string | No | Position filter Allowed values: if, of, 3, 4, 5, 6, 7, 8, 9. | ||
| roles | string | No | Comma-separated detailed fielder role ids. Values: 32,30,31,77,71,70,72,78,43,42,40,41,46,87,81,82,89,64,62,60,61,98,91,90,92,99,51,50,52 | ||
| sort | string | No | Sort field Allowed values: entity_name, display_team_name, primary_pos_formatted, fielding_runs_prevented, outs_above_average, outs_above_average_infront, outs_above_average_lateral, outs_above_average_behind, actual_success_rate, adj_estimated_success_rate, diff_success_rate, n. | ||
| 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-oaa?type=Fielder&split=no&range=year&minimum=q&position=if&sort=entity_name&sort_dir=asc&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"board": "outs_above_average",
"type": "Fielder",
"start_year": 2026,
"end_year": 2026,
"split": "no",
"range": "year",
"minimum": "q",
"sort": "outs_above_average",
"sort_dir": "desc",
"total": 272,
"offset": 0,
"limit": 1,
"rows": [
{
"rank": 1,
"entity_id": "682928",
"name": "Example Fielder",
"team_id": "120",
"team": "Nationals",
"position": "SS",
"qualified": true,
"metrics": {
"outs_above_average": -17
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/mlb.statcastBoardResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | mlb.StatcastBoardResponse | No | ||||
| data.board | string | No | ||||
| data.end_year | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.filter_type | string | No | ||||
| data.league_average | array | No | ||||
| data.limit | integer | No | ||||
| data.minimum | string | No | ||||
| data.offset | integer | No | ||||
| data.position | string | No | ||||
| data.range | string | No | ||||
| data.roles | array | No | ||||
| data.rows | array | No | ||||
| data.rows[].entity_id | string | No | ||||
| data.rows[].metrics | object | No | ||||
| data.rows[].name | string | No | ||||
| data.rows[].position | string | No | ||||
| data.rows[].qualified | boolean | No | ||||
| data.rows[].rank | integer | No | ||||
| data.rows[].team | string | No | ||||
| data.rows[].team_id | string | 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 | integer | No | ||||
| data.total | integer | No | ||||
| data.type | string | No | ||||
| data.year | integer | 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-oaa?type=Fielder&split=no&range=year&minimum=q&position=if&sort=entity_name&sort_dir=asc&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"