One race's upset score
Every plan, free key included
One race judged by the upset rules.
Examplea real answer from 2026-10-29
{
"data": {
"race_id": "rc_0aa1c4st",
"meeting_id": "mt_yzs5rm2b",
"course_id": "cr_239y20yw",
"course": "Abu Dhabi",
"country": "UAE",
"region": "UAE",
"date": "2026-10-29",
"off_time": "13:01:21",
"name": "Race 1 - Al Ghadeer Handicap",
"runners": 11,
"is_upset": false,
"shock_score": 0,
"why": [],
"rules": [],
"winner": {
"horse_id": "hs_x73ps4xh",
"horse": "Af Saqara",
"jockey_id": "jk_xr618k8m",
"jockey": "Bernardo Pinheiro",
"trainer_id": "tr_j3qtz590",
"trainer": "Ernst Oertel"
},
"winner_price": {
"price": "7/1",
"decimal": 8,
"source": "sp"
},
"favourite": {
"horse_id": "hs_ngjpqrbn",
"horse": "Es Khairiyah",
"position": 4
},
"favourite_price": {
"price": "7/4",
"decimal": 2.75
},
"rating_gap": null
},
"meta": {
"request_id": "c12477664e18f0a6",
"plan": "complete",
"window": "January 2017 to the next 3 days",
"data_as_of": "2026-10-30T09:26:03+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. |
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. |
runners | integer | The runners, or how many there were. |
is_upset | boolean | |
shock_score | integer | How big an upset, 0 to 100. |
why | array | Why it counts as an upset. |
rules | array | |
winner | object | |
winner.horse_id | string | Our id for the horse. |
winner.horse | string | The horse's name. |
winner.jockey_id | string | Our id for the jockey. |
winner.jockey | string | The jockey's name. |
winner.trainer_id | string | Our id for the trainer. |
winner.trainer | string | The trainer's name. |
winner_price | object | The winner's price. Null on the free key. |
winner_price.price | string | |
winner_price.decimal | integer | |
winner_price.source | string | |
favourite | object | Whether it started favourite. Null on the free key. |
favourite.horse_id | string | Our id for the horse. |
favourite.horse | string | The horse's name. |
favourite.position | integer | Where it finished; null for a non-finisher. |
favourite_price | object | The favourite's price. Null on the free key. |
favourite_price.price | string | |
favourite_price.decimal | number | |
rating_gap | null or value |
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. |