18+ Only  |  Gambling can be addictive — please gamble responsibly  |  Gambling Help: 1800 858 858  |  GambleAware

Closing lines · price paths · results

Historical racing odds API

Four endpoints hold the past: a per-race price-history store, a permanent closing-line archive, a bulk price-path export and settled results. This page is exact about what each one holds and how far back it reaches, because a modeller's first question is depth.

Measured archive depth

4 August 2026Archive floor: first race start in the price store
45 daysDepth of the price-history store at last measurement
45 daysSnapshot retention horizon (the archive is permanent)
60 minPre-jump capture window per book

Measured 18 September 2026 on the public coverage-report.json, recomputed from the production store every half hour. Customer-served figures; the withheld reference books are excluded.

What is captured, and when

Capture is change-only: every time a served bookmaker changes a runner's win or place price, the new price is stored with a timestamp. A gap between two points means the price held. Capture of a race begins when it enters the 60-minute window before the jump, so open_price is the first price seen inside that window, not a market open, and a book that quotes late gets its first point whenever it starts quoting.

The feed also reads the early markets, so the first price on a race can land hours before the jump. The full board still fills inside about an hour of it.

Per-race price history (live store)

/v1/racing/price-history returns every price move for one race, per runner per bookmaker, with open, close, high and low. Identify the race by race_id, or by venue + race_number + date for a race that has left the live feed. It reads the snapshot store, which retains 45 days; the store began on 4 August 2026 and is 45 days deep at the last measurement. Cost: 5 credits. On every plan.

Closing-line archive (permanent)

/v1/racing/closing-lines is a separate, permanent table: one row per race, runner and bookmaker, carrying the last price seen before the jump, the first price seen after the market opened, and the finishing position where a result is known. Nothing in it ages out. It runs from 4 August 2026 forward.

closing_only=true (the default) keeps only rows whose last observation was within 300 seconds of the jump, because a series that stopped early is a stale quote, not a closing line. resulted_only=true keeps rows with a finishing position, which is the historical-results query for races older than the results window. Filter by date, venue, category, country or bookmakers.

/v1/racing/closing-lines/coverage returns the archive's own measurement of itself — depth, floor date, share of rows that are genuine closing lines, share with a result — computed from the table at request time, so you can check depth for 1 credit before paying for a bulk pull.

Cost: 5 credits or 20 credits (JSON / CSV). Plans: Standard, Plus, Business, Platform and Unlimited. Free and Hobby keys receive a 403.

Price paths, bulk (permanent)

/v1/racing/price-paths is the bulk form of price history: every observed price point in the permanent movement archive, one row per race, runner, bookmaker and captured price, from market open to the last pre-jump quote, exported over a date range. format=csv streams a flat table that pd.read_csv loads directly; format=parquet returns the same table typed. To build T-60/30/15/5/2 snapshots, take the last row at or before each mark per race, runner and book.

Cost: 5 credits or 20 credits (JSON / CSV). Plans: Standard, Plus, Business, Platform and Unlimited.

Settled results

/v1/racing/results returns finishing order, settled fixed prices, dividends and deductions for up to 7 days back (hours_back) or one meeting date (date=YYYY-MM-DD), at 2 credits a call. Settle only against status=final. Harness and NZ results carry a bookmaker's settled price, never an official SP.

Endpoints on this page

EndpointPurposeCredits
/v1/racing/price-historyEvery price move for one race, last 45 days5 credits
/v1/racing/closing-linesPermanent closing line + result per runner per book5 credits or 20 credits
/v1/racing/closing-lines/coverageThe archive's measurement of itself1 credit
/v1/racing/price-pathsBulk export of the permanent price-path archive5 credits or 20 credits
/v1/racing/resultsSettled results, up to 7 days back2 credits

Credit costs are read from the API's own source at render time. The full table, with plan gates, is on API pricing; parameters, status codes and response schemas are in the API reference.

Example request — 5 credits or 20 credits

curl

curl 'https://api.puntersedge.online/v1/racing/closing-lines?date=2026-08-04&category=horse&resulted_only=true&limit=500' \
  -H 'X-API-Key: YOUR_API_KEY'

Python

import requests

r = requests.get(
    "https://api.puntersedge.online/v1/racing/closing-lines",
    params={"date": "2026-08-04", "category": "horse",
            "resulted_only": True, "limit": 500},
    headers={"X-API-Key": "YOUR_API_KEY"}, timeout=15)
r.raise_for_status()
data = r.json()
print("archive from", data["archive_from"], "rows", data["total_rows"])
for row in data["rows"]:
    print(row)

The example asks for the first archived day. Closing lines cost 5 credits or 20 credits and require Standard, Plus, Business, Platform and Unlimited; the Standard plan is A$29 a month on the pricing page.

Full parameter table, status codes and response schema: API reference →. Keys go in the X-API-Key header — see Authentication.

FAQ

How far back does the historical racing data go?

The price store's earliest race start is 4 August 2026; the closing-line and price-path archives run from that date forward, permanently. Per-race price history reads a 45-day snapshot store. Results reach back 7 days on /v1/racing/results and, for older races, through resulted_only=true on the closing-line archive.

Is the pre-jump window the whole market?

No. Capture of each race starts when it enters the 60-minute window before the jump, so open_price is the first captured price in that window. Early-market reads push the first point earlier on many races; read history_from on each response rather than assuming.

Which plans can read the archive?

Standard, Plus, Business, Platform and Unlimited. Free and Hobby get a 403 on the archive endpoints; per-race price history and results are on every plan.

Is Betfair Exchange or an official SP in the archive?

No. The archive holds fixed-odds bookmaker prices only. Exchange prices are ingested for internal reference and withheld pending a licence, and harness and NZ racing carry no official SP.

Can I redistribute the historical data?

Only on the Platform plan, which carries the right to redistribute. What you may do with the data follows your plan: personal use on Free, Hobby and Standard; display with attribution on Plus; commercial use on Business and Unlimited; redistribution on Platform.

Start with a free API key

1,500 credits a month, no card. The same data as every paid plan. Move to Standard when a polling product needs the volume. Past that the tiers are about rights, not size: personal use on free, hobby and standard; display with attribution on plus; commercial use on business and unlimited; redistribution on platform.

This site contains wagering-related analysis and is intended for Australian users aged 18+. Gambling involves risk. Please gamble responsibly.