Settled AU/NZ race results — finishing order with the bookmaker's own settled fixed prices, plus scratchings and their deductions. `status` is `interim` until the placings have been stable for 30 minutes, then `final`. A race that did not run is `abandoned` (Racing Australia's official notice, applied to every race of the meeting, with `status_note` carrying RA's word: abandoned, postponed, or transferred to another venue) — empty `placings`, null `runners`, filterable with `status=abandoned`. Settle only against `final`: an interim placing can still change on protest. **A `runners` entry is not necessarily a starter.** `status` says whether the runner ran: `ran`, or `scratched` / `late_scratching` / `reserve` for one that did not. Since 2026-09-08 an AU thoroughbred scratched at the barrier arrives as `status: scratched` carrying `abnormal: 'SB'`; before that it was published as `status: ran` with a null `position`, which told you the horse started when the market had refunded it. Such a row can still carry `sp` — the last price RA printed for it. That price is NOT what its `deductions` row was struck from (measured: 1/`sp` matches the published win deduction on none of the five stored priced rows), so take the deduction from `deductions` itself and never derive it. Settle on `status`, not on presence in `runners`. The thoroughbred and greyhound collectors do NOT spell a late scratching the same way; the `runners` field description says exactly how to tell them apart. **Settled prices can be null while `status` is `interim` — this is the SP timing, not a gap.** The source book publishes the finishing order before its settled dividends, so a result fetched in the minutes after the jump can carry placings whose `win_price` / `place_price` are still null. They fill in during the interim window: measured over 7 days (1,541 final results, 2026-09-01), every `final` result carried settled prices and none was missing them. If you hit null prices, you are inside that window — poll again or wait for `final`, which is already the only status you should settle against. `sp` on `runners` and on `placings` is the OFFICIAL starting price — not our consensus, and not the fixed price the bookmaker settled at. The two differ, and both are returned so you can compare them. Thoroughbred SP is Racing Australia's (its favouritism marker lands in `sp_note`), greyhound SP is our own collection's (Victorian tracks via FastTrack, every other state via the national results pages, from 2026-09-13), and harness SP is always null because no source we hold publishes it. A null `sp` means unknown — never zero. `race_id` joins a result to /v1/racing/price-history, and to /v1/racing/next-to-go while the race was still open — use it rather than matching on venue + race number + start time. **Joining one RACE across endpoints: `runner_ref`. Joining one HORSE across meetings: `horse_ref`.** Every thoroughbred entry in `runners` carries `runner_ref` (`ra:<code>`), the code Racing Australia published for the runner on race day — the same value the closing-line, price-path and markets archives carry and the live board carried that day, so it joins this result to every other row about the race. Racing Australia issues a new code for the same horse each day, so grouping a career on `runner_ref` returns one row per start. For a career, every thoroughbred entry in `runners` and `placings` carries `horse_ref`, `pe:<name>` — the registered name folded to letters and digits — the same value on the live board, the closing-line and price-path archives, /v1/racing/horses/form and /v1/racing/horses/runs. `horse_ref` is derived at serve time from the name already on the row, so it is on every historical result too, and it is null on greyhound and harness rows — a greyhound's `runner_ref` (`grv:`/`grsa:`) is a per-dog registry id and already persists. `country` splits the feed: `country=AU` and `country=NZ` are the two-URL form of an AU/NZ split. NZ rows come from the bookmaker results feed, which publishes placegetters, so they carry `placings` without the full `runners` finishing order the Racing Australia collector adds to AU thoroughbred results. `dividends` carries the declared win/place dividends per placegetter per product and the exotic dividends (quinella, exacta, trifecta, first four), each as a return on a $1 stake. Exotics are declared a few minutes after the placings, so they land on a later poll than the result itself — see the field description for the full shape. `market_closed_at` and `inplay_at` are the race lifecycle, captured live and kept here permanently: when the market was first seen shut, and when the race was first seen in-play — the actual off, where `start_time` is the advertised one and moves. Both are POLL-OBSERVED (polling passes are most frequent in the minutes before the jump), so each is the first poll at which the state was seen rather than the exact instant, and both are SET ONCE. They are copied from the live race row when the result is written. That row is deleted 10 minutes after the jump and results land a median 4.9 minutes after the start (p90 7.4), so a late result keeps null. Null never means the market stayed open. Capture began 2026-09-01, so every result before that date carries null. **Who reports market state, and what you see.** Two feeds do. PointsBet closes its book at the real jump — measured 2026-09-03 over 9 live races followed across their jump, 0.2 to 1.4 minutes AFTER the advertised start on AU/NZ cards — and that is what populates `market_closed_at` for most races. The Betfair Exchange reports state while it quotes the market, which ends about two minutes BEFORE the jump (measured 2026-09-01 on Horsham R3, advertised 05:24 UTC: betfair last seen 119s before the off), which is why results between 2026-09-01 and 2026-09-03 carry null. Exchange-sourced market state is withheld from customer plans pending a data licence, so a race whose state only the exchange saw reads null for customers; bookmaker-sourced state is served to everybody. `market_state_source` names the feed behind the values you receive. `inplay_at` stays exchange-only — bookmakers do not run racing in-play. **Coverage:** results collection began 2026-08-15, so `hours_back` cannot reach further than that no matter what you pass. Every row carries `coverage_from`, the earliest result currently retained, so an empty window is distinguishable from an unsupported one. **Field coverage, which is a different question, and `runners: null` is not its answer.** Every row now carries `field_status`, `field_source` and `field_note`. `field_status` is `complete` | `pending` | `overdue` | `unavailable` | `unsupported` | `not_applicable`: a field that is here; one the pass that NORMALLY fills this race has not reached yet, with that instant in `field_note`; one where that pass has been and gone without writing a field but the collector still re-attempts the row; one no scheduled pass still selects, its collector's own candidate window having closed; a code no collector has ever existed for; and a race that did not run. The scheduled progression is pending -> overdue -> unavailable, one direction only, and every step is bounded by a collector's real candidate query rather than by its next run — so nothing here asks you to poll forever. Read `overdue` carefully: it is NOT terminal. Most rows that reach it stay null, so do not build on a field arriving, but do not write the race off either. And any of those three can become `complete`, `unavailable` INCLUDED — nothing un-writes a `runners` array, so a hand-run collector, a widened window or a late upstream publication can still fill a row we have stopped scheduling passes for. Treat `unavailable` as 'nothing further is scheduled', never as 'this can never arrive', and re-read rather than caching it as final. The full per-state contract is on the `field_status` field itself. Measured 2026-09-10 across the retained store (5,577 results): AU greyhound carries a field on 2,360 of 3,219 races and AU thoroughbred on 315 of 1,104, while AU harness, NZ thoroughbred and NZ harness carried one on NONE of their 1,254 — all three have been collected from TAB New Zealand since 2026-10-04 (`field_source: tabnz`, hourly, seven-day window). Between 2026-09-29 and 2026-10-04 an AU harness result written while its live board still existed carried a copy of the pre-race board instead (every entry `origin: board`: driver, trainer, barrier, form, positions for placegetters only, no times, SP or margins), read `complete` with `field_source` null, and the first TAB New Zealand pass replaced those copies. Collection floors are the 2026-08-21 Sydney card for AU greyhound and the 2026-09-01 card for AU thoroughbred; no collector pass reaches back beyond its own floor, so a race older than one carries `unsupported` and will not fill. `runners` is JSON null in every one of these cases and has never been an empty array (0 in the whole store), so `runners is None` is the complete test. GET /v1/racing/results/coverage answers the same question per Sydney day, category and venue for 1 credit, so you can see what a day holds without paging its results. `going` and `going_rating` (2026-09-10) are `track_condition` split into the vocabulary /v1/racing/horses/form already uses — 'Good (4)' becomes `going: "Good"`, `going_rating: 4` — parsed by the one shared helper so the two surfaces cannot disagree. `track_condition` is unchanged and is still the raw string the source published.
X-API-Key
2 credits
curl 'https://api.puntersedge.online/v1/racing/results' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
hours_back |
query | integer | no | How far back to look, in hours (max 7 days) |
date |
query | string | no | Single-day alias: date=YYYY-MM-DD returns that meeting date (AET) instead of a rolling hours_back window. Mutually exclusive with hours_back. Also accepted by /v1/racing/closing-lines and /v1/racing/acceptances. NOT by /v1/racing/events, which is forward-looking and takes hours_ahead — this line claimed it did until 2026-09-22, and that false claim cost a racing-analytics subscriber a 422 and a fallback to hours_ahead=24. The same wrong sentence was corrected in archive.py on 2026-08-25 and missed here; if you edit one, grep for the other. |
categories |
query | string | no | horse,greyhound,harness or omit for all |
category |
query | string | no | Alias of `categories`. Both spellings are accepted on every racing endpoint since 2026-09-24; before that, using one family's spelling on the other was a hard 422. An unknown value is a free 422 naming the valid ones. |
venue |
query | string | no | Case-insensitive exact venue match, comma-separated for several, e.g. 'Rosehill' or 'Randwick,Eagle Farm,Flemington' — the same spelling /v1/racing/next-to-go takes |
country |
query | string | no | ISO country codes, comma-separated, case-insensitive (e.g. AU or AU,NZ). Matched against the result's `country`. Which countries have results at all is published by /v1/racing/results/coverage and the results_scope note on /v1/racing/closing-lines/coverage; a country with prices but no results source (today, GB and IE) returns no rows here. A result whose country was never resolved (null) is excluded by any value here, so omit the filter if you need those rows. |
status |
query | string | no | Filter to 'final', 'interim' or 'abandoned' |
limit |
query | integer | no | |
offset |
query | integer | no |
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.
[
{
"race_id": "104702cc-8a42-4b14-88b0-1fb6de91e913",
"coverage_from": "2026-08-15T05:53:00Z",
"venue": "Kalgoorlie",
"venue_id": "kalgoorlie",
"venue_canonical": "Kalgoorlie",
"venue_site": "kalgoorlie",
"race_number": 8,
"category": "horse",
"country": "AU",
"start_time": "2026-09-06T09:00:00Z",
"race_name": "COOLGARDIE DAY CELEBRATIONS HANDICAP",
"distance_m": 1200,
"track_condition": "Good (4)",
"going": "Good",
"going_rating": 4,
"weather": "Light Rain",
"status": "final",
"status_note": null,
"field_status": "complete",
"field_source": "racing_australia",
"field_note": null,
"placings": [
{
"name": "Vomo Island",
"number": 8,
"position": 1,
"win_price": 4.6,
"place_price": 1.9,
"sp": 4.6,
"sp_note": null,
"horse_ref": "pe:vomoisland"
},
{
"name": "Dublin Red",
"number": 15,
"position": 2,
"win_price": 126.0,
"place_price": 17.0,
"sp": 101.0,
"sp_note": null,
"horse_ref": "pe:dublinred"
},
{
"name": "Lavish Charm",
"number": 1,
"position": 3,
"win_price": 7.5,
"place_price": 2.5,
"sp": 8.5,
"sp_note": null,
"horse_ref": "pe:lavishcharm"
}
],
"runners": [
{
"name": "Vomo Island",
"number": 8,
"box": 3,
"position": 1,
"status": "ran",
"dead_heat": false,
"jockey": "Austin Galati",
"trainer": "John Lugg",
"sp": 4.6,
"sp_note": null,
"margin": null,
"time_s": null,
"abnormal": null,
"runner_ref": "ra:NzkyMzc2NTE1MA",
"horse_ref": "pe:vomoisland"
},
{
"name": "Dublin Red",
"number": 15,
"box": 5,
"position": 2,
"status": "ran",
"dead_heat": false,
"jockey": "Alex Hearn",
"trainer": "Paul Tapper",
"sp": 101.0,
"sp_note": null,
"margin": "2.75L",
"time_s": null,
"abnormal": null,
"runner_ref": "ra:NzkyNjU3OTg0Ng",
"horse_ref": "pe:dublinred"
},
{
"name": "Lavish Charm",
"number": 1,
"box": 4,
"position": 3,
"status": "ran",
"dead_heat": false,
"jockey": "Jason Li",
"trainer": "Peter Fernie",
"sp": 8.5,
"sp_note": null,
"margin": "3.27L",
"time_s": null,
"abnormal": null,
"runner_ref": "ra:Nzk1MjAxMDcxNA",
"horse_ref": "pe:lavishcharm"
}
],
"deductions": [
{
"name": "Bonny Rock",
"number": 10,
"win": 0.0,
"place": 0.0,
"scratched_at": "2026-09-06T08:39:45Z"
}
],
"dividends": {
"straight": [
{
"name": "Vomo Island",
"number": 8,
"position": 1,
"market": "WIN",
"product": "FIXED",
"amount": 4.6
},
{
"name": "Vomo Island",
"number": 8,
"position": 1,
"market": "WIN",
"product": "MIDDIV",
"amount": 5.5
},
{
"name": "Vomo Island",
"number": 8,
"position": 1,
"market": "PLC",
"product": "FIXED",
"amount": 1.9
},
{
"name": "Dublin Red",
"number": 15,
"position": 2,
"market": "PLC",
"product": "FIXED",
"amount": 17.0
},
{
"name": "Lavish Charm",
"number": 1,
"position": 3,
"market": "PLC",
"product": "FIXED",
"amount": 2.5
}
],
"exotics": [
{
"code": "QN",
"type": "Quinella",
"product": "VIC",
"selection": "8,15",
"amount": 444.4
},
{
"code": "EX",
"type": "Exacta",
"product": "VIC",
"selection": "8,15",
"amount": 478.1
},
{
"code": "TF",
"type": "Trifecta",
"product": "VIC",
"selection": "8,15,1",
"amount": 4868.5
},
{
"code": "FF",
"type": "First Four",
"product": "VIC",
"selection": "8,15,1,13",
"amount": 58687.9
}
],
"straight_types": [
"FIXED",
"RD+",
"BT+SP",
"MIDDIV"
]
},
"resulted_at": "2026-09-06T09:05:44Z",
"market_closed_at": "2026-09-06T09:02:18Z",
"inplay_at": null,
"market_state_source": "pointsbetau"
},
{
"race_id": "c56efd85-cbee-4743-87b2-94245b6446be",
"coverage_from": "2026-08-15T05:53:00Z",
"venue": "Rosehill",
"venue_id": "rosehill",
"venue_canonical": "Rosehill",
"venue_site": "rosehill",
"race_number": 10,
"category": "horse",
"country": "AU",
"start_time": "2026-09-26T07:25:00Z",
"race_name": "Tab Handicap",
"distance_m": 1100,
"track_condition": "Good (4)",
"going": "Good",
"going_rating": 4,
"weather": null,
"status": "final",
"status_note": null,
"field_status": "complete",
"field_source": "racing_australia",
"field_note": null,
"placings": [
{
"name": "Annie's Rose",
"number": 11,
"position": 1,
"win_price": 6.5,
"place_price": 2.2,
"sp": 6.5,
"sp_note": null,
"horse_ref": "pe:anniesrose"
},
{
"name": "Lulumon",
"number": 6,
"position": 2,
"win_price": 21.0,
"place_price": 5.0,
"sp": 21.0,
"sp_note": null,
"horse_ref": "pe:lulumon"
},
{
"name": "Mercy Me",
"number": 15,
"position": 3,
"win_price": 3.5,
"place_price": 1.5,
"sp": 3.5,
"sp_note": "F",
"horse_ref": "pe:mercyme"
}
],
"runners": [
{
"name": "Annie's Rose",
"number": 11,
"box": 3,
"position": 1,
"status": "ran",
"dead_heat": false,
"jockey": "Reece Jones",
"trainer": "Kristen Buchanan",
"sp": 6.5,
"sp_note": null,
"margin": null,
"time_s": null,
"abnormal": null,
"runner_ref": "ra:MzcwOTA0ODk4Nzg",
"horse_ref": "pe:anniesrose"
},
{
"name": "Lulumon",
"number": 6,
"box": 4,
"position": 2,
"status": "ran",
"dead_heat": false,
"jockey": "Ms Siena Grima",
"trainer": "Jason Coyle",
"sp": 21.0,
"sp_note": null,
"margin": "0.75L",
"time_s": null,
"abnormal": null,
"runner_ref": "ra:MzcxMTY2MTk0NjI",
"horse_ref": "pe:lulumon"
},
{
"name": "Mercy Me",
"number": 15,
"box": 5,
"position": 3,
"status": "ran",
"dead_heat": false,
"jockey": "Regan Bayliss",
"trainer": "Nathan Doyle",
"sp": 3.5,
"sp_note": "F",
"margin": "0.85L",
"time_s": null,
"abnormal": null,
"runner_ref": "ra:MzczNzU2NDIyNTI",
"horse_ref": "pe:mercyme"
}
],
"deductions": [
{
"name": "Cantiamo",
"number": 5,
"win": 0.05,
"place": 0.06,
"scratched_at": "2026-09-25T21:03:05.507Z"
},
{
"name": "Banjora",
"number": 9,
"win": 0.15,
"place": 0.12,
"scratched_at": "2026-09-24T08:17:40.433Z"
}
],
"dividends": {
"straight": [
{
"name": "Annie's Rose",
"number": 11,
"position": 1,
"market": "WIN",
"product": "FIXED",
"amount": 6.5
},
{
"name": "Annie's Rose",
"number": 11,
"position": 1,
"market": "PLC",
"product": "FIXED",
"amount": 2.2
},
{
"name": "Lulumon",
"number": 6,
"position": 2,
"market": "PLC",
"product": "FIXED",
"amount": 5.0
},
{
"name": "Mercy Me",
"number": 15,
"position": 3,
"market": "PLC",
"product": "FIXED",
"amount": 1.5
}
],
"exotics": [
{
"code": "QN",
"type": "Quinella",
"product": "VIC",
"selection": "11,6",
"amount": 77.95
},
{
"code": "EX",
"type": "Exacta",
"product": "VIC",
"selection": "11,6",
"amount": 108.3
},
{
"code": "TF",
"type": "Trifecta",
"product": "VIC",
"selection": "11,6,15",
"amount": 432.2
},
{
"code": "FF",
"type": "First Four",
"product": "VIC",
"selection": "11,6,15,17",
"amount": 6979.0
}
],
"multi_race": [
{
"code": "RC-GIANT6",
"type": "Giant 6",
"product": "VIC",
"selection": "6,1,1,4,2,11",
"amount": 544.4,
"legs": [
5,
6,
7,
8,
9,
10
]
},
{
"code": "RC-GIANT6",
"type": "Giant 6",
"product": "VIC",
"selection": "6,1,1,4,2",
"amount": 1.0,
"legs": [
5,
6,
7,
8,
9,
10
]
},
{
"code": "RC-QUADDIE",
"type": "Quaddie",
"product": "VIC",
"selection": "1,4,2,11",
"amount": 128.4,
"legs": [
7,
8,
9,
10
]
},
{
"code": "RC-QUADDIE",
"type": "Quaddie",
"product": "BT",
"selection": "1,4,2,11",
"amount": 128.4,
"legs": [
7,
8,
9,
10
]
}
],
"straight_types": [
"FIXED",
"RD+",
"BT+SP",
"MIDDIV"
]
},
"resulted_at": "2026-09-26T07:31:54Z",
"market_closed_at": "2026-09-26T07:27:07Z",
"inplay_at": null,
"market_state_source": "pointsbetau"
},
{
"race_id": "1f737be2-2e3e-4636-b2f8-1f42968eef7a",
"coverage_from": "2026-08-15T05:53:00Z",
"venue": "Wagga",
"venue_id": "wagga",
"venue_canonical": "Wagga",
"venue_site": "wagga",
"race_number": 1,
"category": "harness",
"country": "AU",
"start_time": "2026-10-04T01:03:00Z",
"race_name": "Download The Tab App Today Pace",
"distance_m": 1740,
"track_condition": "Good",
"weather": "Scattered Clouds",
"status": "final",
"status_note": null,
"placings": [
{
"name": "Wrong Answer",
"number": 1,
"position": 1,
"win_price": 2.2,
"place_price": 1.18,
"horse_ref": null
},
{
"name": "Rise Again",
"number": 7,
"position": 2,
"win_price": 4.0,
"place_price": 1.55,
"horse_ref": null
},
{
"name": "Rusty Mudshark",
"number": 3,
"position": 3,
"win_price": 7.0,
"place_price": 2.0,
"horse_ref": null
},
{
"name": "Typhoon Lenny",
"number": 2,
"position": 4,
"win_price": 34.0,
"place_price": 5.25,
"horse_ref": null
}
],
"runners": [
{
"sp": null,
"age": 4,
"box": 1,
"sex": "G",
"name": "Wrong Answer",
"jockey": "Bayley Duck",
"margin": 0,
"number": 1,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "B K Duck",
"abnormal": null,
"position": 1,
"tote_win": 1.9,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": 1.4,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2354177,
"barrier_position": "Fr1",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 3,
"box": 6,
"sex": "C",
"name": "Rise Again",
"jockey": "Peter Mcrae",
"margin": 1.34,
"number": 7,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "Peter Romero",
"abnormal": null,
"position": 2,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": 1.3,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2373085,
"barrier_position": "Fr6",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 4,
"box": 3,
"sex": "H",
"name": "Rusty Mudshark",
"jockey": "Jackson Painting",
"margin": 3.1,
"number": 3,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "M J Painting",
"abnormal": null,
"position": 3,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": 2.4,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2331468,
"barrier_position": "Fr3",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 2,
"box": 2,
"sex": "C",
"name": "Typhoon Lenny",
"jockey": "Roger Strong",
"margin": 8.02,
"number": 2,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "J R Turner",
"abnormal": null,
"position": 4,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": null,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2386291,
"barrier_position": "Fr2",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 4,
"box": 7,
"sex": "M",
"name": "Sweet Bella Rosa Nz",
"jockey": "Blake Micallef",
"margin": 11.29,
"number": 8,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "Sam Hewitt",
"abnormal": null,
"position": 5,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": null,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2334037,
"barrier_position": "Fr7",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 4,
"box": 2,
"sex": "M",
"name": "Elleschance",
"jockey": "Scott Hewitt",
"margin": 12.63,
"number": 10,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "Scott Hewitt",
"abnormal": null,
"position": 6,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": null,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2233871,
"barrier_position": "Sr2",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 4,
"box": 5,
"sex": "G",
"name": "Im The Sniper",
"jockey": "Michael Towers",
"margin": 13.52,
"number": 6,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "M B Towers",
"abnormal": null,
"position": 7,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": null,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2157745,
"barrier_position": "Fr5",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 4,
"box": 1,
"sex": "M",
"name": "Jiveandwhisper",
"jockey": "Harrison Ross",
"margin": 17.07,
"number": 9,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "E J Galea",
"abnormal": null,
"position": 8,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": null,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2371488,
"barrier_position": "Sr1",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 3,
"box": 4,
"sex": "G",
"name": "Crankinover",
"jockey": "Shane Hallcroft",
"margin": 18.08,
"number": 5,
"origin": "tabnz",
"status": "ran",
"time_s": null,
"sp_note": null,
"trainer": "P S Bryce",
"abnormal": null,
"position": 9,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": null,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": null,
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 2347233,
"barrier_position": "Fr4",
"positional_margin": null,
"horse_ref": null
},
{
"sp": null,
"age": 6,
"box": null,
"sex": "M",
"name": "Jolted Lover",
"jockey": "Scratched",
"margin": null,
"number": 4,
"origin": "tabnz",
"status": "scratched",
"time_s": null,
"sp_note": null,
"trainer": "P D Symes",
"abnormal": null,
"position": null,
"tote_win": null,
"dead_heat": false,
"prize_won": null,
"race_name": "Download The Tab App Today Pace",
"weight_kg": null,
"carried_kg": null,
"race_class": null,
"runner_ref": null,
"start_type": "Mobile",
"tote_place": null,
"last_600m_s": null,
"prize_total": null,
"race_time_s": null,
"scratched_at": "2026-10-02T06:02:38Z",
"tabnz_weight": null,
"result_status": "final",
"tabnz_horse_id": 1887761,
"barrier_position": "Fr-",
"positional_margin": null,
"horse_ref": null
}
],
"field_status": "complete",
"field_source": "tabnz",
"field_note": null,
"going": "Good",
"going_rating": null,
"deductions": [
{
"win": 0.0,
"name": "Jolted Lover",
"place": 0.0,
"number": 4,
"scratched_at": "2026-10-04T01:05:51.647Z"
}
],
"dividends": {
"exotics": [
{
"code": "QN",
"type": "Quinella",
"amount": 4.6,
"product": "VIC",
"selection": "1,7"
},
{
"code": "EX",
"type": "Exacta",
"amount": 6.8,
"product": "VIC",
"selection": "1,7"
},
{
"code": "TF",
"type": "Trifecta",
"amount": 39.4,
"product": "VIC",
"selection": "1,7,3"
},
{
"code": "FF",
"type": "First Four",
"amount": 242.3,
"product": "VIC",
"selection": "1,7,3,2"
}
],
"straight": [
{
"name": "Wrong Answer",
"amount": 2.2,
"market": "WIN",
"number": 1,
"product": "FIXED",
"position": 1
},
{
"name": "Wrong Answer",
"amount": 1.9,
"market": "WIN",
"number": 1,
"product": "MIDDIV",
"position": 1
},
{
"name": "Wrong Answer",
"amount": 1.18,
"market": "PLC",
"number": 1,
"product": "FIXED",
"position": 1
},
{
"name": "Wrong Answer",
"amount": 1.4,
"market": "PLC",
"number": 1,
"product": "MIDDIV",
"position": 1
},
{
"name": "Rise Again",
"amount": 1.55,
"market": "PLC",
"number": 7,
"product": "FIXED",
"position": 2
},
{
"name": "Rise Again",
"amount": 1.3,
"market": "PLC",
"number": 7,
"product": "MIDDIV",
"position": 2
},
{
"name": "Rusty Mudshark",
"amount": 2.0,
"market": "PLC",
"number": 3,
"product": "FIXED",
"position": 3
},
{
"name": "Rusty Mudshark",
"amount": 2.4,
"market": "PLC",
"number": 3,
"product": "MIDDIV",
"position": 3
}
],
"multi_race": [],
"straight_types": [
"FIXED",
"MIDDIV"
]
},
"resulted_at": "2026-10-04T01:10:17.490670Z",
"market_closed_at": "2026-10-04T01:04:42.969861Z",
"inplay_at": null,
"market_state_source": "pointsbetau"
}
]
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