API reference / Racing
GET /v1/racing/greyhounds/statsGreyhound record by track, distance, box or grade
One greyhound's record, split by track, distance, box, grade, or any combination of them. SOURCE. The official Topaz feed for Australian greyhound racing, synced twice a day at 22:30 and 00:30 UTC, covering 2020-01-01 to the last meeting the latest sync carried (`source.coverage_to`). Greyhounds only. Every start the feed holds counts toward these figures — this is a career record over the covered period, with no recency window. GROUPING. `by=track,distance` returns one row per track-and-distance pair the dog has started at; `by=box` returns one row per box. The dimensions you did not request come back NULL on each row. Rows are ordered by starts, most first. THE NUMBERS. `starts` counts runs the dog actually took part in — scratchings are excluded from every figure here, which is why `starts` is lower than the run count on /v1/racing/greyhounds/form for the same dog. `wins` is place 1, `places` is a finish in the first three, and both percentages are over `starts`. `avg_time_s`, `best_time_s` and `avg_first_split` are computed over the runs that have a recorded time; a run where the dog fell or was pulled up has none and is counted in `starts` but not in the averages. On a small group these averages describe a handful of runs, so read `starts` alongside them. JOINING TO LIVE DATA. `dog_id` is the same identifier as the numeric part of `runner_ref` on /v1/racing/results runners ("grv:<dogId>" for greyhounds). `race_id` on /v1/racing/next-to-go, /events and /results is our own UUID and is stable for a race from upcoming through to results, which is a separate namespace from Topaz's raceId. An ambiguous name returns 200 with `ambiguous: true` and `candidates[]`, exactly as on /v1/racing/greyhounds/form. A name matching nothing returns 404. Cached 10 minutes.
X-API-Key
3 credits
curl 'https://api.puntersedge.online/v1/racing/greyhounds/stats?dog=YOUR_DOG' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
dog |
query | string | yes | Dog name or Topaz dogId, resolved exactly as on /v1/racing/greyhounds/form. |
by |
query | string | no | Dimensions to group by: track, distance, box, grade. Comma-separate to cross them, e.g. track,distance. |
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 3 credits.
Field names and types are as the API returns them; values are a real sample, trimmed to a few items.
{
"ambiguous": false,
"candidates": [],
"dog_id": 760119227,
"dog_name": "VELOCITY YIN",
"group_by": [
"track"
],
"groups": [
{
"avg_first_split": 7.594,
"avg_time_s": 20.02,
"best_time_s": 19.16,
"place_pct": 28.57,
"places": 8,
"starts": 28,
"track": "Albion Park",
"win_pct": 10.71,
"wins": 3
}
],
"source": {
"coverage_from": "2020-01-01",
"coverage_to": "2026-08-31",
"feed": "topaz",
"region": "AU",
"sport": "greyhound",
"synced_at": "2026-09-01T00:32:11+00:00"
}
}
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 dogPOST /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 yetGET /v1/racing/horses/backfill/{job_id} — Progress of a backfill jobThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart