One race
Every plan, free key includedMCP: race_details
One race: conditions, the market and every runner.
Examplea real answer from 2026-10-29, trimmed to a few rows
{
"data": {
"race_id": "rc_0aa1c4st",
"meeting_id": "mt_yzs5rm2b",
"course_id": "cr_239y20yw",
"course": "Abu Dhabi",
"country": "UAE",
"region": "UAE",
"date": "2026-10-29",
"time": "13:00",
"off_time": "13:01:21",
"name": "Race 1 - Al Ghadeer Handicap",
"run_type": "Flat",
"class": null,
"age": "3YO plus",
"distance": "6f",
"going": "Good",
"surface": "TURF",
"handicap": true,
"winning_time": "1m 16.55s",
"book_percentage": 133.36,
"runners": [
{
"cloth": 6,
"draw": 4,
"horse_id": "hs_x73ps4xh",
"horse": "Af Saqara",
"age": 5,
"weight": "8-11",
"official_rating": null,
"form": "11-30",
"headgear": "Blinkers",
"owner": "Khalid Khalifa Al Nabooda",
"owner_id": "ow_neh55z1b",
"trainer_id": "tr_j3qtz590",
"trainer": "Ernst Oertel",
"jockey_id": "jk_xr618k8m",
"jockey": "Bernardo Pinheiro",
"silk": "Black, white star, black sleeves, white cap",
"sp": "7/1",
"sp_decimal": 8,
"price_path": {
"opening": null,
"opening_decimal": null,
"touched": null,
"sp": "7/1",
"sp_decimal": 8,
"drift": null,
"source": "starting_price_only"
},
"favourite": false,
"market_position": 3,
"position": 1,
"beaten_distance": null,
"casualty": null,
"run_status": "ran",
"last_run_days": 201,
"speed_figure": null,
"breeding": null,
"handicap_mark": null
},
{
"cloth": 11,
"draw": 7,
"horse_id": "hs_des8z34q",
"horse": "Af Marmuq",
"age": 8,
"weight": "8-6",
"official_rating": null,
"form": "011506",
"headgear": null,
"owner": "Khalid Khalifa Al Nabooda",
"owner_id": "ow_neh55z1b",
"trainer_id": "tr_j3qtz590",
"trainer": "Ernst Oertel",
"jockey_id": "jk_bvfc3660",
"jockey": "M Rodrigues",
"silk": "Black, white star, black sleeves, blue cap",
"sp": "10/1",
"sp_decimal": 11,
"price_path": {
"opening": null,
"opening_decimal": null,
"touched": null,
"sp": "10/1",
"sp_decimal": 11,
"drift": null,
"source": "starting_price_only"
},
"favourite": false,
"market_position": 7,
"position": 2,
"beaten_distance": "3/4 length",
"casualty": null,
"run_status": "ran",
"last_run_days": 208,
"speed_figure": null,
"breeding": null,
"handicap_mark": null
},
{
"cloth": 5,
"draw": 8,
"horse_id": "hs_5nzbfr73",
"horse": "Ezzah",
"age": 4,
"weight": "8-13",
"official_rating": null,
"form": "15",
"headgear": null,
"owner": "Royal Cavalry Oman",
"owner_id": "ow_2d8nknyk",
"trainer_id": "tr_t473p4q2",
"trainer": "I Hadhrami",
"jockey_id": "jk_yrn5hzfm",
"jockey": "Ray Dawson",
"silk": "Yellow, green stripe, red sleeves, red cap",
"sp": "8/1",
"sp_decimal": 9,
"price_path": {
"opening": null,
"opening_decimal": null,
"touched": null,
"sp": "8/1",
"sp_decimal": 9,
"drift": null,
"source": "starting_price_only"
},
"favourite": false,
"market_position": 4,
"position": 3,
"beaten_distance": "1 3/4 length",
"casualty": null,
"run_status": "ran",
"last_run_days": 201,
"speed_figure": null,
"breeding": null,
"handicap_mark": null
}
],
"placed": 3,
"stage": "WEIGHEDIN",
"result_available": true,
"weather": null,
"class_figure": null,
"speed_figure": null
},
"meta": {
"request_id": "1c558294fbb3ce0b",
"plan": "complete",
"window": "January 2017 to the next 3 days",
"data_as_of": "2026-10-30T10:58:35+00:00"
}
}Parameters
| Name | In | Type | Required | What it does |
|---|---|---|---|---|
race_id | path | id | yes | Our id for the race, as other answers give it (rc_ and eight characters). |
Returns
One record in data. Every answer carries meta: request_id, plan, window and data_as_of.
| Field | Type | Holds |
|---|---|---|
race_id | string | Our id for the race. |
meeting_id | string | Our id for the meeting. |
course_id | string | Our id for the course. |
course | string | The course name. |
country | string | ENG, Scot, Wale or Nort. |
region | string | GB, or NORT for Northern Ireland. |
date | string | The UK racing day, YYYY-MM-DD. |
time | string | The advertised off time by the racecourse clock, HH:MM. |
off_time | string | When the race actually went off, by the racecourse clock; null until it has. |
name | string | The name, as raced: the race title on a race. |
run_type | string | Flat, Hurdle, Chase or NH Flat. |
class | null or value | The race class. |
age | string | Age conditions of the race, or the horse's age in years. |
distance | string | The race distance as published, for example 2m 87y. |
going | string | The going as declared; null until it is. |
surface | string | Turf or the all-weather surface. |
handicap | boolean | Whether the race is a handicap. |
winning_time | string | The winner's time. |
book_percentage | number | The total of the market's implied chances. Null on the free key. |
runners | array | The runners, or how many there were. |
runners[].cloth | integer | The saddle cloth number. |
runners[].draw | integer | The stall, on the Flat. |
runners[].horse_id | string | Our id for the horse. |
runners[].horse | string | The horse's name. |
runners[].age | integer | Age conditions of the race, or the horse's age in years. |
runners[].weight | string | The weight carried, as published, for example 11-4. |
runners[].official_rating | null or value | The official handicap mark. |
runners[].form | string | Recent form figures, newest last. |
runners[].headgear | string | Headgear worn, if any. |
runners[].owner | string | The owner's name. |
runners[].owner_id | string | Our id for the owner. |
runners[].trainer_id | string | Our id for the trainer. |
runners[].trainer | string | The trainer's name. |
runners[].jockey_id | string | Our id for the jockey. |
runners[].jockey | string | The jockey's name. |
runners[].silk | string | The owner's colours, in words. |
runners[].sp | string | Starting price, fractional. Null on the free key. |
runners[].sp_decimal | integer | Starting price, decimal. Null on the free key. |
runners[].price_path | object | How the price moved: opening, touched and drift. Null on the free key. |
runners[].favourite | boolean | Whether it started favourite. Null on the free key. |
runners[].market_position | integer | Its place in the betting. Null on the free key. |
runners[].position | integer | Where it finished; null for a non-finisher. |
runners[].beaten_distance | null or value | How far behind the winner, in lengths. |
runners[].casualty | null or value | Why it did not finish, if it did not. |
runners[].run_status | string | ran, or why not. |
runners[].last_run_days | integer | Days since its previous run. |
runners[].speed_figure | null or value | A speed figure, where held. |
runners[].breeding | null or value | |
runners[].handicap_mark | null or value | |
placed | integer | How many places the race pays. |
stage | string | Where the race is: dormant, off, weighed in and so on. |
result_available | boolean | Whether the race is settled. |
weather | null or value | The weather on the day, where published. |
class_figure | null or value | A figure for the class of the race, where held. |
speed_figure | null or value | A speed figure, where held. |
Errors
| Code | Status | When |
|---|---|---|
unauthorized | 401 | No key was sent, or the key is not one of ours. |
outside_plan_window | 403 | The day asked for is outside what your plan reads. The answer gives your window and the day you asked for. |
bad_request | 400 | A value is the wrong shape: a date that is not YYYY-MM-DD, a cursor that is not ours, or a key sent in the address. |
unknown_parameter | 422 | A parameter this endpoint does not take. The answer lists the ones it does. |
not_found | 404 | No record has that id, or it is not British or Northern Irish racing. |
rate_limited | 429 | Too many calls this minute for your plan. |
quota_exceeded | 429 | Your plan's calls for the month are used. The answer says when they reset. |