A race's analysis
Live, Archive and Complete
Market shape and what the course and distance usually produce.
Examplea real answer from 2026-10-29
{
"data": {
"race_id": "rc_0aa1c4st",
"course": "Abu Dhabi",
"date": "2026-10-29",
"conditions": {
"run_type": "Flat",
"distance": "6f",
"going": "Good",
"surface": "TURF",
"class": null,
"handicap": true,
"runners": 12
},
"market": {
"book_percentage": 133.36,
"shape": {
"shortest": 2.75,
"longest": 26,
"median": 10.25,
"spread": 9.5,
"priced": 12
},
"favourites": [
{
"horse_id": "hs_ngjpqrbn",
"horse": "Es Khairiyah",
"sp": "7/4",
"position": 4
}
],
"movers": []
},
"at_this_course_and_distance": {
"races": 4,
"typical_field": 12.8,
"typical_book": 134.7,
"favourite_runs": 4,
"favourite_wins": 1,
"favourite_strike": 0.25
},
"note": "Context for one race. For statistics across the archive see /v1/analysis/angles and the course endpoints."
},
"meta": {
"request_id": "8c77b0ee699154b5",
"plan": "complete",
"window": "January 2017 to the next 3 days",
"data_as_of": "2026-10-30T09:35:33+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. |
course | string | The course name. |
date | string | The UK racing day, YYYY-MM-DD. |
conditions | object | |
conditions.run_type | string | Flat, Hurdle, Chase or NH Flat. |
conditions.distance | string | The race distance as published, for example 2m 87y. |
conditions.going | string | The going as declared; null until it is. |
conditions.surface | string | Turf or the all-weather surface. |
conditions.class | null or value | The race class. |
conditions.handicap | boolean | Whether the race is a handicap. |
conditions.runners | integer | The runners, or how many there were. |
market | object | |
market.book_percentage | number | The total of the market's implied chances. Null on the free key. |
market.shape | object | |
market.favourites | array | |
market.movers | array | |
at_this_course_and_distance | object | |
at_this_course_and_distance.races | integer | The races, or how many there have been. |
at_this_course_and_distance.typical_field | number | |
at_this_course_and_distance.typical_book | number | |
at_this_course_and_distance.favourite_runs | integer | |
at_this_course_and_distance.favourite_wins | integer | |
at_this_course_and_distance.favourite_strike | number | |
note | string |
Errors
| Code | Status | When |
|---|---|---|
unauthorized | 401 | No key was sent, or the key is not one of ours. |
upgrade_required | 403 | Your plan does not reach this endpoint. The answer names the plans that do. |
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. |