Racing

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.

get/v1/racing/markets

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

race_idstring nullable

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.

venuestring nullable

Venue name as the feeds spell it (case-insensitive). Needs meeting_date and race_number.

meeting_datestring date nullable

AET meeting date, YYYY-MM-DD.

race_numberinteger nullable
countrystring nullable

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.

bookmakersstring nullable

Comma-separated bookmaker keys to restrict to. Omit for every book quoting the race.

marketsstring nullable

Comma-separated subset of win, place, top2, top3, top4, exotics. Omit for all of them.

Headers

X-API-Keystring
X-RapidAPI-Proxy-Secretstring

Response

Successful Response

notestring nullable
quote_detailobject[]

Per book and runner, the fields the book publishes beside its prices (since 2026-09-29): open_price (the book's own opening price), flucs (its fluctuations, most recent first), tote_win / tote_place (its tote dividends by product code; PROV is an indicative pre-race dividend), boost_price / boost_type, and the exchange fields. Each entry carries bookmaker, number, name, runner_ref, seen_at (UTC, when the fields were read) and only the fields that book carries.

scratchingsobject[]

The race's scratched runners: name, number, barrier, scratched_at (the scratching book's own time, UTC), vacant for an empty box. Read from the open race while it is live and from the capture taken at the jump once it has been purged (from 2026-09-29).

tote_seriesobject[]

Per book and runner, the book's tote approximates at fixed marks before the jump (since 2026-10-06): points at 3600, 1800, 900, 600, 300, 180, 120 and 60 seconds, each the first read the capture saw at or inside its mark: mark_seconds, read_at (UTC), secs_to_jump, and tote_win / tote_place by product code (PROV is an indicative pre-race dividend). The last read before the jump is tote_win / tote_place in quote_detail.

book_scratchingsobject[]

Per book and scratched runner (since 2026-10-06): reported_at, the first time that book's own feed listed the scratching; book_scratched_at, the scratch time the book itself states, where it carries one; first_quoted_at / last_quoted_at, when that book's feed still carried a win price for the runner after the race's scratchings named it, to the minute, with last_quoted_win (for a book that flags the scratching itself, recorded once at the flag: its price at the scratching). All UTC. Never served as a price.

Changes

No recorded changes to this operation across all 1 revision of this API.