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

API Examples

Working code samples for every endpoint. Replace YOUR_API_KEY with your key.

List active sports

Returns all sports with active odds coverage. Cost: 1 credit.

curl https://puntersedge.online/api/v1/sports \ -H "X-API-Key: YOUR_API_KEY"
import requests r = requests.get( "https://puntersedge.online/api/v1/sports", headers={"X-API-Key": "YOUR_API_KEY"} ) print(r.json())
const res = await fetch("https://puntersedge.online/api/v1/sports", { headers: { "X-API-Key": "YOUR_API_KEY" } }); const data = await res.json(); console.log(data);
Example response (not live data)
[ {"key": "afl", "title": "AFL", "group": "Australian Rules", "active": true}, {"key": "nrl", "title": "NRL", "group": "Rugby League", "active": true}, {"key": "nba", "title": "NBA", "group": "Basketball", "active": true} ]

NRL head-to-head odds

Returns upcoming NRL matches with h2h prices from all bookmakers. Cost: 1 credit.

curl "https://puntersedge.online/api/v1/sports/nrl/odds?markets=h2h" \ -H "X-API-Key: YOUR_API_KEY"
r = requests.get( "https://puntersedge.online/api/v1/sports/nrl/odds", params={"markets": "h2h"}, headers={"X-API-Key": "YOUR_API_KEY"} ) print(r.json())
const res = await fetch( "https://puntersedge.online/api/v1/sports/nrl/odds?markets=h2h", { headers: { "X-API-Key": "YOUR_API_KEY" } } ); const data = await res.json();
Example response (not live data)
{ "sport_key": "nrl", "events": [ { "id": "abc123", "home_team": "Melbourne Storm", "away_team": "Penrith Panthers", "commence_time": "2026-06-07T09:50:00Z", "bookmakers": [ { "key": "sportsbet", "title": "Sportsbet", "markets": [ { "key": "h2h", "outcomes": [ {"name": "Melbourne Storm", "price": 1.85}, {"name": "Penrith Panthers", "price": 1.95} ] } ] } ] } ] }

Multiple market types

Get h2h and line (spreads) in one call. Cost: 2 credits (1 per market type).

curl "https://puntersedge.online/api/v1/sports/afl/odds?markets=h2h,spreads" \ -H "X-API-Key: YOUR_API_KEY"
r = requests.get( "https://puntersedge.online/api/v1/sports/afl/odds", params={"markets": "h2h,spreads"}, headers={"X-API-Key": "YOUR_API_KEY"} )

Best-odds comparison + arb detection

Returns the best available price per selection across all bookmakers, and flags any arbitrage opportunities. Cost: 3 credits.

curl "https://puntersedge.online/api/v1/best-odds/afl" \ -H "X-API-Key: YOUR_API_KEY"
r = requests.get( "https://puntersedge.online/api/v1/best-odds/afl", headers={"X-API-Key": "YOUR_API_KEY"} )
Example response (not live data)
{ "sport_key": "afl", "events": [ { "id": "def456", "home_team": "Collingwood", "away_team": "Carlton", "best_odds": { "Collingwood": {"price": 1.92, "bookmaker": "tab"}, "Carlton": {"price": 2.10, "bookmaker": "sportsbet"} }, "arb_exists": false, "arb_profit_pct": -3.8 } ] }

Sports arbitrage scanner

Scans upcoming markets for true arbitrage and best-odds overlays, returning arb_pct, optimal stakes and per-selection price comparison. Set min_profit_pct=0 to also see value overlays. Cost: 3 credits.

curl "https://puntersedge.online/api/v1/arb/sports?sport_key=nrl&min_profit_pct=0" \
  -H "X-API-Key: YOUR_API_KEY"
r = requests.get(
    "https://puntersedge.online/api/v1/arb/sports",
    params={"sport_key": "nrl", "min_profit_pct": 0},
    headers={"X-API-Key": "YOUR_API_KEY"}
)
for evt in r.json():
    if evt["is_arb"]:
        print(evt["home_team"], "vs", evt["away_team"], evt["arb_pct"], "%")
Example response (not live data)
[
  {
    "sport_key": "nrl",
    "home_team": "Melbourne Storm",
    "away_team": "Penrith Panthers",
    "commence_time": "2026-06-21T09:50:00Z",
    "is_arb": true,
    "arb_pct": 2.84,
    "max_overlay_pct": 3.1,
    "optimal_stakes": [
      {"name": "Melbourne Storm", "stake": 52.7, "bookmaker": "sportsbet", "profit_if_wins": 5.41},
      {"name": "Penrith Panthers", "stake": 47.3, "bookmaker": "neds", "profit_if_wins": 5.39}
    ],
    "selections": [
      {"name": "Melbourne Storm", "best_price": 1.96, "best_bookmaker": "sportsbet",
       "avg_price": 1.88, "overlay_pct": 3.1,
       "all_prices": [{"bookmaker": "sportsbet", "price": 1.96}, {"bookmaker": "tab", "price": 1.90}]}
    ]
  }
]

Racing back/lay arbitrage (vs Betfair)

Compares fixed-odds bookmaker back prices against Betfair exchange lay prices and returns the stake split and locked-in margin. Add verify=1 to re-check each leg live before it's returned. Cost: 3 credits.

curl "https://puntersedge.online/api/v1/arb/racing?categories=horse&min_edge_pct=1&verify=1" \
  -H "X-API-Key: YOUR_API_KEY"
r = requests.get(
    "https://puntersedge.online/api/v1/arb/racing",
    params={"categories": "horse", "min_edge_pct": 1, "verify": 1},
    headers={"X-API-Key": "YOUR_API_KEY"}
)
Example response (not live data)
{
  "opportunities": [
    {
      "venue": "Randwick", "race_number": 6, "category": "horse",
      "start_time": "2026-06-21T05:40:00Z", "mins_to_race": 22,
      "runner": "Lofty Strike", "number": 4,
      "back_bookmaker": "ladbrokes_au", "back_price": 4.40,
      "bf_lay_price": 4.20, "edge_pct": 2.1,
      "back_stake": 100.0, "lay_stake": 104.8,
      "guaranteed_profit": 4.95, "bf_liability": 335.4
    }
  ]
}

Value board — daily promos

Daily promo plays ranked by EV per $1 (/v1/value/promos, 2 credits).

# EV-ranked daily promos (filter by book / min EV)
curl "https://puntersedge.online/api/v1/value/promos?min_ev=0.05" \
  -H "X-API-Key: YOUR_API_KEY"

Historical odds & price movements Pro+

Snapshots over a date range and detected price moves. Available on Pro, Pro Plus and Unlimited plans. Cost: 5 credits each.

# Historical h2h snapshots for the last 7 days
curl "https://puntersedge.online/api/v1/sports/afl/odds/history?market=h2h" \
  -H "X-API-Key: YOUR_API_KEY"

# Price movements in the last 24h (min 0.05 drift)
curl "https://puntersedge.online/api/v1/sports/afl/odds/movements?min_delta=0.05" \
  -H "X-API-Key: YOUR_API_KEY"

Next-to-go racing

Returns the next N races with runners and current fixed odds. Cost: 2 credits.

# All racing categories curl "https://puntersedge.online/api/v1/racing/next-to-go?num_races=5" \ -H "X-API-Key: YOUR_API_KEY" # Horse racing only curl "https://puntersedge.online/api/v1/racing/next-to-go?num_races=5&categories=horse" \ -H "X-API-Key: YOUR_API_KEY"
r = requests.get( "https://puntersedge.online/api/v1/racing/next-to-go", params={"num_races": 5, "categories": "horse"}, headers={"X-API-Key": "YOUR_API_KEY"} )

Check your usage

Returns credits used and remaining this month. Cost: 0 credits.

curl https://puntersedge.online/api/v1/usage \ -H "X-API-Key: YOUR_API_KEY"
Example response (not live data)
{ "plan": "free", "credits_limit": 500, "credits_used": 47, "credits_remaining": 453, "reset_date": "2026-07-01" }

Error responses

# Missing API key {"detail": "X-API-Key header required"} # 401 # Invalid API key {"detail": "Invalid API key"} # 401 # Rate limit exceeded {"detail": "Insufficient credits"} # 402 # Sport not found {"detail": "Sport key not found"} # 404
Get free API key → Swagger docs Coverage
This site contains wagering-related analysis and is intended for Australian users aged 18+. Gambling involves risk. Please gamble responsibly.