Returns the next races to run with runners and prices; categories can filter horse, greyhound and harness racing. **Freshness is reported worst-first.** `data_age_seconds` is the age of the OLDEST bookmaker quote in the race and `stale` is true when that exceeds 120s, so the flag describes the staleness you are exposed to rather than the best leg in the payload. `stale_bookmakers` names the affected books, `freshest_age_seconds` is the best-case age, and every entry in `bookmakers` carries its own `age_seconds`, `last_update` and `stale`. A stale book does not invalidate the race — drop that leg. Scratched runners are returned in `scratchings` only. They are never in `runners`, even while a book is still publishing a price for them. **A foreign race is quoted by a single bookmaker.** Every non-Australian or unlabelled race in the feed carries exactly one book's price — median 1, maximum 1, no exceptions — so a cross-book comparison on them compares nothing. Pass `country=AU` for the meetings the bookmaker panel actually covers. **An Australian race gathers books as it approaches the jump**, so depth depends on how far out you look rather than sitting at one number. Measured 2026-08-17: a median of 10 bookmakers inside 30 minutes of the jump, 9 at 30-60 minutes, 5 at one to two hours, and 2 beyond that. Since this endpoint returns the NEXT races, expect the near-jump end of that range. A window-wide average is not meaningful here — it just tracks whichever mix of start times happens to be loaded. How much of the card is foreign is NOT a fixed ratio: `race_events` holds roughly the next six hours, and the foreign share of that window runs near zero through the Australian afternoon and reaches 100% overnight. Filter on `country` rather than assuming a mix. **Form fields are patchy on both, and not in the direction you would guess.** Measured per distinct runner on 2026-08-17, `trainer` and `form` were present on 38% of AU runners but 100% of foreign ones, `barrier` 26% against 65%, `jockey` 20% against 35%. `weight` is the only field that favours AU (18% against 0%). Race conditions — `distance_m`, `track_condition`, `weather` — are populated on both. Treat every form field as optional and check it, rather than inferring its presence from `country`.
X-API-Key
2 credits
curl 'https://api.puntersedge.online/v1/racing/next-to-go' \
-H 'X-API-Key: YOUR_KEY'
| Name | In | Type | Required | Description |
|---|---|---|---|---|
num_races |
query | integer | no | |
categories |
query | string | no | horse,greyhound,harness or omit for all |
bookmakers |
query | string | no | Comma-separated bookmaker keys |
country |
query | string | no | ISO country codes, comma-separated (e.g. AU or AU,NZ). Omit for every country. A foreign or unlabelled race is quoted by a SINGLE bookmaker (median 1, maximum 1) at any range, while an Australian race gathers books toward the jump (median 10 inside 30 minutes, 2 at 2-4 hours), so a cross-book comparison on foreign races compares nothing; pass country=AU for the Australian meetings the bookmaker panel actually covers. |
Status codes: 200, 401, 402, 422, 429, 500. Response bodies are JSON; the full schema is in /openapi.json.
GET /v1/racing/best-odds — Best racing price per runner across booksGET /v1/racing/events — Upcoming race listGET /v1/racing/movers — Racing steamers and driftersGET /v1/racing/price-history — Racing price history / closing lineGET /v1/racing/results — Settled race resultsThe free tier needs no credit card, and the sandbox endpoints need no key at all.
Get a free API key Quickstart