FanDuel API endpoint
Returns a horse's career record (starts, wins, top-three finishes, win percentage) and its past races newest first, each with the race conditions and the horse's own result line: finish position, post-race report, beaten lengths and starting price when the track reports them. Needs the horse's `id` from the `search` route; an unknown id returns 404.
/fanduel/racing/horseid (required): the horse's entity id, from a runner result of the search route, such as 1002257. Digits only, up to 10; anything else returns 400. An id with no horse returns 404.page (optional): 1 to 10000; default 1. limit (optional): 1 to 200; default 50. Paging is applied to the races after they are read.starts, wins and top3 come from the service's career counters and win_percentage is wins / starts to one decimal. They are the service's own career counters; total is the number of past races it returned.track_code, date, number, description, distance, purse, surface, race_type, race_class) and result, the horse's own line: position, number, entry, the win, place and show payoffs for a $2 bet (0 means the horse did not pay in that pool) and, when the track reports it, timeform with beaten_lengths, total_beaten_lengths, starting_price (decimal) and post_race_report. winning_time is in seconds and is often absent for older races.BC Keeneland).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 6 checked | Values in the sample |
|---|---|---|
| id | 6 | |
| track_code | 6 | |
| track_name | 6 | “BC Keeneland” and 3 other values |
| number | 6 | 7 to 11, median 9 |
| date | 6 | 2021-04-24 to 2022-11-05 |
| post_time | 6 | 2021-04-24 to 2022-11-05 |
| description | 6 | “Longines Breeders' Cup Classic - FOR THREE-YEAR-OLDS AND UP…” and 5 other values |
| distance | 6 | |
| purse | 6 | 61,000 to 6,000,000, median 300,000 |
| claiming_price | 6 | 0 |
| runner_count | 6 | 5 to 8, median 6 |
| surface | 6 | |
| track_condition | 6 | Fast in all 6 |
| race_type | 6 | |
| race_class | 6 | |
| result | 6 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Horse id (`id` of a `runner` result of the `search` route), such as `1002257` | 1002257 | |
| page | integer | No | Page of races, 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/horse?id=1002257&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"id": "1002257",
"starts": 6,
"wins": 6,
"top3": 6,
"win_percentage": 100,
"total": 6,
"page": 1,
"limit": 1,
"races": [
{
"id": "KEE-11-2022-11-05T00:00:00",
"track_code": "KEE",
"track_name": "BC Keeneland",
"number": "11",
"date": "2022-11-05",
"post_time": "2022-11-05T21:40:00Z",
"distance": {
"value": 10,
"unit": "Furlongs",
"code": "F"
},
"purse": 6000000,
"runner_count": 8,
"surface": {
"code": "D",
"name": "Dirt"
},
"race_type": {
"code": "T",
"name": "Thoroughbred"
},
"race_class": {
"code": "STK",
"name": "Stakes"
},
"result": {
"position": 1,
"number": "4",
"runner": "Flightline",
"entry": 4,
"timeform": {
"beaten_lengths": 0,
"total_beaten_lengths": 0,
"starting_price": 1.44,
"post_race_report": "press early,4p 1st,stalked,bid 1/4,took over upper,romped stretch"
}
}
}
],
"fetched_at": "2026-10-24T07:00:00Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.racingHorseResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.RacingHorseResponse | No | ||||
| data.fetched_at | string | No | ||||
| data.id | 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[].result | fanduel.RacingFinisher | No | RacingFinisher record, 16 fields: entry, finish_status, number, place_payoff, position, runner, show_payoff, silk_url, timeform, win_payoff. Described under FanDuel Racing race detail API. | |||
| 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.races[].winning_time | number | No | ||||
| data.starts | integer | No | ||||
| data.top3 | integer | No | ||||
| data.total | integer | No | ||||
| data.win_percentage | number | No | ||||
| data.wins | 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/horse?id=1002257&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"