Horse racing data API documentation
Horses, every endpoint on one pageHorse racing racecards for today and the days ahead, results with every finisher and starting price, horse form, jockeys and trainers with their figures, and every course held, close to 700 of them.
The horses API answers 9 calls under https://api.datasportapi.com/v1/horses/, each with its own page below: what it returns, a console to run it with your key, code in cURL, JavaScript, Python and PHP, every parameter, and every field from a real, current answer. The free key reads yesterday on every one except live and fixtures; the Horses plan, $79 a month, opens all of it.
Start here
Three steps from nothing to real horses data.
Get a free key
Sign in with Google and your key is made at once. It reads yesterday for every sport, 50 calls a day.
Get a free keyMake the first call
Send it as X-API-Key or Authorization: Bearer. Once saved, it is filled in on every console.
Read the answer
Every answer is data and meta: the rows, then paging, freshness and the age of the copy.
{
"data": [
{
"meeting_id": "hr_qxyey1mz1b",
"course_id": "hr_e891c9va9h",
"course": "Agen La Garenne",
"country": "FRA",
"region": "FR",
"date": "2026-11-02",
"going": null,
"surface": null,
"races": [
{
"race_id": "hr_jzhrfaj33b",
"meeting_id": "hr_qxyey1mz1b",
"course": "Agen La Garenne",
"time": "12:40",
"off_time": null,
"name": "Prix Pierre Pujol (Gr.a)",
"run_type": "Trot",
"class": null,
"distance": "2575m",
"going": null,
"surface": null,
"handicap": false,
"runners": 16,
"result_available": true
},
{
"race_id": "hr_ewyjpav56j",
"meeting_id": "hr_qxyey1mz1b",
"course": "Agen La Garenne",
"time": "13:10",
"off_time": null,
"name": "Prix Raymond Esclapez (Gr.b)",
"run_type": "Trot",
"class": null,
"distance": "2575m",
"going": null,
"surface": null,
"handicap": false,
"runners": 16,
"result_available": true
},
{
"race_id": "hr_4k7drnaqcq",
"meeting_id": "hr_qxyey1mz1b",
"course": "Agen La Garenne",
"time": "13:40",
"off_time": null,
"name": "Prix Alain Chadourne",
"run_type": "Trot",
"class": null,
"distance": "2575m",
"going": null,
"surface": null,
"handicap": false,
"runners": 7,
"result_available": true
}
]
},
{
"meeting_id": "hr_hp3jk09721",
"course_id": "hr_6kr681dtjd",
"course": "Ballarat",
"country": "AUS",
"region": "AUS",
"date": "2026-11-02",
"going": "Soft 7",
"surface": "Turf",
"races": [
{
"race_id": "hr_072cz9a0xq",
"meeting_id": "hr_hp3jk09721",
"course": "Ballarat",
"time": "02:30",
"off_time": null,
"name": "Manhari 3YO Maiden Plate",
"run_type": "Flat",
"class": null,
"distance": "1600m",
"going": "Soft 7",
"surface": "Turf",
"handicap": false,
"runners": 7,
"result_available": true
},
{
"race_id": "hr_77h43jpm5z",
"meeting_id": "hr_hp3jk09721",
"course": "Ballarat",
"time": "03:00",
"off_time": null,
"name": "AC Accounting Maiden Plate",
"run_type": "Flat",
"class": null,
"distance": "1000m",
"going": "Soft 7",
"surface": "Turf",
"handicap": false,
"runners": 6,
"result_available": true
},
{
"race_id": "hr_xf08mcp1pe",
"meeting_id": "hr_hp3jk09721",
"course": "Ballarat",
"time": "03:30",
"off_time": null,
"name": "Winning Edge Presentations - Emerging Stars Series Heat 5",
"run_type": "Flat",
"class": null,
"distance": "1200m",
"going": "Soft 7",
"surface": "Turf",
"handicap": false,
"runners": 10,
"result_available": true
}
]
}
],
"meta": {
"sport": "horses",
"endpoint": "/results",
"count": 24,
"as_of": "2026-11-03T04:22:33+00:00",
"cached": false,
"age_seconds": 0
}
}Horses endpoints
Every horses call, one click away. Switch sport on the bar above for another.
Racecards
2 endpointsResults
1 endpointRaces
1 endpointForm
3 endpointsWhich sport answers what
The shared calls across all sixteen. A filled square answers today; amber is being connected.
| Sport | Live | Fixtures | Results | A match | Line-ups | Timeline | Tables | Search |
|---|---|---|---|---|---|---|---|---|
| Football | ||||||||
| Horses | ||||||||
| Greyhounds | ||||||||
| Tennis | ||||||||
| Cricket | ||||||||
| Basketball | ||||||||
| Ice hockey | ||||||||
| Baseball | ||||||||
| Rugby | ||||||||
| Darts | ||||||||
| Boxing | ||||||||
| Cycling | ||||||||
| Volleyball | ||||||||
| Handball | ||||||||
| Table tennis | ||||||||
| Badminton |
Every subject
A guide for each subject of the data: what it covers, how the records link, and the common jobs.
Live scores
How live answers work, how often to ask, and telling a fresh copy from a stored one.
Read the guide ›Results
Results by day and by competition, final and half-time scores, and walking back through the history.
Read the guide ›Line-ups
Starters, substitutes, formations and minutes, and how players link to their own pages.
Read the guide ›Standings and rankings
League tables by season, ranking lists, and how they tie back to results.
Read the guide ›Racecards
Racecards for horses and greyhounds: runners, draws and traps, results with prices, and form.
Read the guide ›One schema, many sports
How the same code reads every sport you hold, and where sports differ.
Read the guide ›Use with Claude and agents
The whole API as tools, as a skill, and as one file an agent can read.
Give an agent the skill and it knows our calls, ids, plans and limits without reading these pages. Download the skill, then save it as ~/.claude/skills/datasportapi/SKILL.md, or upload it as a skill in Claude's settings. For live answers inside the assistant, add the MCP server.
MCP server
Add it to Claude, ChatGPT, Cursor or Claude Code. Fourteen tools cover every endpoint on your plan.
https://datasportapi.com/mcpAgent skill
One SKILL.md that teaches an agent our calls, ids and limits.
https://datasportapi.com/skill.mdThe manual
The whole API in one Markdown file, current with every page here.
https://datasportapi.com/documentation/manual.mdPlans in short
Every sport is its own plan. The rules are in Plans and limits.
What is new
From the changelog.
The rest
Short answers, each with its full page.
Authentication
Two headers, and keeping your key on your server.
Errors
Every code with what to do about it.
Pagination
Pages with totals, or a cursor.
Rate limits
Headers on every answer show what is left.
Freshness
How old every answer is, and why.
History
Rugby to 1871, badminton to 1899, darts to 1994.
Questions people ask
Answered here in full.
Is the answer the same shape for every sport?
Yes. Every answer is data and meta, ids are ours and stable, and the paths follow one contract for each kind of sport. Where a sport differs, its endpoint pages say so and list every field from a real answer.
Can I try every endpoint before paying?
Yes. The free key reads yesterday on every endpoint of every sport except live and fixtures, 50 calls a day, with no card.
Where does my key go in the consoles?
Paste it once on any docs page and press Save. It stays in this browser and is filled in on every other page. A key made on your account page arrives by itself.
How do I connect Claude or another assistant?
Add the MCP server as a connector and sign in. The MCP guide covers Claude, ChatGPT, Cursor and Claude Code.
How fresh is the data?
Live scores are kept for ten seconds, results for five minutes. Every answer carries its age in meta, so you always know how fresh it is.