Race report
/v1/reports/{race_id}
The written account of a single race, with a line for every runner.
Available on
Send your key in the X-API-Key header, or as
?key= if your tool cannot set one. A date outside your plan's window returns
403 outside_window naming the window, never an empty array.
Parameters
None. This endpoint takes nothing beyond your key.
Request
curl https://api.apihorseracing.com/v1/reports/rc_1P005G7 \ -H "X-API-Key: $AHR_KEY"
$ch = curl_init('https://api.apihorseracing.com/v1/reports/rc_1P005G7'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('AHR_KEY')], ]); $data = json_decode(curl_exec($ch), true)['data'];
const res = await fetch( 'https://api.apihorseracing.com/v1/reports/rc_1P005G7', { headers: { 'X-API-Key': process.env.AHR_KEY } } ); const { meta, data } = await res.json();
import os, requests r = requests.get( "https://api.apihorseracing.com/v1/reports/rc_1P005G7", headers={"X-API-Key": os.environ["AHR_KEY"]}, ).json()
curl https://api.apihorseracing.com/v1/reports/rc_1P005G7?key=$AHR_KEY
$url = 'https://api.apihorseracing.com/v1/reports/rc_1P005G7' . '?key=$AHR_KEY'; $data = json_decode(file_get_contents($url), true)['data'];
const res = await fetch( 'https://api.apihorseracing.com/v1/reports/rc_1P005G7?key=$AHR_KEY' ); const { meta, data } = await res.json();
import os, requests r = requests.get( "https://api.apihorseracing.com/v1/reports/rc_1P005G7?key=$AHR_KEY", ).json()
Response
{ "meta": { "request_id": "b7722a39a17fd661", "data_as_of": "2026-09-12T05:10:27+00:00", "plan": "analyst", "window": "2017 → upcoming" }, "data": { "race_id": "rc_2WS5ZEG", "headline": "Sulafaat wins at 3/1 for cold yard", "preview": "Lopes Dancer, backed in from 15/8 to 6/4, was the market leader at 34.5% chance. Sulafaat, second in the betting, had won 2 of 13 at Newcastle. Superyacht returned after 1341 days off at 8/1. Remember The Days, 46lb lower than last time, drifted from 9/2 to 6/1.", "report": "Sulafaat won at 3/1, having finished second on his two previous Newcastle runs this month. The favourite, Lopes Dancer, finished third at 6/4. Champagne Rules finished second at 6/1. Remember The Days, who had drifted 27% in the market and run off a mark 46lb lower than his last run, finished last of six. All six horses completed.", "runners": { "Lopes Dancer": "Lopes Dancer finished third of 6 at 6/4 favourite, having been backed in from 15/8; the market made him a 34.5% chance.", "Sulafaat": "Sulafaat won at 3/1, having finished second in each of his two previous Newcastle starts this month; he had won 2 of 13 here before today.", "Remember The Days": "Remember The Days finished sixth of 6 at 6/1, having drifted from 9/2 and run off a mark 46lb lower than last time.", "Champagne Rules": "Champagne Rules finished second of 6 at 6/1, having run at this course and distance before.", "Superyacht": "Superyacht finished fifth of 6 at 8/1, returning after 1341 days off the track.", "Madeeh": "Madeeh finished fourth of 6 at 8/1, having been backed in from 12/1 into 8/1." }, "written_at": "2026-09-13T19:39:33+00:00" } }
A real response from /v1/reports/rc_2WS5ZEG,
captured by calling the live API rather than written by hand.
Response fields
Each field is described once and rendered on every endpoint that returns it, so the wording cannot drift between pages.
| Field | Type | What it is |
|---|---|---|
| race_id | string | Opaque race identifier. Stable, and safe to store. |
| runners | integer | Runners who took part. |
Errors this endpoint returns
| Code | Status | When |
|---|---|---|
| unauthorized | 401 | No key, or one we do not recognise. Check the header name and that the key has not been rotated from your account page. |
| rate_limited | 429 | Past your per-minute rate. Retry-After is set, and X-RateLimit-Remaining tells you where you stand on every successful response too. |
| server_error | 500 | Ours, not yours. Every response carries a request_id; quote it and we can find the exact request. |
Run it live
A real request from your browser straight to
api.apihorseracing.com with
your own key. Nothing is proxied and nothing is logged by this page.
Remembered in this browser so you do not paste it on every page. Forget it