18+ Only  |  Gambling can be addictive — please gamble responsibly  |  Gambling Help: 1800 858 858  |  GambleAware

API reference / Racing

GET /v1/racing/greyhounds/form

Greyhound form history for one dog, from our own results

Every run we hold for one greyhound, newest first, from our own collection. SOURCE. Not a third-party form feed: every run comes off the official public results pages we read ourselves — Victorian tracks from FastTrack (`source: fasttrack`, `runner_ref: grv:<id>`) and every other state from the national results pages (`source: grsa`, `runner_ref: grsa:<id>`). `origin` says which half of the store a run is in: `results` = a race we also settled and serve on /v1/racing/results, `history` = a race our history collector read back off the same page for a date our settled store does not cover, whose `result_id` is a synthetic `hist:…` and joins to nothing. `source.coverage_from` is the oldest run actually held and `source.results_from` the date the settled half begins, so `runs_total` is the dog's record over a stated window and not its career. IDENTITY. Pass a name and the runs are grouped on its letters and digits ("Ando's Mac" and "ANDOS MAC" are one query; the whole name must match). Our two collectors number dogs in different registries, so a dog that races in Victoria and interstate has two refs; the name joins them and `runner_refs` lists every id seen. Pass a ref and you get that ref's runs — plus, when the registry map has proved the two refs are one dog (one grv id, one grsa id, trainers that agree or do not contradict), that dog's runs in BOTH registries. A name matching nothing is a 404 and costs nothing. READING A RUN. `position` is the finishing place and is null when the dog did not run (`status` says `scratched` or `reserve`) or did not complete the course. `time_s` is the dog's own time and `win_time_s` the winner's in the same race. `sp` is the official starting price as published with the result; null means unknown, never zero. `margin` is the source's own text: lengths behind the winner, and on Victorian tracks the winner's row carries its winning margin. `field_size` is how many dogs ran. THE MEASURED COLUMNS, AND WHY THEY ARE OFTEN NULL. `first_split_s`, `second_split_s`, `weight_kg`, `pir` and `grade` are printed by the source pages and have been carried through since 2026-09-21. Each is null wherever that page printed nothing, and the gaps are structural, not random: FastTrack publishes one split and no second; PIR comes from FastTrack's own column on Victorian tracks and, since 2026-09-29, from the national page's In Race Positions card, which only some tracks print (see `pir`); Western Australian meetings mostly print no weight; a rug 9/10 reserve that never started carries no weight, split or PIR at all. Sampled on 2026-09-21 over 46 freshly read race pages, a grade appeared on 46/46 races and 362/362 runner rows, a first split on 288/362 and a weight on 295/362. ⚠️ A STORED FIELD IS NEVER REWRITTEN, so a run settled before 2026-09-21 carries none of the five however well its page printed them — read them per run, never as a property of the dog.

Requires X-API-Key 3 credits

Request

curl 'https://api.puntersedge.online/v1/racing/greyhounds/form?dog=YOUR_DOG' \
  -H 'X-API-Key: YOUR_KEY'

Parameters

NameIn TypeRequired Description
dog query string yes Dog name (matched on letters and digits, case-insensitive, whole name), or a runner_ref like grv:1055038365 / grsa:441535 to restrict to one registry id.
limit query integer no Most recent runs to return.

Responses

Status codes: 200, 401, 402, 422, 429, 500. Response bodies are JSON; the full schema is in /openapi.json.

Example response

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.

{
  "dog": "Wally's Boy",
  "name_key": "wallysboy",
  "runner_refs": [
    "grsa:334352"
  ],
  "runs_total": 14,
  "runs": [
    {
      "date": "2026-09-28",
      "start_time": "2026-09-28T12:52:00Z",
      "venue": "Q Straight",
      "race_number": 14,
      "distance_m": 300,
      "race_name": "Gorski Truck & Trailer Pathways H",
      "track_condition": "Good",
      "box": 8,
      "number": 8,
      "position": 5,
      "status": "ran",
      "margin": null,
      "time_s": null,
      "first_split_s": null,
      "second_split_s": null,
      "weight_kg": null,
      "pir": "4",
      "grade": "P5",
      "win_time_s": null,
      "sp": null,
      "dead_heat": false,
      "trainer": "George Kadniak",
      "field_size": 8,
      "runner_ref": "grsa:334352",
      "source": "grsa",
      "origin": "results",
      "result_id": "07d60362-c799-4216-b433-8eddf8c20e25"
    },
    {
      "date": "2026-09-24",
      "start_time": "2026-09-24T03:37:00Z",
      "venue": "Q Straight",
      "race_number": 8,
      "distance_m": 350,
      "race_name": "Gap Greyhounds Great Pets 5Th Grade Ht2",
      "track_condition": null,
      "box": 8,
      "number": 8,
      "position": 6,
      "status": "ran",
      "margin": "10.25",
      "time_s": 19.64,
      "first_split_s": 4.12,
      "second_split_s": 9.2,
      "weight_kg": 29.9,
      "pir": null,
      "grade": "5",
      "win_time_s": 18.92,
      "sp": 71.0,
      "dead_heat": false,
      "trainer": "George Kadniak",
      "field_size": 8,
      "runner_ref": "grsa:334352",
      "source": "grsa",
      "origin": "results",
      "result_id": "4b0896ff-5680-4002-8a03-4aae093e2470"
    }
  ],
  "source": {
    "feed": "puntersedge",
    "region": "AU",
    "sport": "greyhound",
    "coverage_from": "2026-06-23",
    "results_from": "2026-09-13",
    "coverage_to": "2026-09-29",
    "collectors": [
      "fasttrack",
      "grsa"
    ],
    "refreshed_hourly": true
  }
}

Related endpoints

Try it against live data

The free tier needs no credit card, and the sandbox endpoints need no key at all.

Get a free API key Quickstart
This site contains wagering-related analysis and is intended for Australian users aged 18+. Gambling involves risk. Please gamble responsibly.