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
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
| Endpoint | Purpose | Credits |
|---|---|---|
/v1/racing/price-history | Every price move for one race, last 45 days | 5 credits |
/v1/racing/closing-lines | Permanent closing line + result per runner per book | 5 credits or 20 credits |
/v1/racing/closing-lines/coverage | The archive's measurement of itself | 1 credit |
/v1/racing/price-paths | Bulk export of the permanent price-path archive | 5 credits or 20 credits |
/v1/racing/results | Settled results, up to 7 days back | 2 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.