FanDuel API endpoint
Finds horses, jockeys, trainers and owners whose name contains the text (3 to 64 characters), with a horse's `id` and birth year and the date, race and track of each one's last start. Use a horse's `id` with the `horse` route. The service returns every match (several hundred owners for a common surname), so the list is paged here: horses first, then jockeys, trainers and owners, each group sorted by `sort` and `order`. Jockeys, trainers and owners have no id.
/fanduel/racing/searchFinds horses, jockeys, trainers and owners by name. A horse's id opens its career on the horse route.
q (required): name text, 3 to 64 characters, matched anywhere in the name and case-insensitively; leading and trailing spaces are removed first. Shorter text returns 400 (the service rejects it).type (optional): runner, jockey, trainer, owner (case-insensitive). Any other value returns 400, because the service answers an unknown kind with nothing instead of an error.sort (optional): name (default) or last_event. order (optional): asc (default) or desc. The sort applies inside each kind.page (optional): 1 to 10000; default 1. limit (optional): 1 to 200; default 50.Baf found 69 horses, 4 trainers and 71 owners, Smith 490 owners, so items is a page of one list ordered horses, jockeys, trainers, owners. counts gives the number of each kind and total the length of the whole list.type runner) have an id (the entity id for the horse route) and a birth_year; jockeys, trainers and owners have a name and a last start only.last_event is the date, race number and track code of the entity's most recent start.birth_year and last_event to tell them apart. A name may also appear in several spellings for a trainer or owner (Bob Baffert, Baffert, Bob, Baffert Bob).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 4 checked | Values in the sample |
|---|---|---|
| type | 4 | trainer in all 4 |
| name | 4 | “B Baffert” and 3 other values |
| last_event | 4 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Name text, 3 to 64 characters; matching is case-insensitive | Baf | |
| type | string | No | Keep one kind (any other value silently finds nothing upstream, so it returns `400`) Allowed values: runner, jockey, trainer, owner. | ||
| sort | string | No | Sort within each kind; default `name` Allowed values: name, last_event. | ||
| order | string | No | `asc` or `desc`; default `asc` Allowed values: asc, desc. | ||
| 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/search?q=Baf&type=runner&sort=name&order=asc&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"query": "Flightline",
"type": "runner",
"sort": "name",
"order": "asc",
"counts": {
"runner": 3,
"jockey": 0,
"trainer": 0,
"owner": 0
},
"total": 3,
"page": 1,
"limit": 50,
"items": [
{
"type": "runner",
"id": 1002257,
"name": "Flightline",
"birth_year": 2018,
"last_event": {
"date": "2022-11-05",
"race": 2,
"track": "BC3"
}
},
{
"type": "runner",
"id": 1308207,
"name": "Flightline",
"birth_year": 2022,
"last_event": {
"date": "2026-10-20",
"race": 11,
"track": "POC"
}
},
{
"type": "runner",
"id": 206177,
"name": "Flightline Niner",
"birth_year": 2007,
"last_event": {
"date": "2010-07-15",
"race": 9,
"track": "LS"
}
}
],
"fetched_at": "2026-10-24T07:00:00Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.racingSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.RacingSearchResponse | No | ||||
| data.counts | fanduel.RacingSearchCounts | No | ||||
| data.counts.jockey | integer | No | ||||
| data.counts.owner | integer | No | ||||
| data.counts.runner | integer | No | ||||
| data.counts.trainer | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.items | array | No | ||||
| data.items[].birth_year | integer | No | ||||
| data.items[].id | integer | No | ||||
| data.items[].last_event | fanduel.RacingLastEvent | No | ||||
| data.items[].last_event.date | string | No | ||||
| data.items[].last_event.race | integer | No | ||||
| data.items[].last_event.track | string | No | ||||
| data.items[].name | string | No | ||||
| data.items[].type | string | No | ||||
| data.limit | integer | No | ||||
| data.order | string | No | ||||
| data.page | integer | No | ||||
| data.query | string | No | ||||
| data.sort | string | No | ||||
| data.total | integer | No | ||||
| data.type | 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/search?q=Baf&type=runner&sort=name&order=asc&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"