Every market on one race: win, place, Top 2/3/4 and exotic dividends
Cost: 2 credits. One race, every market the panel quotes on it, book by book: the win price, the place price, the Same Race Multi legs (Top 2, Top 3 and Top 4), each book's market percentage, the best price per runner in each market, and — once the race has been run — the exotic dividends it paid.
Naming the race. race_id is exact. Failing that, venue + meeting_date (the AET meeting date) + race_number, with country when two meetings share the name on one date (Ascot in Perth and in Berkshire on 2026-10-17); two races still sharing those answer 409 race_ambiguous, naming each, and cost nothing, because picking one of a venue split silently would be worse than refusing.
Who quotes what. Every book in the panel prices win, and all but the exchange price place. Top 2/3/4 come from sportsbet, ladbrokes_au, neds and pointsbetau — no other book in the feed publishes Same Race Multi legs, so an empty top3 is a fact about the market and not a gap in the feed. Each leg is validated against the chain win >= top2 >= top3 >= top4 > 1.0 before it is stored, so a leg that would break it is absent rather than wrong.
overround_pct is Σ (1/price) × 100 over the runners that book quoted in that market — 100% is a book taking no margin. It is null where a book quoted fewer than two runners, which is not a market. Place and Top-N percentages are naturally far above 100 because several runners can win the bet.
Live or stored. A race whose market is still open is read live (source: "live"). Once it has been run the live rows are purged, and the answer comes from the minute-by-minute capture of the last price each book showed before the jump (source: "closes"). Races that jumped before that capture began carry no market rows and say so in note.
exotics are SETTLED DIVIDENDS — what the tote paid — not prices. Nothing in this feed quotes fixed-odds quinella, exacta, trifecta or first four before a race, so exotics is null until the race is resulted, and then carries the result's own status: interim dividends can still move, final cannot.
quote_detail (since 2026-09-29) lists, per book and runner, what the book publishes beside its prices: open_price (the book's own opening price — not the archive's first captured price), flucs (its recent prices, most recent first), tote_win / tote_place (its tote dividends keyed by product code; PROV is an indicative pre-race dividend that moves until the pool closes), boost_price / boost_type, and the exchange fields. Each entry names bookmaker, number, name, runner_ref and seen_at — when the book was last read — and only the fields that book carries. Who carries them, measured on the AU board of 2026-09-29 before its first race (20 races, 2,219 book-runner rows): flucs at betdeluxe, betgold, boostbet and betright on every row, open_price at betright on every row, tote_win at tabtouch on 89 of 194 rows and tote_place on 26 (a provisional dividend appears as the pool forms), no boost that morning. The exchange fields are Betfair's, and Betfair is withheld from customer answers. For a race that has been run the values are the last read before the jump.
scratchings (since 2026-09-29) are the race's scratched runners — name, number, barrier, scratched_at (the scratching book's own time, UTC) and vacant for an empty box — from the open race while it is live, and once it has been purged from the capture taken at the jump. A race run before 2026-09-29 answers an empty list after its purge. A scratching no Australian bookmaker has reported, while two or more of them still price the runner, is held back: the runner stays in the markets until a bookmaker reports it.
tote_series (since 2026-10-06) is each book's tote approximate as the pools formed: one entry per book and runner, with points at fixed marks before the jump — 3600, 1800, 900, 600, 300, 180, 120 and 60 seconds — each the first read the minute-by-minute capture saw at or inside its mark, carrying mark_seconds, read_at, secs_to_jump and tote_win / tote_place by product code. TABtouch publishes a provisional dividend (PROV) for every runner hours out; BetRight its products in the final quarter hour. A race first seen inside a mark has no earlier points: nothing is filled in. The last read before the jump stays in quote_detail.
book_scratchings (since 2026-10-06) says, book by book, when a scratching reached each feed: reported_at is the first time that book's own feed listed it, book_scratched_at the scratch time the book itself states (Ladbrokes, Neds, BetRight and the BetMakers books carry one), and first_quoted_at / last_quoted_at with last_quoted_win the polls, to the minute, at which that book's feed still carried a win price for the runner after the race's scratchings named it. Ladbrokes and Neds keep a scratched runner's last price on the card beside their own flag, so for a book that flags it the price is recorded once, at the flag: its price at the scratching. A book that carries a price with no flag is recorded each minute until it clears the runner. None of these prices is served as a price: a scratched runner is dropped from every price endpoint.
Your own links (source_link beside each runner's source_url, since 2026-10-14, Plus and above): store your bookmaker link templates once with PUT /v1/link-templates and each price also carries a ready-made link built through them. Absent where there is nothing to link, and for an account with no stored templates.
Plus and above, and Standard keys issued before 20 September 2026. Every other key below Plus receives a 403 and is not charged; the 403 carries a sample: the winner of one recent race, its best price in each market and the book that offered it.
Request
- Base URL: https://api.puntersedge.online
- URL: https://api.puntersedge.online/v1/racing/markets
- Auth: API key in header X-API-Key
Query parameters
The race_id from /v1/racing/next-to-go, /events, /results or the archive. The primary form; use venue + meeting_date + race_number only when you do not hold it.
Venue name as the feeds spell it (case-insensitive). Needs meeting_date and race_number.
AET meeting date, YYYY-MM-DD.
Alpha-2 country of the meeting (AU, NZ, GB, IE, ZA, ...). Only needed with venue when two meetings share the name on one AET date — Ascot (Perth) and Ascot (Berkshire) on 17 October 2026 — and the 409 names each candidate's country.
Comma-separated bookmaker keys to restrict to. Omit for every book quoting the race.
Comma-separated subset of win, place, top2, top3, top4, exotics. Omit for all of them.
Headers
Response
Successful Response
Changes
No recorded changes to this operation across all 1 revision of this API.