Racing price history / closing line
Cost: 5 credits. Every price move for a race, per runner per bookmaker, with the opening and closing line.
Identify the race either by race_id, or by venue + race_number + date — use the latter for past races, because race ids are only resolvable from the live feed, which holds the next ~6 hours.
The series is change-only. Each point is a price MOVE, not a sample: a gap means the price held steady. move_pct is open→close, positive meaning the price drifted out.
open_price and close_price are the first and last CAPTURED prices for that book, not guaranteed market open and close. Capture starts when a race enters the 60-minute window, and a book that does not quote that early gets its first price whenever it starts quoting: measured over 30,448 series on 2026-08-15, 44% of series began at the 60-minute baseline and 56% began later. At the other end 63% of series have a final point inside 120s of the jump and 81% inside 300s, so the rest are not closing lines either. Read open_secs_to_jump, close_secs_to_jump and open_is_baseline on each bookmaker before using a series for closing-line value, and drop the ones that do not reach the jump.
History is permanent. Races inside the ~45-day live window are served from the live store; older races come from the permanent archive, which is never purged. history_from on the response is the true floor — capture began 2026-08-04, and the archive only deepens from there. (Identify past races by venue + race_number + date; both stores resolve that key.)
Past races are Standard and above. Every plan reads every upcoming race and any race that started in the last 24 hours. A race that started earlier needs Standard or above; on Free and Hobby it is a 403 that charges nothing and carries a sample of what the call returns, from one recent race.
Request
- Base URL: https://api.puntersedge.online
- URL: https://api.puntersedge.online/v1/racing/price-history
- Auth: API key in header X-API-Key
Query parameters
Race id. If omitted, give venue + race_number + date.
Venue name, case-insensitive (with race_number + date)
Race date, YYYY-MM-DD (YYYYMMDD accepted): the UTC day of the race's start, or, when that finds nothing, the Australian Eastern meeting date, so the date /v1/racing/results and /v1/racing/closing-lines give a race resolves it here too. A date that resolves nothing is a free 404 naming the venue's races with history around it.
Comma-separated bookmaker keys, case-insensitive. An unrecognised key is a free 422 naming the valid keys, so a typo costs nothing.
False returns open/close/high/low only
Cap on returned points; response flags truncation
Headers
Response
Successful Response
Example response
{
"category": "horse",
"country": "AU",
"history_from": "2026-08-04T09:22:00Z",
"points_returned": 2481,
"race_id": "race_123",
"race_number": 2,
"runners": [
{
"bookmakers": [
{
"close_price": 7,
"close_secs_to_jump": 41,
"high": 7,
"key": "sportsbet",
"low": 6,
"move_pct": 7.69,
"open_is_baseline": true,
"open_price": 6.5,
"open_secs_to_jump": 3595,
"points": [
{
"captured_at": "2026-08-15T02:00:04Z",
"secs_to_jump": 3595,
"win_price": 6.5
}
],
"points_count": 10
}
],
"name": "Aeolian",
"number": 4
}
],
"start_time": "2026-08-15T03:00:00Z",
"truncated": false,
"venue": "Caulfield"
}Changes
No recorded changes to this operation across all 1 revision of this API.