FanDuel API endpoint
Lists the races that ran on a date, at one track or at every track (558 races on 2026-10-02), with number, post time, conditions, distance, purse, surface and runner count; it has no results, so read a race with the `past-race` route. Results go back to 2008. A date with no races returns an empty list; today's date is empty until a race is official.
/fanduel/racing/past-racesdate (required): the day as YYYY-MM-DD, from 2008-01-01 (the oldest day with results found is 2008-01-31). Malformed dates and dates before 2008 return 400.track (optional): a track code such as BEL; omit it for every track (558 races on 2026-10-02, 683 on 2020-01-04).page (optional): 1 to 10000; default 1. limit (optional): 1 to 200; default 50.id, track_code, track_name, number, date, post_time, description, distance (value and unit), purse, claiming_price, runner_count, surface, track_condition when known, race_type and race_class. runner_count is the field size before scratches.past-tracks shows which tracks ran.Data is read from FanDuel Racing's own public service and is shown as published at the time of the request. 503 on upstream failure.
| Field | Filled in, of 9 checked | Values in the sample |
|---|---|---|
| id | 9 | |
| track_code | 9 | |
| track_name | 9 | Belmont in all 9 |
| number | 9 | 1 to 9, median 5 |
| date | 9 | 2026-10-02 |
| post_time | 9 | 2026-10-02 |
| description | 9 | median 369 characters |
| distance | 9 | |
| purse | 9 | 37,000 to 175,000, median 100,000 |
| claiming_price | 9 | 0 to 40,000, median 0 |
| runner_count | 9 | 6 to 12, median 9 |
| surface | 9 | |
| track_condition | 9 | Firm (5), Fast (4) |
| race_type | 9 | |
| race_class | 9 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| date | string | Yes | Day as `YYYY-MM-DD`, from `2008-01-01` | 2026-10-02 | |
| track | string | No | Track code such as `BEL`; omit for every track | ||
| page | integer | No | Page number, from 1; default 1, at most 10000 Minimum: 1. Maximum: 10000. | ||
| limit | integer | No | Races per page, 1 to 200; default 50 Minimum: 1. Maximum: 200. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/racing/past-races?date=2026-10-02&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"date": "2026-10-02",
"track": "BEL",
"total": 9,
"page": 1,
"limit": 1,
"races": [
{
"id": "BEL-9-2026-10-02T00:00:00",
"track_code": "BEL",
"track_name": "Belmont",
"number": "9",
"date": "2026-10-02",
"post_time": "2026-10-02T21:38:00Z",
"distance": {
"value": 6.5,
"unit": "Furlongs",
"code": "F"
},
"purse": 105000,
"runner_count": 16,
"surface": {
"code": "I",
"name": "Inner Track"
},
"track_condition": "Firm",
"race_type": {
"code": "T",
"name": "Thoroughbred"
},
"race_class": {
"code": "ALW",
"name": "Allowance"
}
}
],
"fetched_at": "2026-10-24T07:00:00Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.racingPastRacesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.RacingPastRacesResponse | No | ||||
| data.date | string | No | ||||
| data.fetched_at | string | No | ||||
| data.limit | integer | No | ||||
| data.page | integer | No | ||||
| data.races | array | No | ||||
| data.races[].claiming_price | number | No | ||||
| data.races[].date | string | No | ||||
| data.races[].description | string | No | ||||
| data.races[].distance | fanduel.RacingPastDistance | No | ||||
| data.races[].distance.code | string | No | ||||
| data.races[].distance.unit | string | No | ||||
| data.races[].distance.value | number | No | ||||
| data.races[].id | string | No | ||||
| data.races[].number | string | No | ||||
| data.races[].post_time | string | No | ||||
| data.races[].purse | number | No | ||||
| data.races[].race_class | fanduel.RacingCodeName | No | ||||
| data.races[].race_class.code | string | No | ||||
| data.races[].race_class.name | string | No | ||||
| data.races[].race_type | fanduel.RacingCodeName | No | ||||
| data.races[].race_type.code | string | No | ||||
| data.races[].race_type.name | string | No | ||||
| data.races[].runner_count | integer | No | ||||
| data.races[].surface | fanduel.RacingCodeName | No | ||||
| data.races[].surface.code | string | No | ||||
| data.races[].surface.name | string | No | ||||
| data.races[].track_code | string | No | ||||
| data.races[].track_condition | string | No | ||||
| data.races[].track_name | string | No | ||||
| data.total | integer | No | ||||
| data.track | 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/fanduel/racing/past-races?date=2026-10-02&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"