Trainer premiership leaderboards — 1st-5th finishes, prize money, strike rate and starts — from Racing Australia's own published tables. WHAT A LEADERBOARD IS. RA publishes each premiership as a TOP-20 table, one per state and scope, and that is exactly what is held: the national table (`state=AUS`) and the eight state tables, each split all/metro/provincial/country/picnic, for the running season and the previous one (RA seasons run 1 Aug - 31 Jul). There is no page two at the source, so a trainer outside every top-20 has no row here — an empty `rows` for a name means "outside the published top 20", never "inactive". For per-horse trainer identity on individual runs, /v1/racing/horses/form carries it with a stable code on every run. LOOKUP SHAPES. With no `name`, the response is one table: `state` (default AUS) x `scope` (default all) for the chosen `season`. With `name`, the search widens to every state and scope for that season by default — a rider prominent only in one state's country scope is found without knowing which — and `state`/`scope`, if given, narrow it back. Name matching is case-insensitive on the whole name or any part of it. JOINS. `ra_code` is the code inside RA's own engagement links, stored with padding stripped — the same identity namespace as `jockey_code` on horse-form runs and `trainer_code` on acceptance rows, so premiership standing joins to per-run data on code, not name spelling. HOW FRESH ANY GIVEN TABLE IS. There are 180 of these tables and Racing Australia will not serve them all in one sitting, so they are refreshed in paced passes overnight Australian time: the national tables (`state=AUS`) daily, and the state tables on a rolling refresh that takes a few nights to come round. Nothing is guessed or interpolated in between — a table is exactly as RA last published it. Read the age off the response rather than assuming it: `period_to` on the running season is the day RA rendered that table, so it dates every row, and `source.scraped_at` gives the newest scrape among the rows returned. A state table added to the store for the first time simply appears; until then its `rows` are empty, the same shape as a name that is outside every top 20. `season=previous` serves the completed season, useful as the longer baseline of the two. It changes only on a late protest, so it is refreshed about weekly. Cached 1 hour.
X-API-Key
2 credits
curl 'https://api.puntersedge.online/v1/racing/trainers/stats' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
name |
query | string | no | Find one trainer by (partial) name across every state and scope. |
state |
query | string | no | AUS (national) or a state. Default AUS, unless `name` widens the search. |
scope |
query | string | no | all, metro, provincial, country, picnic. Default all, unless `name` widens the search. |
season |
query | string | no | current or previous RA season (1 Aug - 31 Jul). |
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 2 credits.
Field names and types are as the API returns them; values are a real sample, trimmed to a few items.
{
"role": "trainer",
"rows": [
{
"fifths": 14.0,
"firsts": 17.0,
"fourths": 22.0,
"name": "Chris Waller",
"period_from": "2026-08-01",
"period_to": "2026-09-02",
"prize_money": 2437350.0,
"ra_code": "Njg0MjM2MA",
"rank": 1,
"scope": "all",
"seconds": 23.5,
"starts": 147,
"state": "NSW",
"strike_rate": 11.6,
"thirds": 20.0
}
],
"scope": "all",
"season_start_year": 2026,
"source": {
"feed": "racing-australia-premierships",
"region": "AU",
"scraped_at": "2026-09-02T07:10:00+00:00",
"sport": "thoroughbred",
"top_n": 20
},
"state": "NSW"
}
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 timestampGET /v1/racing/events — Upcoming race listGET /v1/racing/greyhounds/form — Greyhound form history for one dogGET /v1/racing/greyhounds/stats — Greyhound record by track, distance, box or gradePOST /v1/racing/horses/backfill — Queue a batch of horses for paced form collectionDELETE /v1/racing/horses/backfill/{job_id} — Cancel the horses a job has not collected yetThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart