API reference / Racing
GET /v1/racing/horses/backfill/{job_id}/resultsCollect the form of horses this job has delivered
The 3 credits per horse were charged when it was delivered, and re-reading data you have already paid for costs nothing. Each row is the same payload /v1/racing/horses/form returns for that horse — profile, career, runs — so anything written against the form endpoint reads this unchanged. Rows appear as they complete: collect early and often rather than waiting for the whole batch. `horse_ref` (`pe:<name>`, added 2026-09-21) is the horse this row is about, and it is the same value on /v1/racing/results runners and placings, the live board, the closing-line and price-path archives, /v1/racing/horses/form and /v1/racing/horses/runs — so a collected batch joins straight onto your price rows without matching names. `runner_ref` beside it is Racing Australia's code for the entry we read, which changes from meeting to meeting and does not identify the horse.
X-API-Key
free
curl 'https://api.puntersedge.online/v1/racing/horses/backfill/YOUR_JOB_ID/results' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id |
path | string | yes | |
limit |
query | integer | no | |
offset |
query | integer | no |
Status codes: 200, 401, 402, 422, 429, 500. Response bodies are JSON; the full schema is in /openapi.json.
200 application/json
— this call costs free.
Field names and types are as the API returns them; values are a real sample, trimmed to a few items.
{
"job_id": "bf_20260907_3a9c1e",
"rows_returned": 1,
"total_done": 21,
"limit": 50,
"offset": 0,
"rows": [
{
"input": "Vomo Island",
"runner_ref": "ra:NzkyMzc2NTE1MA",
"horse_ref": "pe:vomoisland",
"horse_name": "Vomo Island",
"delivered_at": "2026-09-07T00:58:41Z",
"fetched_at": "2026-09-07T00:58:39Z",
"available": true,
"form": {
"horse_name": "Vomo Island",
"horse_ref": "pe:vomoisland",
"runner_ref": "ra:NzkyMzc2NTE1MA",
"ambiguous": false,
"candidates": [],
"profile": {
"age_sex": "5yo Bay Gelding",
"trainer": "John Lugg",
"trainer_location": "Kalgoorlie"
},
"career": {
"starts": 24,
"wins": 5,
"seconds": 4,
"thirds": 3,
"prizemoney": 118450
},
"runs": [
{
"date": "2026-09-06",
"track": "KALG",
"race_number": 8,
"trial": false,
"position": 1,
"field_size": 14,
"distance_m": 1200,
"going": "Good",
"going_rating": 4,
"jockey": "Austin Galati",
"weight_kg": 57.0,
"barrier": 3,
"sp": 4.6,
"prices": [
5.0,
4.8,
4.6
],
"margin_l": 0.0,
"pir": [],
"placegetters": []
}
],
"source": {
"feed": "racing_australia",
"region": "AU",
"sport": "thoroughbred",
"fetched_at": "2026-09-07T00:58:39+00:00",
"stale": false
}
}
}
]
}
GET /v1/racing/acceptances — Full-day AU thoroughbred acceptance card: every meeting, race and runnerGET /v1/racing/best-odds — Best racing price per runner across booksGET /v1/racing/changes — Races and prices that changed since a timestampPOST /v1/racing/clv — Score bets against the closing line (CLV)GET /v1/racing/events — Upcoming race listGET /v1/racing/form — Every runner in one race with its recent runs, from our own resultsGET /v1/racing/greyhounds/form — Greyhound form history for one dog, from our own resultsGET /v1/racing/greyhounds/stats — Greyhound record by track, distance, box or grade, from our own resultsThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart