FanDuel API endpoint
Returns today's official races with their results: winning time, finish order with win, place and show payoffs, and the payoff of every wager type. A race the service reports as refunded has no finishers and one payoff whose selection is `Refund`. Filter by track, country and race type.
/fanduel/racing/resultstrack (optional, repeatable or comma-separated): track codes such as LRL; malformed codes return 400. List codes with the tracks route.country (optional, repeatable or comma-separated): upper-case three-letter country codes such as USA, CAN, GBR, AUS, FRA, IRL, SWE. Today's codes are in the filters route's countries. Lower-case, two-letter or malformed values return 400; a well-formed code that is not racing today returns an empty list.exclude_country (optional, repeatable or comma-separated): drop these countries; same codes as country.race_type (optional, repeatable or comma-separated): T Thoroughbred, H Harness, Q QuarterHorse, L Thoroughbred LARC. Any other value returns 400; no greyhound races were on the service on 2026-10-23.page (optional): page number from 1 to 10000; default 1; a value outside that range returns 400.limit (optional): items per page, 1 to 200; default 50.RO (Race Official) are returned.Refund (9 of the 64 official races on 2026-10-23).finishers[].position is the finish position; payoffs are per the stated wager_amount.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 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| track_code | 40 | |
| track_name | 40 | Bangor Raceway (11), Belmont (11), Downs at Albuquerque (9) and 3 more |
| country | 40 | USA (31), AUS (9) |
| number | 40 | 1 to 11, median 4 |
| race_date | 40 | 2026-10-24 |
| mtp | 40 | 0 |
| post_time | 40 | 2026-10-24 to 2026-10-25 |
| status | 40 | |
| race_type | 40 | |
| surface | 40 | |
| race_class | 40 | |
| distance | 40 | “4.5f” and 14 other values |
| purse | 40 | 2,812 to 250,000, median 21,037 |
| runner_count | 40 | 5 to 12, median 8 |
| live_streaming | 40 | true in 40 of 40 |
| results | 40 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| track | string | No | Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`; list codes with the `tracks` route | ||
| country | string | No | Keep only races or tracks in these countries (repeat the parameter or comma-separate): upper-case three-letter codes such as `USA`, `GBR`, `AUS`. Today's codes are listed in the `filters` route's `countries`; lower-case or two-letter values return `400` | ||
| exclude_country | string | No | Drop these countries (repeat the parameter or comma-separate), same codes as `country` | ||
| race_type | string | No | Keep only these race types (repeat the parameter or comma-separate): `T` Thoroughbred, `H` Harness, `Q` QuarterHorse, `L` Thoroughbred LARC Allowed values: T, H, Q, L. | ||
| page | integer | No | Page number, from 1; default 1, at most 10000 Minimum: 1. Maximum: 10000. | ||
| limit | integer | No | Items 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/results?country=us&race_type=T&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"race_date": "2026-10-23",
"total": 4,
"page": 1,
"limit": 2,
"results": [
{
"id": "CQD-1",
"track_code": "CQD",
"track_name": "GB - Cheltenham",
"country": "GBR",
"number": "1",
"race_date": "2026-10-23",
"mtp": 0,
"post_time": "2026-10-23T12:15:31Z",
"status": {
"code": "RO",
"name": "Race Official"
},
"race_type": {
"code": "T",
"name": "Thoroughbred"
},
"surface": {
"code": "T",
"name": "Turf"
},
"race_class": {
"code": "Z-I-H",
"name": "Handicap Hurdle"
},
"distance": "19.9f",
"purse": 34000,
"runner_count": 13,
"live_streaming": true,
"results": {
"winning_time": 296.6,
"finishers": [
{
"position": 1,
"number": "6",
"runner": "Frontier Prince",
"win_payoff": 26.2,
"place_payoff": 6.2,
"show_payoff": 0,
"silk_url": "https://images.timeform.com/silks/00828789.png"
}
],
"payoffs": [
{
"wager_type": {
"code": "WN",
"name": "Win"
},
"wager_amount": 1,
"selections": [
{
"selection": "6",
"payout": 13.1
}
]
}
]
}
}
],
"fetched_at": "2026-10-23T16:09:31Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.racingResultsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.RacingResultsResponse | No | ||||
| data.fetched_at | string | No | ||||
| data.limit | integer | No | ||||
| data.page | integer | No | ||||
| data.race_date | string | No | ||||
| data.results | array | No | ||||
| data.results[].country | string | No | ||||
| data.results[].distance | string | No | ||||
| data.results[].id | string | No | ||||
| data.results[].live_streaming | boolean | No | ||||
| data.results[].mtp | integer | No | ||||
| data.results[].number | string | No | ||||
| data.results[].post_time | string | No | ||||
| data.results[].purse | number | No | ||||
| data.results[].race_class | fanduel.RacingCodeName | No | ||||
| data.results[].race_class.code | string | No | ||||
| data.results[].race_class.name | string | No | ||||
| data.results[].race_date | string | No | ||||
| data.results[].race_type | fanduel.RacingCodeName | No | ||||
| data.results[].race_type.code | string | No | ||||
| data.results[].race_type.name | string | No | ||||
| data.results[].results | fanduel.RacingResults | No | RacingResults record, 27 fields: finishers, payoffs, winning_time. Described under FanDuel Racing race detail API. | |||
| data.results[].runner_count | integer | No | ||||
| data.results[].status | fanduel.RacingCodeName | No | ||||
| data.results[].status.code | string | No | ||||
| data.results[].status.name | string | No | ||||
| data.results[].surface | fanduel.RacingCodeName | No | ||||
| data.results[].surface.code | string | No | ||||
| data.results[].surface.name | string | No | ||||
| data.results[].track_code | string | No | ||||
| data.results[].track_name | string | No | ||||
| data.total | integer | 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/results?country=us&race_type=T&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"