API reference / Racing
POST /v1/racing/horses/backfillQueue a batch of horses for paced form collection
3 credits per horse when it is delivered. Hand us a list of horses and we collect their Racing Australia form at a pace RA tolerates, then hold it for you. This is the supported way to backfill a model: looping /v1/racing/horses/form yourself will trip RA's bot protection long before a few thousand horses, and the 503s that follow are shared with every other customer. Names resolve the same way they do on the form endpoint — against acceptances (about three days ahead) and every archived result runner — and so do the `pe:` horse_refs published on results, the live board, the archives and /v1/racing/horses/runs, which is the spelling to submit if you are working from those. A horse we have never seen comes straight back in `not_found` rather than being queued, and costs nothing. `ambiguous` is always empty: a name resolves to one horse (several Racing Australia codes under one name are the same horse's codes from different days, not several horses). Horses we already hold a fresh copy of skip the queue and are ready at once — matched on the HORSE, so a page collected under any of its codes counts and no read of Racing Australia is spent re-fetching it. A horse already queued for you is not queued twice. Poll GET /v1/racing/horses/backfill/{job_id} for progress and collect from /results as rows complete — you do not have to wait for the whole batch.
X-API-Key
free to submit
curl -X POST 'https://api.puntersedge.online/v1/racing/horses/backfill' \
-H 'X-API-Key: YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"horses": ["HORSES"], "label": "LABEL"}'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
horses |
body | array | yes | Horse names, `pe:` horse_refs or `ra:` entry codes, in any mix. Max 500 per call. A name and its horse_ref resolve identically, against acceptances and archived results; an `ra:` code pins one meeting's entry. |
label |
body | string | no | Your own tag for this batch, echoed back on status. |
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 to submit.
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",
"label": "Saturday metro fields",
"queued": 38,
"already_stored": 6,
"duplicates": 0,
"not_found": [
"Fabulos Fiano"
],
"ambiguous": [],
"estimated_ready": "2026-09-07T01:35:00Z"
}
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/consensus — The market consensus on one race: margin-free probability per runnerGET /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 resultsThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart