UK Horse Racing API documentation
British and Northern Irish racing in one clean JSON API: every course, every card and runner, results with starting prices and the market, written race reports, and the trainers, jockeys and owners behind every horse. Every UK race since January 2017, brought up to date every couple of minutes on race days, across 46 endpoints.
It is built for people making racing sites and apps, form tools, research and backtests, and assistants that answer racing questions. It is factual data only, with no tips or predictions. Every endpoint has its own page below, with Run beside the words.
Start here
Sign in with Google. Your free key appears at once and reads yesterday's UK racing.
Get a free keySend it as X-API-Key. Yesterday's results are the call most people make first.
Quick startYour first call, live
{
"data": [
{
"meeting_id": "mt_b5898ppq",
"course_id": "cr_jqze1jjy",
"course": "Bath",
"country": "ENG",
"region": "GB",
"date": "2026-10-29",
"going": "Soft (Heavy in places)",
"surface": "TURF",
"races": [
{
"race_id": "rc_c2v2dgjt",
"meeting_id": "mt_b5898ppq",
"course": "Bath",
"time": "12:42",
"off_time": "12:44:22",
"name": "David Cole Memorial EBF Novice Stakes (GBB/GBBPlus Race) (Div 1)",
"run_type": "Flat",
"class": "3",
"distance": "1m",
"going": "Soft (Heavy in places)",
"surface": "TURF",
"handicap": false,
"runners": 12,
"result_available": true
},
{
"race_id": "rc_dk34v84n",
"meeting_id": "mt_b5898ppq",
"course": "Bath",
"time": "13:12",
"off_time": "13:15:53",
"name": "David Cole Memorial EBF Novice Stakes (GBB/GBBPlus Race) (Div 2)",
"run_type": "Flat",
"class": "3",
"distance": "1m",
"going": "Soft (Heavy in places)",
"surface": "TURF",
"handicap": false,
"runners": 11,
"result_available": true
},
{
"race_id": "rc_j4rqb8cc",
"meeting_id": "mt_b5898ppq",
"course": "Bath",
"time": "13:42",
"off_time": "13:45:03",
"name": "Bath Luxury Toilet Hire Nursery",
"run_type": "Flat",
"class": "6",
"distance": "1m",
"going": "Soft (Heavy in places)",
"surface": "TURF",
"handicap": true,
"runners": 8,
"result_available": true
}
]
},
{
"meeting_id": "mt_rc6bwdyr",
"course_id": "cr_7vbqtcfg",
"course": "Ffos Las",
"country": "Wale",
"region": "GB",
"date": "2026-10-29",
"going": "Heavy (Soft in places)",
"surface": "TURF",
"races": [
{
"race_id": "rc_tkpw2q6x",
"meeting_id": "mt_rc6bwdyr",
"course": "Ffos Las",
"time": "13:30",
"off_time": "13:30:34",
"name": "bettingsites.co.uk Maiden Hurdle (GBB Race)",
"run_type": "Hurdle",
"class": "4",
"distance": "2m 4f",
"going": "Heavy (Soft in places)",
"surface": "TURF",
"handicap": false,
"runners": 13,
"result_available": true
},
{
"race_id": "rc_xqhxz6j1",
"meeting_id": "mt_rc6bwdyr",
"course": "Ffos Las",
"time": "14:00",
"off_time": "14:00:28",
"name": "Dandara Maiden Hurdle (GBB Race)",
"run_type": "Hurdle",
"class": "4",
"distance": "1m 7f 182y",
"going": "Heavy (Soft in places)",
"surface": "TURF",
"handicap": false,
"runners": 10,
"result_available": true
},
{
"race_id": "rc_zq7h6pfn",
"meeting_id": "mt_rc6bwdyr",
"course": "Ffos Las",
"time": "14:30",
"off_time": "14:31:05",
"name": "bettingsites.co.uk Handicap Hurdle",
"run_type": "Hurdle",
"class": "5",
"distance": "2m 4f",
"going": "Heavy (Soft in places)",
"surface": "TURF",
"handicap": true,
"runners": 6,
"result_available": true
}
]
}
],
"meta": {
"request_id": "3fc5b745f31684fb",
"plan": "complete",
"window": "January 2017 to the next 3 days",
"data_as_of": "2026-10-30T04:03:33+00:00",
"count": 4
}
}Every subject
Every UK course: where it is, which way round, what it races and its fixtures ahead.
Read the guideOne race in full: the field, the result, the market, dividends and upsets.
Read the guideSearch, profiles and form for the people behind every runner.
Read the guideEvery endpoint
/v1/coursesEvery UK course, busiest first/v1/courses/{course_id}One course: what is raced there and the distances/v1/courses/{course_id}/fixturesThe meetings ahead at one course /v1/meetings/calendarThirty days back and the week ahead, one row per UK course per day/v1/meetings/{date}Every UK meeting on a date, with going and weather/v1/meetings/{meeting_id}One meeting and every race on it/v1/racecards/todayToday's UK cards, grouped by meeting/v1/racecards/upcomingDeclarations for the next few days/v1/racecards/{date}The full UK card for any date/v1/results/latestThe latest settled UK races your plan can read/v1/results/yesterdayEvery settled UK race from yesterday/v1/results/{date}Settled UK races for a date /v1/races/searchUK races by date, course, type, going, class and field size/v1/races/{race_id}One race: conditions, the market and every runner/v1/races/{race_id}/runnersThe field alone/v1/races/{race_id}/resultFinishing order, casualties, dividends and prize money/v1/races/{race_id}/marketBook percentage, every price and what moved/v1/races/{race_id}/dividendsTote returns and prizes/v1/races/{race_id}/analysisMarket shape and what the course and distance usually produce/v1/upsetsThe day's UK shocks, scored 0 to 100/v1/upsets/{race_id}One race judged by the upset rules /v1/reportsWritten UK race reports since 2020/v1/reports/{race_id}The written account of one race /v1/searchOne lookup across horses, trainers, jockeys and courses/v1/horses/searchHorses by name/v1/horses/compareEvery race two to five horses met in/v1/horses/{horse_id}A horse's record and breeding/v1/horses/{horse_id}/formA horse's UK runs, newest first/v1/horses/{horse_id}/pedigreeSire, dam, damsire and others by the sire /v1/trainers/searchTrainers by name/v1/trainers/{trainer_id}A trainer's runners, wins and horses/v1/trainers/{trainer_id}/formA trainer's UK runners, newest first/v1/jockeys/searchJockeys by name/v1/jockeys/{jockey_id}A jockey's rides and wins/v1/jockeys/{jockey_id}/formA jockey's UK rides, newest first/v1/owners/searchOwners by name/v1/owners/{owner_id}An owner's runners, trainers and horses /v1/trainers/{trainer_id}/statsStrike rate, A/E and level stakes, by any dimension/v1/trainers/{trainer_id}/coursesA trainer's record by UK course/v1/trainers/{trainer_id}/jockeysWhich riders have paid for the yard/v1/jockeys/{jockey_id}/statsA jockey's strike rate and A/E, by any dimension/v1/jockeys/{jockey_id}/trainersWhich yards a rider does well for/v1/owners/{owner_id}/statsAn owner's strike rate and A/E, by any dimension/v1/owners/{owner_id}/coursesWhere the colours have done well/v1/owners/{owner_id}/jockeysRiders used, and how they paid /v1/usageYour plan, window and calls used Popular calls
| Call | What it gives |
|---|---|
GET /v1/trainers/search | Trainers by name |
GET /v1/results/yesterday | Every settled UK race from yesterday |
GET /v1/racecards/today | Today's UK cards, grouped by meeting |
GET /v1/races/{race_id} | One race: conditions, the market and every runner |
GET /v1/courses | Every UK course, busiest first |
Use with Claude and agents
Give an assistant the whole API. The MCP server lets Claude, ChatGPT or Cursor call it for you with your key; the agent skill teaches any agent how to use it well; the manual is everything here in one file. Save the skill as ~/.claude/skills/horseracingapi-uk/SKILL.md, or upload it as a skill in Claude's settings.
Everything here in one markdown file, and llms.txt to find it.
/documentation/manual.mdPlans in short
| Plan | Reads | Per minute | Per month | Price |
|---|---|---|---|---|
| Free key | yesterday only | 60 | 50 | Free |
| Live | today and the next 3 days | 180 | 250,000 | £35 |
| Archive | January 2017 to yesterday | 90 | 150,000 | £60 |
| Complete | January 2017 to the next 3 days, reports and statistics | 180 | 400,000 | £89 |
Annual plans cost ten months. Compare them on the pricing page, or read plans and limits.
What is new
- 2026-10-29MCP server at /mcp: 14 tools for Claude, ChatGPT, Cursor and Claude Code, with sign-in for the connectors.
- 2026-10-29Documentation published: a page for every endpoint and guide, the manual, llms.txt, the agent skill and OpenAPI.
- 2026-10-29The first 46 endpoints: courses, cards and results, races and markets, race reports, horses, trainers, jockeys and owners, and statistics.
The rest
Your key in X-API-Key or as Authorization: Bearer, never in the address. Rotating keeps the old key for 24 hours.
Every error is a fixed code with a plain message and a request id. Branch on the code.
Long lists come a page at a time; pass next_cursor back while has_more is true.
Per minute and per month by plan, with the counts left in every answer's headers.
The site, the API and the MCP server, checked every minute.
Ask a question or report a problem; quote the request id from the answer.
Questions people ask
Are race times in UTC?
No. A race time is the time on the racecourse clock, because that is the time racing is run to. Every other time is UTC, with a Z. More
Which courses are covered?
Every course in Great Britain and Northern Ireland. Racing in the Republic of Ireland and the rest of the world is not included. More
How far back does it go?
Every UK race since 1 January 2017 on Archive and Complete. Race reports start in 2020. More
What does the free key hold back?
It reads yesterday only, and prices come back as null. The fields stay, so code built on the free key keeps working when you upgrade. More
Can I keep and show the ids?
Yes. Every id is ours, stable and safe to store. Take them from answers; never build one. More
Is there betting advice?
No. It is factual racing data only: no tips, ratings or predictions on any endpoint. More