Racing Archive

What the closing-line archive actually holds

Cost: 1 credit. The archive's own measurements of itself — depth, date floor, how much of it is a genuine closing line, how much has a result, and how many rows carry a contamination flag.

Results are collected for Australian and New Zealand racing from results_from onward, and for British and Irish thoroughbreds from 2026-10-06 (Betway's settlement feed: every finisher Betway ranks; on Irish races it ranks the first four first and the rest within about 25 minutes of the off). British and Irish races are closed by the UK-licensed books (ladbrokes_uk, williamhill, betway_uk) and the Australian books that quote them; races in every other country carry closing prices but never a finish position. So resulted_races_pct is the share of the WHOLE archive with a result, while settleable_races / settleable_resulted_pct count only AU and NZ races that started after results collection began — the figure to read if you intend to settle against the archive. by_category carries resulted_races per code for the same reason.

finish_position_pct is the finish-position fill rate: of the rows whose race has a result (runners marked scratched left out), the share that carry a position. AU thoroughbred and greyhound results publish every finisher's position, and AU harness and NZ results carry the full field from 2026-10-04, so all of them run near 100% on races from then on; before 2026-10-04 harness and NZ results named the placegetters only, which holds their whole-archive figure near the placed share of the field. by_category carries it per code.

consensus_close_pct (from 2026-10-05) is the share of genuine closing lines that carry consensus_close_prob, the market's margin-free probability stored at the close. Rows without one belong to races where fewer than two complete-field books closed.

backtest_ready_rows / backtest_ready_pct count the rows that pass the recommended modelling filter (genuine closing line, not scratched, no venue-split, name-fragment or duplicate flag). closing_by_period splits is_closing_line at 2026-09-29: from that card a row is also a closing line when the book was still quoting the same price inside 300 seconds of the jump, so the two periods are measured on different evidence and should be read separately.

Per book and per join, over a recent window (days, default 30). by_bookmaker gives each book's closing_pct and baseline_pct: the closing-line rate varies widely between books, so the archive-wide is_closing_line_pct hides the books whose series often stop early. races_without_result counts AU and NZ archive races in the window with no result at all, and results_without_race counts AU and NZ results with no archive race; their denominators are settleable_races_in_window and results_in_window, and definitions states each count in one line. Races younger than three hours are left out of both gaps.

This exists so nobody has to take a marketing number on trust before paying for a bulk pull. Every figure is computed from the table, refreshed at most every ten minutes. Open to every key, Free included, so you can check the archive before paying for it; the numbers describe the whole archive. Reading the rows themselves (/v1/racing/closing-lines) is a paid endpoint.

get/v1/racing/closing-lines/coverage

Request

  • Base URL: https://api.puntersedge.online
  • URL: https://api.puntersedge.online/v1/racing/closing-lines/coverage
  • Auth: API key in header X-API-Key

Query parameters

daysinteger

Days the per-bookmaker rates and the two result-join gaps are measured over, ending now. Every other figure covers the whole archive.

Headers

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

Response

Successful Response

archive_fromstring nullable required
archive_tostring nullable required
rowsinteger required
racesinteger required
bookmakersinteger required
is_closing_line_pctnumber required
open_is_baseline_pctnumber required
resulted_races_pctnumber required
results_fromstring nullable required
settleable_racesinteger required
settleable_resulted_pctnumber required
results_scopestring required
venue_split_suspect_rowsinteger required
name_fragment_suspect_rowsinteger required
scratched_rowsinteger

Rows of runners the result marked scratched (flag from 2026-09-28; hidden from /closing-lines by default).

duplicate_suspect_rowsinteger nullable

Rows whose race appears to duplicate another race record (duplicate_suspect). Null where the archive does not carry the flag. Added 2026-10-19.

backtest_ready_rowsinteger

Rows that pass the recommended modelling filter: is_closing_line AND NOT scratched AND NOT venue_split_suspect AND NOT name_fragment_suspect AND NOT duplicate_suspect (an absent flag counts as false). Added 2026-10-19.

backtest_ready_pctnumber

backtest_ready_rows as a share of rows. Added 2026-10-19.

closing_by_periodobject[]

is_closing_line either side of 2026-09-29, the first card on which a steady close can be confirmed: from then a row also counts as a closing line when the book was still quoting the same price inside 300 seconds of the jump; before it, only a price change inside those 300 seconds counted, so a price that sat still for the last minutes reads as a last-seen close. One row per period: {period, from|to, rows, closing_rows, closing_pct, basis}. Added 2026-10-19.

consensus_close_pctnumber

Of the rows that are genuine closing lines (is_closing_line, not scratched), the share carrying consensus_close_prob — the market's margin-free probability stored at the close (columns from 2026-10-05, backfilled to the archive floor).

finish_position_pctnumber

Of the rows whose race has a result, excluding runners the result marked scratched, the share carrying a finish_position. Measured, not promised: AU thoroughbreds and greyhounds carry every finisher's position (from 2026-09-14), AU harness and NZ the full field from 2026-10-04 and the placegetters only before it.

by_categoryobject[] required
window_daysinteger

Days the by_bookmaker rates and the two result-join gaps are measured over, ending now.

window_fromstring nullable

Start of that window, UTC.

by_bookmakerobject[]

One row per bookmaker over the window: {bookmaker_key, rows, closing_pct, baseline_pct}. closing_pct is the share of that book's rows with is_closing_line; baseline_pct the share with open_is_baseline. Books differ widely, so filter on the flags rather than trusting the aggregate.

settleable_races_in_windowinteger

AU and NZ archive races in the window that started at least 3 hours ago (the denominator of races_without_result).

races_without_resultinteger

Of settleable_races_in_window, races with no result row at all.

races_result_unlinkedinteger

Of races_without_result, races whose result exists under a different race_id (category, a start within two minutes and the venue's first word match). Added 2026-10-19.

results_in_windowinteger

AU and NZ results in the window that started at least 3 hours ago (the denominator of results_without_race).

results_without_raceinteger

Of results_in_window, results with no archive race (no closing line at any served book).

definitionsobject

One line per gap and rate above, saying exactly what is counted.

Changes

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