PuntersEdge Developers
Sports Odds API — Australia
Multi-bookmaker Australian sports odds in one API call. AFL, NRL, NBA, WNBA, Tennis, Cricket and more — with best-price detection and arbitrage flagging built in.
List available sports
GET https://api.puntersedge.online/v1/sports
Header: X-API-Key: YOUR_KEY
Returns an array of sport keys (afl, nrl, nba, wnba, tennis_atp, cricket_test, …) with display
names. Only active sports are listed; the key you pass to every other endpoint is this exact
string. soccer_epl serves the English Premier League; other soccer
competitions sit under soccer_other.
Get odds for a sport
GET /api/v1/sports/{sport_key}/odds
?markets=h2h # h2h (head-to-head), spreads, totals
&bookmakers=sportsbet,tab,pointsbetau # optional filter
# Example: NRL head-to-head, all bookmakers
GET /api/v1/sports/nrl/odds?markets=h2h
Returns an array of events with bookmaker odds arrays nested by outcome.
bookmakers takes the exact key from each bookmaker object —
sportsbet, tab, ladbrokes_au, pointsbetau,
palmerbet, betright. Matching is exact but case-insensitive, and
an unrecognised key returns 422 with the valid list inline and costs no credits — the same
contract markets has always had. Until 2026-08-18 it did not: passing
ladbrokes instead of ladbrokes_au silently narrowed the response
to nothing and billed for it.
Best-price and arbitrage endpoint
GET /api/v1/best-odds/{sport_key}
# Returns:
# - best_bookmaker + best_price per outcome
# - arb_exists: true if cross-book arbitrage exists
# - arb_profit_pct: estimated theoretical arbitrage margin % (not guaranteed)
Supported sports and bookmaker count
| Sport | Key | Bookmakers |
|---|---|---|
| NRL | nrl | 6 (SB, TAB, LB, PB, Palmer, BetRight) |
| AFL | afl | 5 (SB, TAB, PB, Palmer, BetRight) |
| WNBA | wnba | 5 (SB, LB, PB, Palmer, BetRight) |
| NBA | nba | 3 (TAB, LB, Palmer) |
| NRLW | nrlw | 2 (SB, PB) |
| Tennis ATP / WTA | tennis_atp, tennis_wta | 3 (Palmer, PB, SB) |
| Test Cricket | cricket_test | 1 (SB) |
| NFL | nfl | 2 (Palmer, BetRight) |
| Soccer — other competitions | soccer_other | 2 (PB, SB) |
| AFLW, MLB, NHL, College Football, MMA/UFC, Rugby Union, Basketball (other), Cricket (other) | aflw, mlb, nhl, ncaaf, mma, rugby_union, basketball_other, cricket_other | 1 |
A-League (1 books, 11 fixtures) is ingested and quoted by a served bookmaker but is not reachable: the API 404s the key. It is measured here and excluded from the coverage table rather than counted as coverage.
Counts are Australian books on the events currently in the feed, so they
move with the card — GET /v1/sports is the live list. Betfair Exchange prices several of
these but is withheld from customer responses pending its data licence, and Pinnacle appears on US
codes only; neither is counted above. cricket_bb (Big Bash) is deactivated out of
season and 404s, along with its bbl alias; it reactivates automatically on
1 November for the December–February season.
Sports prices are re-read from each bookmaker we poll directly, with a 2-minute pause between passes; prices that reach us by push are updated as each push arrives. By default a sports market is served until it has gone 6 hours without an update, so a sports price can be hours old.
Usage notes
- Credit cost is per endpoint, not per bookmaker:
/v1/sportscosts 1,/v1/sports/{sport_key}/oddscosts 1 per requested market (somarkets=h2h,spreads,totalsis 3), and/v1/best-odds/{sport_key}costs 3. Full table on API pricing. - Bookmaker markets older than 360 minutes are excluded from
/best-odds. Rather than assume a window, read the freshness fields on each event:data_age_seconds(the age of the oldest contributing book),freshest_age_seconds,stale(true above 1800s) andstale_bookmakers. On/v1/sports/{sport_key}/oddsthe cutoff is yours to set withmaxAgeMinutes, which also defaults to 360. - For historical prices, use the Historical Odds API.
- API keys are passed via the
X-API-Keyheader — see Authentication.
Start with a free API key
Test AFL, NRL, NBA, racing and best-price endpoints before upgrading to a paid API credit plan.