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 in the permanent closing-line archive
45 daysDepth of the live price store at last measurement
45 daysLive store horizon; older races come from the permanent archive
60 minPre-jump capture window per book

Measured 7 November 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

/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. Races from the last 45 days are read from the live snapshot store (45 days deep, from 23 September 2026, at the last measurement); older races are served from the permanent archive in the same shape, and history_from on every response is the floor. Cost: 5 credits. Every plan reads upcoming races and the last 24 hours; races that started earlier are on Standard and above.

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). Plus and above read the whole archive; Standard reads the last 90 days, and a date range entirely older than that is a free 403. 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 60 minutes before the jump 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: Plus, Business, Platform and Scale.

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, back to 4 August 20265 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-01&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-01", "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 day the archive carries results. Closing lines cost 5 credits or 20 credits. Plus and above read the whole archive; Standard reads the last 90 days, and a date range entirely older than that is a free 403. Plans and prices are 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 closing-line and price-path archives run from 4 August 2026 forward, permanently, and carry Australian and New Zealand results from 1 August 2026. Per-race price history reaches back to 4 August 2026 as well: the last 45 days from the live store, older races from the archive. 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?

Plus and above read all of it, the bulk price-path export included; Standard reads the last 90 days of closing lines. Standard keys issued before 20 September 2026 keep the whole archive and the price-path export. Free and Hobby get a 403 on the archive endpoints. Results are on every plan; per-race price history is on every plan for upcoming races and the last 24 hours, and on Standard and above for races that started earlier.

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.

Is there historical sports odds data too?

Yes, kept separately from the racing archive. /v1/sports/{sport_key}/odds/history returns snapshots of one sport's market per bookmaker up to the start, and /v1/sports/{sport_key}/closing-lines the last one per book. How long each sport is kept, and the plans that read it, are in the endpoint reference.

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; redistribution on Platform and Scale.

Start with a free API key

3,000 credits a month, no card. Every live odds, results and form endpoint and the last 24 hours of racing price history. Price history on past races, historical sports odds and movements and the closing-line archive start at Standard. Move to Standard when a polling product needs the volume. Whole archive on Plus and above; Standard reads the last 90 days of closing lines. 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; redistribution on Platform and Scale.

API reference for the endpoints in this guide

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