What's live, what's seasonal, and exactly which bookmakers are covered. Per-sport counts measured 6 Oct 2026 04:30 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).
Live odds pages, one per sport, no key needed: AFL · NRL · NBA · Cricket · Tennis · Rugby Union · EPL · A-League · embeddable widget.
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 6 Oct 2026 04:30 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 3.46. Only Rugby Union, NBA, NRL, NFL, College Football, AFLW, WNBA, Super League, NHL 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 live odds → | rugby_union | h2h, spreads, totals | 6 | 81 | LIVE |
| NBA live odds → | nba | h2h, spreads, totals | 6 | 34 | LIVE |
| NRL live odds → | nrl | h2h, spreads, totals | 6 | 8 | LIVE |
| NFL | nfl | h2h, spreads, totals | 5 | 46 | LIVE |
| Tennis ATP live odds → | tennis_atp | h2h | 4 | 2,115 (2,111 quoted) | LIVE |
| Tennis WTA | tennis_wta | h2h | 4 | 1,337 | LIVE |
| College Football | ncaaf | h2h, spreads, totals | 4 | 227 | LIVE |
| AFLW | aflw | h2h, spreads, totals | 4 | 18 | LIVE |
| WNBA | wnba | h2h, totals | 4 | 15 | LIVE |
| MLB | mlb | h2h, spreads, totals | 3 | 95 | LIVE |
| NRLW | nrlw | h2h, spreads, totals | 3 | 3 | LIVE |
| Super League | super_league | h2h, spreads | 3 | 1 | LIVE |
| Soccer (Other Competitions) | soccer_other | h2h | 2 | 915 (898 quoted) | LIVE |
| Basketball (Other Competitions) | basketball_other | h2h, spreads | 2 | 217 | LIVE |
| NHL | nhl | h2h, spreads, totals | 2 | 59 | LIVE |
| EPL live odds → | soccer_epl | h2h | 2 | 20 | LIVE |
| Cricket (Other Competitions) | cricket_other | h2h | 1 | 71 (68 quoted) | LIVE |
| MMA/UFC | mma | h2h | 1 | 52 | LIVE |
| Test Cricket live odds → | cricket_test | h2h | 1 | 1 | LIVE |
| AFL live odds → | afl | — | 0 | 0 | SEASONAL |
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.
Measured 6 Oct 2026 04:30 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-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.
All bookmakers are Australian-licensed fixed-odds bookmakers. Share is that book's percentage of the 1,614 Australian races served to customer keys over the trailing 7 days, measured 2026-10-06.
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-10-06 through the 10:00–21:00 AEST card, the median age of a connector's last successful read is 8–17s for fourteen of the fifteen served books, 100s for bet365. There is no single racing poll interval to quote: the slowest served book is 12x 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 | 8s | 6s |
| BetRight | 11s | 7s |
| Ladbrokes | 11s | 7s |
| PointsBet | 11s | 6s |
| TAB | 11s | 8s |
| BetDeluxe | 12s | 8s |
| BetGold | 12s | 8s |
| BoostBet | 12s | 8s |
| Neds | 12s | 8s |
| NextBet (formerly PlayUp) | 12s | 8s |
| TABtouch | 12s | 6s |
| Unibet | 12s | 8s |
| Palmerbet | 14s | 14s |
| Betr | 17s | 18s |
| bet365 | 100s | None |
| ladbrokes_uk | None | 17s |
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 84 paths as at 2026-10-06; 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/account | Your account: email, plan, password, billing and consent status | ||
| POST /v1/account/marketing | Turn promotional emails on or off for your account | ||
| POST /v1/account/password | Set or change your account password | ||
| GET / POST /v1/billing/overage | Overage: state, rate and ceiling | ||
| GET / POST /v1/billing/portal | Self-service billing portal link | ||
| GET / POST /v1/billing/upgrade-link | A signed link to your prorated upgrade page | ||
| 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, Platform, Scale and Enterprise | |
| 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 | ||
| GET / POST /v1/keys/team | List this account's keys | Business, Platform, Scale and Enterprise | |
| DELETE / PATCH /v1/keys/team/{key_id} | Revoke a team key | Business, Platform, Scale and Enterprise | |
| POST /v1/login | Log in with your email and password | ||
| 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 | ||
| POST /v1/logout/all | Sign out of every device | ||
| POST /v1/password/forgot | Email yourself a one-time password reset link | ||
| POST /v1/password/reset | Choose a new password from a reset link | ||
| GET /v1/uptime | Public uptime stats | ||
| GET /v1/usage | Check API usage | ||
| GET /v1/usage/analytics | Usage breakdown by endpoint | ||
| GET / POST /v1/widgets | List this account's widgets | Platform and Enterprise | |
| DELETE / GET / PATCH /v1/widgets/{widget_id} | One widget | Platform and Enterprise | |
| 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 | |
| Bulk data | |||
| GET /v1/bulk/datasets | Bulk dataset catalogue | Business, Platform, Scale and Enterprise | |
| GET /v1/bulk/{dataset}/{period} | Download one dataset file | 20 credits or 100 credits | Business, Platform, Scale and Enterprise |
| 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 | |
| POST /v1/racing/clv | Score bets against the closing line (CLV) | 5 credits | Plus, Business, Platform, Scale and Enterprise |
| GET /v1/racing/consensus | The market consensus on one race: margin-free probability per runner | 3 credits | |
| GET /v1/racing/events | Upcoming race list | 1 credit | |
| GET /v1/racing/form | Every runner in one race with its recent runs, from our own results | 3 credits | |
| GET /v1/racing/greyhounds/form | Greyhound form history for one dog, from our own results | 3 credits | |
| GET /v1/racing/greyhounds/stats | Greyhound record by track, distance, box or grade, from our own results | 3 credits | |
| POST /v1/racing/horses/backfill | Queue a batch of horses for paced form collection | 3 credits | Plus, Business, Platform, Scale and Enterprise |
| DELETE / GET /v1/racing/horses/backfill/{job_id} | Progress of a backfill job | Plus, Business, Platform, Scale and Enterprise | |
| GET /v1/racing/horses/backfill/{job_id}/results | Collect the form of horses this job has delivered | Plus, Business, Platform, Scale and Enterprise | |
| GET /v1/racing/horses/form | Thoroughbred form, career record and profile for one horse | 3 credits | |
| GET /v1/racing/horses/runs | One thoroughbred's runs in our own settled results | 3 credits | |
| GET /v1/racing/intelligence | Market intelligence on one race: consensus at fixed marks, time-anchored moves, breadth, first mover, signal | 3 credits | |
| GET /v1/racing/intelligence/scan | Scan the live window for runners that moved: time-anchored, breadth-gated | 5 credits | Plus, Business, Platform, Scale and Enterprise |
| GET /v1/racing/jockeys/stats | Jockey premiership leaderboards and lookup | 2 credits | |
| GET /v1/racing/markets | Every market on one race: win, place, Top 2/3/4 and exotic dividends | 2 credits | Plus, Business, Platform, Scale and Enterprise |
| GET /v1/racing/movers | Racing steamers and drifters | 3 credits | |
| GET /v1/racing/next-to-go | Next races to run | 2 credits or 3 credits or 4 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, Plus, Business, Platform, Scale and Enterprise |
| GET /v1/racing/closing-lines/coverage | What the closing-line archive actually holds | 1 credit | |
| GET /v1/racing/market-summary | The market's path per runner, stored at the jump: consensus at fixed marks, moves, breadth, first mover, signal | ||
| GET /v1/racing/price-paths | Bulk export of the permanent price-movement archive | 5 credits or 20 credits | Plus, Business, Platform, Scale and Enterprise |
| 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}/closing-lines | Closing price and line per bookmaker, with the consensus | 5 credits | Standard, Plus, Business, Platform, Scale and Enterprise |
| GET /v1/sports/{sport_key}/odds | Get odds by sport | ||
| GET /v1/sports/{sport_key}/odds/history | Historical odds snapshots | 5 credits | Standard, Plus, Business, Platform, Scale and Enterprise |
| GET /v1/sports/{sport_key}/odds/movements | Price movement feed | 5 credits | Standard, Plus, Business, Platform, Scale and Enterprise |
| Webhooks | |||
| GET / POST /v1/webhooks | List Webhooks | Plus, Business, Platform, Scale and Enterprise | |
| DELETE /v1/webhooks/{webhook_id} | Delete Webhook | ||
| GET /v1/webhooks/{webhook_id}/deliveries | List Webhook Deliveries | ||
| POST /v1/webhooks/{webhook_id}/test | Test Webhook | Plus, Business, Platform, Scale and Enterprise | |
Credit cost is deducted per successful call, read from the API's own check_and_deduct calls on 2026-10-06. 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 | Re-read from each bookmaker we poll directly, with a 2-minute pause between passes; pushed prices as each push arrives | Served from a rolling 6-hour window; 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 | 8–17s through the card for 14 of 16 served books | Racing polling is per book and it is not uniform. Measured over the trailing 7 days to 2026-10-06 through the 10:00–21:00 AEST card, the median age of a connector's last successful read is 8–17s for fourteen of the fifteen served books, 100s for bet365. There is no single racing poll interval to quote: the slowest served book is 12x 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.