Search races
Live, Archive and CompleteMCP: search_races
UK races by date, course, type, going, class and field size. British and Northern Irish racing only.
Examplea real answer from 2026-10-29, trimmed to a few rows
{
"data": [
{
"race_id": "rc_676s9p1h",
"meeting_id": "mt_4wycegh0",
"course": "Stratford",
"time": "13:50",
"off_time": "13:51:40",
"name": "EBF And Charlie Longsdon Racing 'National Hunt' Novices' Hurdle (GBB Race) (Div 1)",
"run_type": "Hurdle",
"class": "4",
"distance": "2m 70y",
"going": "Good to Soft (Soft in places)",
"surface": "TURF",
"handicap": false,
"runners": 10,
"result_available": true,
"date": "2026-10-29"
},
{
"race_id": "rc_rcq05g1h",
"meeting_id": "mt_4wycegh0",
"course": "Stratford",
"time": "14:20",
"off_time": "14:20:54",
"name": "EBF And Charlie Longsdon Racing 'National Hunt' Novices' Hurdle (GBB Race) (Div 2)",
"run_type": "Hurdle",
"class": "4",
"distance": "2m 70y",
"going": "Good to Soft (Soft in places)",
"surface": "TURF",
"handicap": false,
"runners": 10,
"result_available": true,
"date": "2026-10-29"
}
],
"meta": {
"request_id": "298eb4c0af1cf035",
"plan": "complete",
"window": "January 2017 to the next 3 days",
"data_as_of": "2026-10-30T12:46:35+00:00",
"count": 5
}
}Parameters
| Name | In | Type | Required | What it does |
|---|---|---|---|---|
date_from | query | date | no | From this UK day, YYYY-MM-DD. Held to your plan's window; meta.searched says what was used. |
date_to | query | date | no | To this UK day, YYYY-MM-DD. Held to your plan's window. |
course_id | query | id | no | Our id for the course, as other answers give it (cr_ and eight characters). |
run_type | query | string | no | The kind of race. FlatHurdleChaseNH Flat |
class | query | string | no | The race class as published, for example Class 4. |
going | query | string | no | The going as published, matched exactly, for example Good to Soft. |
surface | query | string | no | Turf, or the all-weather surface by name, for example Polytrack or Tapeta. |
handicap | query | boolean | no | true for handicaps only, false for everything else. truefalse |
min_runners | query | integer | no | Races with at least this many runners. |
max_runners | query | integer | no | Races with at most this many runners. |
result_available | query | boolean | no | true for settled races only. truefalse |
limit | query | integer | no | How many rows in one answer, 1 to 200. Default 50. |
cursor | query | string | no | next_cursor from the previous answer, to read the next rows. Never build one. |
Returns
A list in data, one row each, with meta.count. 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 | string | The course name. |
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 | string | The race class. |
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. |
runners | integer | The runners, or how many there were. |
result_available | boolean | Whether the race is settled. |
date | string | The UK racing day, YYYY-MM-DD. |
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. |