What's live, what's seasonal, and exactly which bookmakers are covered. Per-sport counts measured 16 Sep 2026 03:00 UTC, recomputed every 30 minutes.
This page is the catalogue — which sports and bookmakers exist. For a dated measurement of how much of the Australian card each bookmaker actually quotes, recomputed every 30 minutes with the SQL published beside it, see the live coverage report (JSON).
Status: Live = at least one bookmaker quoted the sport in the measured window, Seasonal = the key is served but nothing is quoting it right now. Both are derived from the measurement, not set by hand.
The Bookmakers column counts the distinct bookmakers that quoted the sport at all. It is not how many quote a single match — no book covers every fixture, so per-event depth is lower. Measured 16 Sep 2026 03:00 UTC: Rugby Union had 6 books across the sport, but no single Rugby Union fixture carried more than 6 and the average quoted fixture carried 2.77. Only Rugby Union, NBA, NRL, AFL, Tennis ATP, College Football, AFLW, Super League, NRLW and EPL carry more than one book on at least 50% of their quoted fixtures.
| Sport | API Key | Markets | Bookmakers | Fixtures in window | Status |
|---|---|---|---|---|---|
| Rugby Union | rugby_union | h2h, spreads, totals | 6 | 97 | LIVE |
| NBA | nba | h2h, spreads, totals | 6 | 21 | LIVE |
| NRL | nrl | h2h, spreads, totals | 6 | 14 | LIVE |
| AFL | afl | h2h, spreads, totals | 6 | 12 | LIVE |
| NFL | nfl | h2h, spreads, totals | 5 | 224 | LIVE |
| Tennis ATP | tennis_atp | h2h | 4 | 2,500 (2,454 quoted) | LIVE |
| Tennis WTA | tennis_wta | h2h | 4 | 1,944 (1,941 quoted) | LIVE |
| WNBA | wnba | h2h | 4 | 20 | LIVE |
| MLB | mlb | h2h, totals | 3 | 282 | LIVE |
| College Football | ncaaf | h2h, spreads, totals | 3 | 244 | LIVE |
| AFLW | aflw | h2h, spreads, totals | 3 | 36 | LIVE |
| Super League | super_league | h2h, spreads | 3 | 10 | LIVE |
| NRLW | nrlw | h2h, spreads, totals | 3 | 8 | LIVE |
| Soccer (Other Competitions) | soccer_other | h2h | 2 | 878 (827 quoted) | LIVE |
| Basketball (Other Competitions) | basketball_other | h2h, spreads | 2 | 209 | LIVE |
| EPL | soccer_epl | h2h | 2 | 30 | LIVE |
| NHL | nhl | h2h, spreads, totals | 2 | 21 | LIVE |
| Cricket (Other Competitions) | cricket_other | h2h | 1 | 73 (72 quoted) | LIVE |
| MMA/UFC | mma | h2h | 1 | 44 | LIVE |
| Test Cricket | cricket_test | h2h | 1 | 4 | LIVE |
Measured 16 Sep 2026 03:00 UTC, recomputed every 30 minutes. Window: fixtures that started within the last 7 days or are still to come, excluding bookmakers withheld from customer responses. Predicate you can re-run: SELECT e.sport_key, count(DISTINCT m.bookmaker_key) FROM events e JOIN markets m ON m.event_id = e.id WHERE e.commence_time >= (now() AT TIME ZONE 'utc') - interval '7 days' AND m.bookmaker_key NOT IN ('betfair_ex_au','pinnacle') GROUP BY 1
Measured 2026-09-16 over a trailing 7-day window, 14 Australian bookmakers quoted racing prices a customer key can read. 15 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.
All bookmakers are Australian-licensed fixed-odds bookmakers. Share is that book's percentage of the 1,542 Australian races served to customer keys over the trailing 7 days, measured 2026-09-16.
Bookmaker keys are passed in the bookmakers query parameter. Omit to get all bookmakers.
Racing endpoint: GET /v1/racing/next-to-go — returns next N races with runners and current odds. Racing polling is per book and it is not uniform. Measured over the trailing 7 days to 2026-09-16 through the 10:00–21:00 AEST card, the median age of a connector's last successful read is 9–17s for fourteen of the fourteen served books. There is no single racing poll interval to quote: the slowest served book is 2x the fastest, so any blanket figure is wrong for a named book. Every quote carries its own age_seconds — that is the number to gate on. Per-book figures are published on the coverage report.
| Bookmaker | Through the card (p50) | Overnight (p50) |
|---|---|---|
| Sportsbet | 9s | 6s |
| BetRight | 12s | 7s |
| Ladbrokes | 12s | 7s |
| PointsBet | 12s | 6s |
| TAB | 12s | 7s |
| Unibet | 13s | 8s |
| BetDeluxe | 14s | 8s |
| BetGold | 14s | 8s |
| Neds | 14s | 8s |
| Palmerbet | 14s | 15s |
| NextBet (formerly PlayUp) | 14s | 8s |
| TABtouch | 14s | 6s |
| BoostBet | 15s | 8s |
| Betr | 17s | 18s |
connector_poll_age over the trailing 7 days, split at 10:00-21:00 AEST (the Australian card) against the rest of the day. This is how old the connector's last successful READ of the book was, not how old the prices are; capture is change-only, so they are different statistics.
All endpoints are under https://puntersedge.online/api and authenticate with the X-API-Key header. Full interactive reference: Swagger docs. The API publishes 60 paths as at 2026-09-16; the schema at https://api.puntersedge.online/openapi.json is the list, and it changes — it went from 40 to 42 on 2026-08-18.
| Endpoint | Purpose | Cost | Plans |
|---|---|---|---|
| Account | |||
| GET /v1/billing/portal | Self-service billing portal link | ||
| GET /v1/health | Connector health status | ||
| POST /v1/keys | Create a new API key (admin only) | ||
| GET /v1/keys/info | API key metadata | ||
| POST /v1/keys/ip-whitelist | Set IP whitelist for your key | Business, Unlimited, Enterprise and platform | |
| POST /v1/keys/resend | Email yourself a fresh API key | ||
| POST /v1/keys/reveal | Issue a fresh key and return it (signed-in console only) | ||
| POST /v1/keys/rotate | Rotate your API key | ||
| POST /v1/login/exchange | Redeem a login link for a console session | ||
| POST /v1/login/request | Email yourself a one-time login link for the key console | ||
| POST /v1/logout | End a console session | ||
| GET /v1/uptime | Public uptime stats | ||
| GET /v1/usage | Check API usage | ||
| GET /v1/usage/analytics | Usage breakdown by endpoint | ||
| Arb & Value | |||
| GET /v1/arb/best-prices | Best prices comparison | 2 credits | |
| GET /v1/arb/lines | Spreads/totals line arb | 3 credits | |
| GET /v1/arb/sports | Sports arb scanner | 3 credits | |
| Best Odds | |||
| GET /v1/best-odds/{sport_key} | Best price per selection | 3 credits | |
| Data Quality | |||
| GET /v1/data-quality/audit/latest | Latest bookmaker audits | 1 credit | |
| POST /v1/data-quality/audit/run | Run bookmaker audit | ||
| GET /v1/data-quality/audit/{run_id}/results | Audit result detail | ||
| GET /v1/data-quality/summary | Data quality summary | 1 credit | |
| Health | |||
| GET /v1/health/connectors | Per-connector freshness | 1 credit | |
| Racing | |||
| GET /v1/racing/acceptances | Full-day AU thoroughbred acceptance card: every meeting, race and runner | 2 credits | |
| GET /v1/racing/best-odds | Best racing price per runner across books | 3 credits | |
| GET /v1/racing/changes | Races and prices that changed since a timestamp | 2 credits | |
| GET /v1/racing/events | Upcoming race list | 1 credit | |
| GET /v1/racing/greyhounds/form | Greyhound form history for one dog | 3 credits | |
| GET /v1/racing/greyhounds/stats | Greyhound record by track, distance, box or grade | 3 credits | |
| POST /v1/racing/horses/backfill | Queue a batch of horses for paced form collection | 3 credits | Business, Unlimited, Enterprise, plus and platform |
| DELETE / GET /v1/racing/horses/backfill/{job_id} | Progress of a backfill job | Business, Unlimited, Enterprise, plus and platform | |
| GET /v1/racing/horses/backfill/{job_id}/results | Collect the form of horses this job has delivered | Business, Unlimited, Enterprise, plus and platform | |
| GET /v1/racing/horses/form | Thoroughbred form, career record and profile for one horse | 3 credits | |
| GET /v1/racing/jockeys/stats | Jockey premiership leaderboards and lookup | 2 credits | |
| GET /v1/racing/movers | Racing steamers and drifters | 3 credits | |
| GET /v1/racing/next-to-go | Next races to run | 2 credits | |
| GET /v1/racing/price-history | Racing price history / closing line | 5 credits | |
| GET /v1/racing/results | Settled race results | 2 credits | |
| GET /v1/racing/results/coverage | What the results field coverage actually is | 1 credit | |
| GET /v1/racing/track-conditions | Track condition, weather and rail: current state and today's change log | 1 credit | |
| GET /v1/racing/trainers/stats | Trainer premiership leaderboards and lookup | 2 credits | |
| GET /v1/racing/venues | Canonical venue directory | 1 credit | |
| Racing Archive | |||
| GET /v1/racing/closing-lines | Permanent closing-line and result archive | 5 credits or 20 credits | Standard, Business, Unlimited, Enterprise, plus and platform |
| GET /v1/racing/closing-lines/coverage | What the closing-line archive actually holds | 1 credit | Standard, Business, Unlimited, Enterprise, plus and platform |
| GET /v1/racing/price-paths | Bulk export of the permanent price-movement archive | 5 credits or 20 credits | Standard, Business, Unlimited, Enterprise, plus and platform |
| Referrals | |||
| GET / POST /v1/referral | Your referral link and earnings | ||
| Sandbox (no key) | |||
| GET /v1/demo/best-odds | Sample best-odds + arb detection (no key required) | ||
| GET /v1/demo/book-sport | Live book+sport snapshot (no key; powers SEO page differentiation) | ||
| GET /v1/demo/racing/next-to-go | Sample next-to-go races (no key required) | ||
| Signup | |||
| POST /v1/signup | Create API key or start paid checkout | ||
| Sports | |||
| GET /v1/sports | List available sports | 1 credit | |
| GET /v1/sports/{sport_key}/odds | Get odds by sport | ||
| GET /v1/sports/{sport_key}/odds/history | Historical odds snapshots | 5 credits | Standard, Business, Unlimited, Enterprise, plus and platform |
| GET /v1/sports/{sport_key}/odds/movements | Price movement feed | 5 credits | Standard, Business, Unlimited, Enterprise, plus and platform |
| Webhooks | |||
| GET / POST /v1/webhooks | List Webhooks | Standard, Business, Unlimited, Enterprise, plus and platform | |
| DELETE /v1/webhooks/{webhook_id} | Delete Webhook | ||
| GET /v1/webhooks/{webhook_id}/deliveries | List Webhook Deliveries | ||
| POST /v1/webhooks/{webhook_id}/test | Test Webhook | Standard, Business, Unlimited, Enterprise, plus and platform | |
Credit cost is deducted per successful call, read from the API's own check_and_deduct calls on 2026-09-16. An empty Cost cell means no constant cost is declared for that path — either the call bills nothing or it is priced per request, as /v1/sports/{sport_key}/odds is, which charges per requested market type. An empty Plans cell means no plan-gate constant names that path; it is not a statement that every plan may call it, and a few administrative paths enforce their own restriction inside the handler. The authoritative, machine-readable list is the OpenAPI schema.
| Sports odds | Every quote carries its own age_seconds | Every quote carries its own age_seconds |
| Best-odds comparison | Derived on request from latest cached odds | Same as sports odds freshness |
| Arb & value signals | Computed on request from the latest cached bookmaker prices | Verify legs before staking; prices move |
| Racing next-to-go | 9–17s through the card for 14 of 14 served books | Racing polling is per book and it is not uniform. Measured over the trailing 7 days to 2026-09-16 through the 10:00–21:00 AEST card, the median age of a connector's last successful read is 9–17s for fourteen of the fourteen served books. There is no single racing poll interval to quote: the slowest served book is 2x the fastest, so any blanket figure is wrong for a named book. Every quote carries its own age_seconds — that is the number to gate on. |
| Sport list | On-demand | Updated when new sports are added |
This is not real-time tick data. Refresh rates depend on upstream bookmaker API availability and rate limits. Do not rely on this data for high-frequency or latency-sensitive trading.