PuntersEdge › South African racing › South African Horse Racing Closing Odds
18+. Gambling support in South Africa: the National Responsible Gambling Programme's toll-free counselling line 0800 006 008, WhatsApp 076 675 0710, responsiblegambling.org.za.
South African racing · Closing prices
471 South African races carry a runner-by-runner closing price, from 5 August 2026 to 15 October 2026, across 5 bookmakers: each bookmaker's last price before the off, the price it opened at, how many seconds to the jump each was read, and a consensus across the books that closed the race. JSON or CSV, by date, venue or race.
This is the fixed-odds close at each bookmaker, not a tote dividend or an official starting price. Rows are written when a race goes off; nothing here is typed.
One archived row · 15 October 2026
Opened
5.00
3598 s before the off · baseline window
Closed
2.35
55 s before the off
Place at close
1.37
the bookmaker's own place price
Points observed
29
distinct prices between open and close
Consensus close
2.45
across 4 bookmakers
{
"bookmaker_key": "pointsbetau",
"books_in_consensus_close": 4,
"close_place_price": 1.37,
"close_secs_to_jump": 55,
"close_win_price": 2.35,
"consensus_close_price": 2.452,
"consensus_close_prob": 0.407857,
"country": "ZA",
"horse_ref": "pe:thebuffalo",
"is_closing_line": true,
"open_is_baseline": true,
"open_secs_to_jump": 3598,
"open_win_price": 5.0,
"points_observed": 29,
"race_id": "33221b02-a60a-4044-8f6b-f21aa9399f66",
"race_number": 1,
"runner_name": "The Buffalo",
"runner_number": 4,
"start_time": "2026-10-15T10:35:00Z",
"venue": "Turffontein"
}One row per runner per bookmaker. The names are the API's; closing_only=true keeps the rows whose close was read inside the closing window.
| race_id | The race, shared with next-to-go and price-history. |
| venue, race_number, start_time, country | Where and when (UTC), and ZA. |
| runner_name, runner_number, horse_ref | The runner, its saddlecloth, and a stable horse reference. |
| bookmaker_key | Whose price this row is. One row per runner per bookmaker. |
| open_win_price, open_secs_to_jump, open_is_baseline | The first price read and how far out; open_is_baseline is true when it was read at the standard opening window. |
| close_win_price, close_secs_to_jump | The last price before the off and how close to it. |
| open_place_price, close_place_price | The place price at open and close, where the bookmaker quotes one: Easybet and Topbet do, Betway's South African races do not. |
| points_observed | How many distinct prices were captured between open and close. |
| consensus_close_price, consensus_close_prob, books_in_consensus_close | The field-normalised consensus at the close and how many bookmakers made it; null under two. |
| is_closing_line | True when the close was read inside the closing window; closing_only=true keeps these. |
| finish_position, result_status | Filled from the race's result on the archive's hourly run, from 15 October 2026. |
GET /v1/racing/closing-lines
curl 'https://api.puntersedge.online/v1/racing/closing-lines?country=ZA&category=horse&date=2026-10-15&closing_only=true&limit=500&offset=0' \
-H 'X-API-Key: YOUR_KEY'Page with offset; total_rows in the response says how many there are.
GET /v1/racing/closing-lines?format=csv
curl 'https://api.puntersedge.online/v1/racing/closing-lines?country=ZA&date=2026-10-15&closing_only=true&format=csv&limit=5000' \
-H 'X-API-Key: YOUR_KEY' -o closing-2026-10-15.csvA flat file of the same rows, for a notebook or a database load.
GET /v1/racing/closing-lines?race_id=
curl 'https://api.puntersedge.online/v1/racing/closing-lines?race_id=33221b02-a60a-4044-8f6b-f21aa9399f66&closing_only=true' \
-H 'X-API-Key: YOUR_KEY'race_id is shared with next-to-go and price-history, so a race you priced live can be looked up after the off.
GET /v1/racing/closing-lines/coverage
curl 'https://api.puntersedge.online/v1/racing/closing-lines/coverage?country=ZA' \
-H 'X-API-Key: YOUR_KEY'Rows, races and bookmakers in the archive for the filter, with the first and last dates, measured when you call it.
South African races with a closing price from each bookmaker, and the first date it appears. The South African books date from the day their feed went live, 14 October 2026; the Australian books that price South African racing go back to the archive's start.
| Bookmaker | Licensed | South African races closed | Since |
|---|---|---|---|
| PointsBet | AU | 471 | 5 August 2026 |
| Betway | ZA | 16 | 14 October 2026 |
| Easybet | ZA | 16 | 14 October 2026 |
| Topbet | ZA | 16 | 14 October 2026 |
| Hollywoodbets | ZA | 8 | 15 October 2026 |
| Slice | Races closed | From |
|---|---|---|
| South African horse racing | 471 | 5 August 2026 |
Since 14 October 2026: 16 South African races closed, a median of 4.5 bookmakers quoting at the jump, 16 with three or more.
The Australian and New Zealand archive, with results against it, is on the historical racing odds page and in the free monthly dataset; the British and Irish archive has its own page.
Each bookmaker's last price for each runner before the race went off, with the seconds to the jump at which it was read. It is the fixed-odds close at that book, not a tote dividend or an official starting price.
The archive dates on this page are read from the archive itself when the page renders. The South African bookmakers appear from the day their feed went live; the Australian books that price South African racing go back further.
Add format=csv to the closing-lines call for a flat file of the same rows, up to the call's row limit, and page with offset. The free monthly dataset on /datasets is Australian racing.
Yes, from 15 October 2026: /v1/racing/results?country=ZA returns each race's finishing order. Which countries carry a finishing order is published by /v1/racing/results/coverage, measured when you call it.
The field-normalised average implied probability across the bookmakers that closed the race, turned back into a price, with books_in_consensus_close saying how many went into it. It is null when fewer than two bookmakers closed the race.
The archive and the price paths open on a paid plan; what you may do with the rows follows the plan's licence, section 8.1 of the terms.
Plans and pricing