---
title: "Greyhound record by track, distance, box or grade, from our own results"
method: GET
path: "/v1/racing/greyhounds/stats"
tags: ["Racing"]
---

# Greyhound record by track, distance, box or grade, from our own results

`GET /v1/racing/greyhounds/stats`

## Request

- Base URL: `https://api.puntersedge.online`
- URL: `https://api.puntersedge.online/v1/racing/greyhounds/stats`
- Auth: API key in header `X-API-Key`

Cost: 3 credits. 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, so `overall.starts` equals `runs_total` on the form endpoint (both
count starts since 2026-10-13) and is lower than its `held_rows_total`. `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.

## Query parameters

- `dog` string, required: Dog name or runner_ref, resolved exactly as on /v1/racing/greyhounds/form.
- `by` string: Dimensions to group by: track, distance, box, grade. Comma-separate to cross them, e.g. track,distance or grade,track.

## Headers

- `X-API-Key` string
- `X-RapidAPI-Proxy-Secret` string

## Response `200`

Successful Response

- GreyhoundStatsOut
  - `dog` string, required
  - `name_key` string, required
  - `runner_refs` string[], required
  - `by` string[], required: The dimensions the rows are grouped by, in the order given.
  - `rows` GreyhoundStatRow[], required: One row per distinct combination, most starts first.
    - `track` string, nullable: Set when `by` includes track.
    - `distance_m` integer, nullable: Set when `by` includes distance.
    - `box` integer, nullable: Set when `by` includes box.
    - `grade` string, nullable: Set when `by` includes grade: the race's grade in the source's own words ("5", "M", "4/5" nationally; a race type like "Grade 5" or "Mixed 4/5" on FastTrack). The two vocabularies are NOT mapped onto each other, so compare rows within one source. A run stored with no grade groups under null.
    - `starts` integer, required: Runs with status `ran` — scratchings and unused reserves are excluded from every figure here.
    - `wins` integer, required
    - `places` integer, required: Finishes in the first three, wins included.
    - `win_pct` number, required
    - `place_pct` number, required
    - `avg_time_s` number, nullable: Over the runs with a recorded time.
    - `best_time_s` number, nullable
    - `avg_first_split_s` number, nullable: Mean first sectional over the runs in this group that carry one. Null when none does — the count behind it is not `starts`, because some tracks publish no sectionals.
    - `avg_sp` number, nullable: Mean official starting price over the runs that carry one.
    - `last_start` string, nullable: Sydney date of the most recent run in the group.
  - `overall` GreyhoundStatRow, required
    - `track` string, nullable: Set when `by` includes track.
    - `distance_m` integer, nullable: Set when `by` includes distance.
    - `box` integer, nullable: Set when `by` includes box.
    - `grade` string, nullable: Set when `by` includes grade: the race's grade in the source's own words ("5", "M", "4/5" nationally; a race type like "Grade 5" or "Mixed 4/5" on FastTrack). The two vocabularies are NOT mapped onto each other, so compare rows within one source. A run stored with no grade groups under null.
    - `starts` integer, required: Runs with status `ran` — scratchings and unused reserves are excluded from every figure here.
    - `wins` integer, required
    - `places` integer, required: Finishes in the first three, wins included.
    - `win_pct` number, required
    - `place_pct` number, required
    - `avg_time_s` number, nullable: Over the runs with a recorded time.
    - `best_time_s` number, nullable
    - `avg_first_split_s` number, nullable: Mean first sectional over the runs in this group that carry one. Null when none does — the count behind it is not `starts`, because some tracks publish no sectionals.
    - `avg_sp` number, nullable: Mean official starting price over the runs that carry one.
    - `last_start` string, nullable: Sydney date of the most recent run in the group.
  - `source` SourceBlock, required
    - `feed` string: Where the data comes from: our own collection of published AU greyhound results, Victorian tracks via FastTrack (runner_ref grv:) and every other state via the national results pages (runner_ref grsa:). Runs on or after `results_from` are races we settled ourselves; earlier runs are the same pages read back by our history collector. Refreshed hourly. On a British or Irish race (/v1/racing/greyhounds/field, from 2026-10-12) `region` reads GB-IE and the runs are our own GB/IE results from PointsBet's settled race card, read live.
    - `region` string
    - `sport` string
    - `coverage_from` string: Sydney date of the OLDEST run in the store. A dog's record here starts here.
    - `results_from` string: Sydney date our own settled results begin. A run on or after it has `origin: results` and a `result_id` that joins to /v1/racing/results; an earlier one has `origin: history` and does not.
    - `coverage_to` string, nullable: Sydney date of the latest race in the store.
    - `collectors` string[]: Which of our collectors can contribute a run: `fasttrack` = Victorian tracks, `grsa` = every other state.
    - `refreshed_hourly` boolean: The store is rebuilt from our results at :58 each hour, after both collectors have written.

## Other responses

- `401`: Missing or invalid API key. Send `X-API-Key`. See https://puntersedge.online/developers/errors
- `402`: Monthly credit allowance exhausted for this plan. Upgrade at https://puntersedge.online/api/pricing
- `422`: Validation Error
- `429`: Rate limit exceeded for this plan. Honour the `Retry-After` header (seconds) before retrying. See https://puntersedge.online/developers/rate-limits
- `500`: Unexpected server error. Safe to retry with backoff.

---

[API](https://skmtc.dev/puntersedge/apis/puntersedge-odds-api.md) · [All operations](https://skmtc.dev/puntersedge/apis/puntersedge-odds-api/llms.txt) · [OpenAPI document](https://skmtc.dev/puntersedge/apis/puntersedge-odds-api/revisions/f35b6aab1946?raw)
