18+ Only  |  Gambling can be addictive — please gamble responsibly  |  Gambling Help: 1800 858 858  |  GambleAware

PuntersEdge Developers

Getting Started with the PuntersEdge API

PuntersEdge API delivers live and historical odds from Australian bookmakers — 15 on racing, 6 on sports. Start with a free key, make your first call in under two minutes.

1. Get a free API key

Sign up at the API Platform page to request your free API key. We email a verification link — click it and your key is active immediately and emailed to you. The free tier provides 3,000 credits per month, capped at 30 requests per minute — enough for exploration and lightweight integrations.

2. Your first odds request

Pass your API key in the X-API-Key header. All responses are JSON.

# Next races — every covered bookmaker's price per runner
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.puntersedge.online/v1/racing/next-to-go?num_races=5&country=AU"
# Racing — best price per runner only
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.puntersedge.online/v1/racing/best-odds?categories=horse&country=AU"
# Sports use the same header and shape
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.puntersedge.online/v1/sports/nrl/odds?markets=h2h"
# Horses only, and more of them
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.puntersedge.online/v1/racing/next-to-go?num_races=10&categories=horse&country=AU"

Keep country=AU on racing calls while you are getting started: without it the next races to jump are often overseas meetings priced by a single bookmaker, which is not what the API is for and not what the plan cards describe.

The same first request from Python and JavaScript, nothing to install beyond requests:

# Python 3 — pip install requests
import requests

r = requests.get(
    "https://api.puntersedge.online/v1/racing/next-to-go",
    params={"num_races": 5, "country": "AU"},
    headers={"X-API-Key": "YOUR_KEY"},
    timeout=15,
)
r.raise_for_status()
for race in r.json():
    print(race["venue"], "R%s" % race["race_number"], race["category"])
    for runner in race["runners"][:3]:
        quoted = [b for b in runner["bookmakers"] if b.get("win_price")]
        if quoted:
            best = max(quoted, key=lambda b: b["win_price"])
            print("  ", runner["name"], best["win_price"], "@", best["key"])
// JavaScript — Node 18+, Deno, Bun or a browser (fetch is built in)
const res = await fetch(
  "https://api.puntersedge.online/v1/racing/next-to-go?num_races=5&country=AU",
  { headers: { "X-API-Key": "YOUR_KEY" } },
);
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
for (const race of await res.json()) {
  console.log(race.venue, `R${race.race_number}`, race.category);
  for (const runner of race.runners.slice(0, 3)) {
    const quoted = runner.bookmakers.filter((b) => b.win_price);
    if (quoted.length) {
      const best = quoted.reduce((a, b) => (b.win_price > a.win_price ? b : a));
      console.log("  ", runner.name, best.win_price, "@", best.key);
    }
  }
}

Prefer a typed client? pip install puntersedge (Python guide) or npm install puntersedge (TypeScript client), and the MCP server puts the same endpoints inside Claude and Cursor with no code at all.

3. Supported workflows

4. Coverage summary

Measured 2026-10-06 over a trailing 7-day window, 15 Australian bookmakers quoted racing prices a customer key can read. 16 connectors quoted at all: the difference is Betfair Exchange and Pinnacle, ingested for internal reference and withheld from customer responses. Quote the served figure unless you mean the other one.

Full matrix at Australian Bookmakers Coverage.

5. Pricing plans

Calls cost 0–100 credits depending on the endpoint — /v1/usage and /v1/health are free, /v1/sports/{key}/odds costs 1 per market type, the history and price-history endpoints cost 5 credits, and the ceiling is a bulk CSV export of /v1/racing/closing-lines. See the full credit table. Upgrade at any time on the platform page.

API reference for the endpoints in this guide

Hit something the API can't do yet? An endpoint, a bookmaker, a market — ask for it. Requests from people mid-integration are the ones that get built.

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