FanDuel API endpoint
Counts today's races by country, race type, status, surface and class, and lists the sort names, so every value the other racing routes accept is discoverable. Statuses, race types, surfaces, classes and countries are data-driven sets, so the counts are today's live inventory; a country appears here only while it is racing.
/fanduel/racing/filtersNone.
statuses, race_types, surfaces, classes and countries are data-driven sets: a country appears only while it is racing, and classes is open (40+ values on 2026-10-23, such as CLM Claiming, MSW Maiden Special Weight, STK Stakes, T Trot, P Pace).O Open, IC Up Next, SK Race Off and RO Race Official; race types T Thoroughbred, H Harness, Q QuarterHorse and L Thoroughbred LARC; surfaces T Turf, D Dirt, E Synthetic, F Sand and I Inner Track.track_sorts are ivr, mtp, name, wagerable_mtp; race_sorts are mtp, post_time, race_number.Data is read from FanDuel Racing's own public service and is shown as published at the time of the request; it is not a betting recommendation, and prices, pools and statuses change by the minute. 503 on upstream failure.
| Field | Filled in, of 44 checked | Values in the sample |
|---|---|---|
| code | 44 | |
| name | 44 | “Pace” and 33 other values |
| count | 44 | 1 to 127, median 5 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/racing/filters" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"race_date": "2026-10-23",
"race_count": 23,
"track_count": 16,
"countries": [
{
"code": "AUS",
"count": 7
},
{
"code": "USA",
"count": 5
}
],
"race_types": [
{
"code": "T",
"name": "Thoroughbred",
"count": 19
},
{
"code": "H",
"name": "Harness",
"count": 2
}
],
"statuses": [
{
"code": "O",
"name": "Open",
"count": 15
},
{
"code": "RO",
"name": "Race Official",
"count": 4
}
],
"surfaces": [
{
"code": "T",
"name": "Turf",
"count": 13
},
{
"code": "D",
"name": "Dirt",
"count": 5
}
],
"classes": [
{
"code": "U",
"name": "Unknown",
"count": 5
},
{
"code": "BM",
"name": "Benchmark",
"count": 3
}
],
"track_sorts": [
"ivr",
"mtp"
],
"race_sorts": [
"mtp",
"post_time"
],
"fetched_at": "2026-10-23T16:09:31Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.racingFiltersResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.RacingFiltersResponse | No | ||||
| data.classes | array | No | ||||
| data.classes[].code | string | No | ||||
| data.classes[].count | integer | No | ||||
| data.classes[].name | string | No | ||||
| data.countries | array | No | ||||
| data.countries[].code | string | No | ||||
| data.countries[].count | integer | No | ||||
| data.countries[].name | string | No | ||||
| data.fetched_at | string | No | ||||
| data.race_count | integer | No | ||||
| data.race_date | string | No | ||||
| data.race_sorts | array | No | ||||
| data.race_types | array | No | ||||
| data.race_types[].code | string | No | ||||
| data.race_types[].count | integer | No | ||||
| data.race_types[].name | string | No | ||||
| data.statuses | array | No | ||||
| data.statuses[].code | string | No | ||||
| data.statuses[].count | integer | No | ||||
| data.statuses[].name | string | No | ||||
| data.surfaces | array | No | ||||
| data.surfaces[].code | string | No | ||||
| data.surfaces[].count | integer | No | ||||
| data.surfaces[].name | string | No | ||||
| data.track_count | integer | No | ||||
| data.track_sorts | array | No | ||||
| msg | string | No | OK |
| 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/fanduel/racing/filters" \
-H "x-api-key: $CRAWLORA_API_KEY"