Live prices from all 15 Australian racing bookmakers the API serves, the results, price history and the closing-line archive, for Australian and New Zealand racing. JSON you can pull into Python, R or a spreadsheet.
Every runner's price at every book on the next races, with the age of each quote, and the runners that are firming or drifting.
The closing price of each race at each book, the price path that led to it, and closing-line value for bets you have placed.
Results with placings and dividends, keyed by the same race ids as the prices.
Each runner's recent runs and each dog's record by track, distance and box, from the results we settle ourselves.
| Endpoint | What it returns | Credits per call | Plans |
|---|---|---|---|
GET /v1/racing/next-to-go | Next races to run | 2–4 credits | Every plan |
GET /v1/racing/movers | Racing steamers and drifters | 3 credits | Every plan |
GET /v1/racing/results | Settled race results | 2 credits | Every plan |
GET /v1/racing/price-history | Racing price history / closing line | 5 credits | Every plan |
GET /v1/racing/closing-lines | Permanent closing-line and result archive | 5–20 credits | From Standard (fuller access on higher plans) |
GET /v1/racing/price-paths | Bulk export of the permanent price-movement archive | 5–20 credits | From Plus |
POST /v1/racing/clv | Score bets against the closing line (CLV) | 5 credits | From Plus |
GET /v1/racing/form | Every runner in one race with its recent runs, from our own results | 3 credits | Every plan |
GET /v1/racing/greyhounds/stats | Greyhound record by track, distance, box or grade, from our own results | 3 credits | Every plan |
GET /v1/sports/{sport_key}/closing-lines | Closing price and line per bookmaker, with the consensus | 5 credits | From Standard |
Read from the API itself; every endpoint is in the API reference and on what each endpoint does.
Put your key in an environment variable, then ask for the next races. Every quote carries its own age.
import os, requests
r = requests.get(
"https://api.puntersedge.online/v1/racing/next-to-go",
headers={"X-API-Key": os.environ["PUNTERSEDGE_API_KEY"]},
params={"num_races": 5, "categories": "horse"},
)
for race in r.json():
print(race["venue"], race["race_number"], race["start_time"])
for runner in race["runners"]:
quotes = [b for b in runner["bookmakers"] if b.get("win_price")]
if quotes:
best = max(quotes, key=lambda b: b["win_price"])
print(" ", runner["name"], best["key"], best["win_price"], f'{best["age_seconds"]}s old')
One race from the response, trimmed to one runner and two bookmakers (the API's documented example):
{
"category": "horse",
"country": "AU",
"data_age_seconds": 7,
"race_id": "race_123",
"race_number": 4,
"refresh_tier": "live",
"runners": [
{
"bookmakers": [
{
"age_seconds": 7,
"key": "sportsbet",
"refresh_tier": "live",
"source_url": "https://www.sportsbet.com.au/horse-racing/australia-nz/eagle-farm/race-4-10861234",
"stale": false,
"win_price": 3.2
},
{
"age_seconds": 9,
"betslip_app_only": false,
"betslip_place_url": "https://www.unibet.com.au/racing?competitorKey=202609030600.T.AUS.mackay.4.emilia_jane&priceCode=FXD&marketName=Place&priceBetType=FixedPlace#/event/202609030600.T.AUS.mackay.4/Place/FixedPlace",
"betslip_win_url": "https://www.unibet.com.au/racing?competitorKey=202609030600.T.AUS.mackay.4.emilia_jane&priceCode=FXD&marketName=Win&priceBetType=FixedWin#/event/202609030600.T.AUS.mackay.4/Win/FixedWin",
"key": "unibet",
"place_price": 1.55,
"refresh_tier": "live",
"source_url": "https://www.unibet.com.au/racing#/event/202609030600.T.AUS.mackay.4",
"stale": false,
"win_price": 3.3
}
],
"horse_ref": "pe:examplerunner",
"name": "Example Runner",
"number": 1
}
],
"source_id": "src_a1b2c3d4e5",
"stale": false,
"start_time": "2026-06-07T04:10:00Z",
"venue": "Eagle Farm"
}
Most research starts on the free key. The archive is usually what moves people up: the last column shows how much of it each plan opens.
| Plan | Price | Credits / month | Rate limit | Licence | What it adds | |
|---|---|---|---|---|---|---|
| Free | A$0 | 3,000 | 30 requests/minute | Personal use | — | Free key |
| Hobby | A$9 | 7,500 | 60 requests/minute | Personal use | — | Choose |
| Standard | A$29 | 75,000 | 200 requests/minute | Personal use | Over Hobby: Last 90 days of the closing-line archive; Price history on past races; Historical sports odds and movements | Choose |
| Plus | A$49 | 140,000 | 500 requests/minute | Display with attribution | Over Standard: Permanent closing-line archive; Bulk price-path exports; Closing-line value scoring | Choose |
Prices in Australian dollars a month; the limits are the ones the API enforces. Every plan is on the pricing page.
These plans carry the Personal use licence, quoted from section 8.1 of the Terms:
You may use the data for yourself: your own betting decisions, your own models, research, backtesting and dashboards you look at. This licence does not cover using the data in a business, doing client work with it, building it into a product you sell, or putting our prices in front of other people.
If what you build will show our prices to other people or earn money, it needs a different licence: see building a product or using the data in a business.
The free tier needs no card. You can upgrade the same key later; nothing you build has to change.