API reference / Racing
GET /v1/racing/greyhounds/statsGreyhound record by track, distance, box or grade, from our own results
One greyhound's record from our own results, split by track, distance, box, grade, or any combination — plus the same figures over every run, in `overall`. SOURCE. The same store as /v1/racing/greyhounds/form: the official results pages we read ourselves, Victorian tracks via FastTrack and every other state via the national results pages, rebuilt hourly, in two halves (`origin` on the form endpoint says which). These are figures over `source.coverage_from`..`source.coverage_to` only, not a career. GROUPING. `by=track,distance` returns one row per track-and-distance pair the dog has started at; `by=box` one row per box; `by=grade` one row per grade. The dimensions you did not request come back null on each row. Rows are ordered by starts, most first. GRADE (a dimension since 2026-09-29). Measured 2026-09-28 21:07 UTC: 6,217 of the 6,217 runs in the last seven days carry a grade (100.0%). It is the grade in the SOURCE'S OWN WORDS — "5", "M", "4/5" on the national pages, a race type such as "Grade 5" or "Mixed 4/5" on FastTrack — and the two vocabularies are NOT mapped onto each other, so a dog that raced in Victoria and interstate shows a FastTrack row and a national row for what may be the same class. Compare grade rows within one source. Older runs are covered too: history runs have carried a grade from the start, and after the 2026-09-29 re-read of every settled race since 2026-09-13 (whose pages were stored before the grade was collected) 100.0% of `ran` entries carry one on every Sydney day from 2026-09-13 to 2026-09-28. A run without a grade would group under null rather than be dropped. THE NUMBERS. `starts` counts runs with status `ran`; scratchings and unused reserves are excluded from every figure, which is why `starts` is lower than `runs_total` on the form endpoint. `wins` is place 1, `places` a finish in the first three, both percentages over `starts`. `avg_time_s` and `best_time_s` are over the runs with a recorded time; `avg_sp` over the runs that carry an official starting price; `avg_first_split_s` over the runs whose page printed a first sectional, which is FEWER than `starts` — some tracks print none, so it is not an average over the group you might assume. On a small group these describe a handful of runs, so read `starts` alongside them. A misspelt `by` is a 422 and costs nothing; a name matching nothing is a free 404.
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 runner_ref, 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 or grade,track. |
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.
{
"by": [
"track",
"grade"
],
"dog": "Tommy Blue",
"name_key": "tommyblue",
"overall": {
"avg_first_split_s": 6.71,
"avg_sp": 1.33,
"avg_time_s": 30.14,
"best_time_s": 30.14,
"last_start": "2026-09-19",
"place_pct": 100.0,
"places": 1,
"starts": 1,
"win_pct": 100.0,
"wins": 1
},
"rows": [
{
"avg_first_split_s": 6.71,
"avg_sp": 1.33,
"avg_time_s": 30.14,
"best_time_s": 30.14,
"grade": "M",
"last_start": "2026-09-19",
"place_pct": 100.0,
"places": 1,
"starts": 1,
"track": "Dubbo",
"win_pct": 100.0,
"wins": 1
}
],
"runner_refs": [
"grsa:441535"
],
"source": {
"collectors": [
"fasttrack",
"grsa"
],
"coverage_from": "2026-06-23",
"coverage_to": "2026-09-20",
"feed": "puntersedge",
"refreshed_hourly": true,
"region": "AU",
"results_from": "2026-09-13",
"sport": "greyhound"
}
}
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