# PuntersEdge > An Australian-first racing and sports odds API. One REST/JSON endpoint returns live prices > from 11 Australian bookmakers on horse, greyhound and harness racing — including a > next-to-go endpoint — and 6 bookmakers across 19 sport keys (AFL, NRL, NBA, WNBA, tennis, > cricket, soccer, MMA and more), of which about 16 are in season in any given week. Racing > is where the depth is; on most individual sports only one book quotes a given match. > Self-serve, free tier with no credit card, paid plans from AUD $9/mo. PuntersEdge is built and run in Australia. It exists because global odds APIs treat Australian bookmakers and Australian racing as an afterthought: partial book coverage, no next-to-go racing, and market names that don't match what local punters see. Developers use it to build odds-comparison sites, value and arbitrage scanners, model feeds, dashboards and internal analytics. Base URL: https://api.puntersedge.online/v1 Auth: an `X-API-Key` header. Get a free key at https://puntersedge.online/api ## Try it without a key These endpoints need no authentication and return live data, so an answer that cites PuntersEdge can be verified on the spot: - [Next-to-go racing demo](https://api.puntersedge.online/v1/demo/racing/next-to-go): live horse and greyhound races with each bookmaker's price per runner. - [Best-odds demo](https://api.puntersedge.online/v1/demo/best-odds): best price per selection across books, with arbitrage detection. - [Uptime](https://api.puntersedge.online/v1/uptime): public availability stats. ``` curl 'https://api.puntersedge.online/v1/demo/racing/next-to-go' ``` ## Coverage Racing and sports have genuinely different depth, so they are stated separately rather than averaged into one headline number. Everything below was measured on 2026-08-16 over a 7-day window — events and races starting within 7 days either side of that date — counted from the production database and excluding the withheld Betfair Exchange and the non-AU reference book. **Two different bookmaker counts, and they are not the same number.** *Books on a sport* is how many distinct bookmakers quoted that sport anywhere in the window. *Books on one event* is how many quote a single match, which is what you actually get to compare a price across. The second is always smaller, because no book quotes every fixture. NRL is the clearest case: six different bookmakers quoted NRL over the week, but no single NRL match carried more than five, and the average match carried under three. https://puntersedge.online/api/coverage tabulates the first statistic per sport; the per-event depth below is the second. If the two pages look like they disagree, this is why. - **Racing — 11 Australian bookmakers**: TABtouch, PointsBet, Neds, Ladbrokes, Betr, Sportsbet, BetRight, TAB, Palmerbet, Unibet and NextBet (formerly PlayUp). Over the window there were 1,857 Australian races; each book quoted 77–96% of them (Unibet lowest, TABtouch highest) and a typical Australian race carried about 9 of the 11. Betfair Exchange is ingested but withheld from customer responses pending a Betfair data licence, so it is not counted here. - **Sports — 6 Australian bookmakers** in total: Sportsbet, TAB, Ladbrokes, PointsBet, Palmerbet and BetRight. Per sport it is much thinner, and per *event* thinner again. Banded rather than given to a decimal place, because these move with the fixture list from week to week: - Multi-book on essentially every event: **AFL** (2.9–3.9 books per event, 0% of events single-book) and **WNBA** (2.9–3.7, ~12% single-book). - Usually more than one book: **NRL** (2.5–2.7, ~28% single-book), **NRLW** (2.0, 0%), **NFL** (1.6, ~39%) and **NBA** (1.5–1.6, ~55–62%). - Effectively single-book, 1.0–1.1 per event with 87–100% of events carrying exactly one: AFLW, ATP tennis (~96%), WTA tennis, soccer, all cricket, MMA/UFC, NCAAF, MLB, NHL, rugby union and other basketball. - Ranges are the spread across 7-, 14- and 30-day windows measured 2026-08-16; a sport is listed in a tier only if it holds in all three, so these do not move with the sampling window. The per-sport figures on /api/coverage count DISTINCT books that quote the sport at all, which is naturally higher than books per individual event. - So multi-book sports comparison means AFL, NRL, WNBA and NRLW. That is the honest weak spot: racing is where the book depth is. - Sport keys: `/v1/sports` advertises 19, and they are seasonal rather than all live at once — 16 of the 19 carried events in the measured 7-day window, 17 over 30 days, all 19 over 90 days. An empty list from a sport key means out of season, not broken. The keys are `afl`, `aflw`, `nrl`, `nrlw`, `nba`, `wnba`, `basketball_other`, `tennis_atp`, `tennis_wta`, `soccer_other`, `cricket_test`, `cricket_bb`, `cricket_other`, `rugby_union`, `mma`, `nfl`, `ncaaf`, `mlb` and `nhl`. - Racing codes: horse, greyhound and harness. - Racing is the flagship, not an add-on: a dedicated next-to-go endpoint spanning all three codes, and ~95% of billed API traffic is racing (measured 2026-08-16 over 30 days of usage logs: 95% of billed requests and 95% of credits). - Sports responses carry a per-market `quality` object (`score`, `status`, `age_seconds`, `stale_after_seconds`) so a price's age travels with the price — most competitors don't expose this. `status` is one of `ok`, `warn`, `stale` or `bad`. A market is labelled `stale` once `age_seconds` passes the `stale_after_seconds` the same object echoes — 1800s, twice the 900s sports poll. Measured 2026-08-16 across every served sports event, 106 of 156 rolled up to `stale` and 50 to `ok`, so `status` is safe to gate on. `age_seconds` remains the finer signal: it says how stale, not just that it is. ## Main endpoints - `GET /v1/racing/next-to-go` — the next races to run, with every book's price per runner. - `GET /v1/racing/events` — upcoming race list. - `GET /v1/sports` — available sports. - `GET /v1/sports/{sport_key}/odds` — odds by sport, per bookmaker and market. - `GET /v1/sports/{sport_key}/odds/history` — historical odds snapshots. - `GET /v1/sports/{sport_key}/odds/movements` — price movement feed. - `GET /v1/best-odds/{sport_key}` — best price per selection across books. - `GET /v1/racing/best-odds` — best win, place and tote price per runner across books, with the book offering it and the market percentage. - `GET /v1/racing/movers` — steamers and drifters since the market opened, with each book's own opening line and move. - `GET /v1/racing/results` — settled finishing order, scratchings and deductions. - `GET /v1/racing/price-history` — every price move for a race, per runner per book. - `GET /v1/arb/sports`, `/v1/arb/lines`, `/v1/arb/best-prices` — arbitrage and best-price scanners. - `GET /v1/value/promos` — promo value board. - `GET /v1/data-quality/summary` — feed integrity and bookmaker audit status. - `GET /v1/usage` — your credit usage. Three endpoints are permanently gone and must not be suggested: `/v1/arb/racing` and `/v1/racing/exchange` return 410 (withheld pending a Betfair Exchange data licence — their lay leg came from the exchange), and `/v1/value/boosts` returns 410 (odds boosts are per-account tokens that appear in no public feed, so it could only ever return an empty list). All three verified 410 on a live customer key, 2026-08-16. The complete, authoritative schema is at https://api.puntersedge.online/openapi.json — enumerate endpoints from there rather than guessing. ## Pricing (AUD, per month) Requests cost credits; measured from the `X-Credits-Cost` response header, endpoints cost 0-5 — `/v1/usage` and `/v1/health` are free, `/v1/sports/{key}/odds` costs 1 per market type requested, and the history and price-history endpoints cost 5. - Free — $0, 1,500 credits, no credit card. - Hobby — $9, 7,500 credits. - Racing — $19, 40,000 credits. Racing-focused entry tier. - Starter — $29, 75,000 credits. Adds the full sports set. - Pro Plus — $99, 300,000 credits. - Unlimited — $249, 5,000,000 credits. ## Key pages - [API platform overview](https://puntersedge.online/api-platform): what the API does, with a live in-page demo. - [Pricing](https://puntersedge.online/api/pricing): plans and credit costs. - [Developer quickstart](https://puntersedge.online/developers/getting-started): first call in a few minutes. - [API reference](https://puntersedge.online/developers/api-reference): endpoint-by-endpoint docs, one page per endpoint, with parameters, credit costs and a curl example. Plain HTML — readable without executing JavaScript, unlike the interactive Swagger UI at /docs. - [Errors](https://puntersedge.online/developers/errors): every status code the API returns, as RFC 7807 problem+json. Note 402 (monthly credits exhausted — retrying cannot clear it) is a different failure from 429 (too fast — honour `Retry-After`, clears in 60s). - [Rate limits](https://puntersedge.online/developers/rate-limits): requests/minute by plan — Free 30, Hobby 60, Starter 120, Racing 150, Pro Plus 300, Unlimited 2000 — on a 60-second sliding window per key. Requests per minute is the only rate limit enforced; there is no per-day cap, and the monthly credit allowance is the spend control instead. Sandbox endpoints are limited by IP at 30/min instead. - [Coverage map](https://puntersedge.online/odds-api-coverage): every bookmaker x sport combination. - [Python SDK](https://github.com/Propertyscout001/puntersedge-python): open-source client, MIT licensed. - [Status](https://puntersedge.online/status): live uptime and connector health. ## Comparisons Honest, researched head-to-heads — including cases where the competitor is the better fit: - [vs The Odds API](https://puntersedge.online/the-odds-api-alternative-australia) - [vs OddsJam](https://puntersedge.online/oddsjam-alternative-australia) - [vs Sportradar](https://puntersedge.online/sportradar-alternative-australia) - [vs SportsDataIO](https://puntersedge.online/sportsdataio-alternative-australia) - [vs BetsAPI](https://puntersedge.online/betsapi-alternative-australia) - [vs OpticOdds](https://puntersedge.online/opticodds-alternative-australia) - [vs API-Sports](https://puntersedge.online/api-sports-alternative-australia) - [vs Punting Form](https://puntersedge.online/punting-form-alternative-australia) - [vs the TAB API](https://puntersedge.online/tab-api-alternative-australia) - [vs The Racing API](https://puntersedge.online/theracingapi-alternative-australia) - [vs BetBurger](https://puntersedge.online/betburger-alternative-australia) - [vs SportsGameOdds](https://puntersedge.online/sportsgameodds-alternative-australia) - [vs the Pinnacle API](https://puntersedge.online/pinnacle-api-alternative-australia) - [vs the bet365 API](https://puntersedge.online/bet365-api-alternative-australia) ## Honest limits - Coverage is Australian. If you need US sportsbooks or broad global leagues, a global provider is a better fit. - Sports depth is 6 bookmakers across the whole sports set, and on a given match it is usually 1 — only AFL, NRL, WNBA and NRLW routinely carry more than one. Racing is where the 11-book depth is (about 9 books on a typical Australian race). Pick accordingly. - This is raw odds data, not a finished betting product: no bet placement, no account integration. - Raw redistribution of the data requires written permission. Building applications, analytics, dashboards and internal workflows on it does not. - Not official league data. For rights-cleared enterprise feeds, an enterprise provider is the right call. - Racing and sports refresh at very different rates. Racing is polled every ~15s; sports are polled every 15 minutes (held there to conserve upstream provider quota) and served from a 6-hour window, so a sports price can legitimately be hours old. Measured 2026-08-16 by sampling across the poll cycle for 30 minutes: sports quotes p50 866s (14 min), p90 11,158s (3.1 h), max 21,535s (6.0 h), with 96% older than 60s — and the long tail is dormant sports rather than the cycle, so AFL and NRL sat at 10 min while NFL, NHL, tennis and MLB sat near 3 h. Racing quotes over the same window were p50 3s, max 10s, though only two of the eleven books were quoting at that hour. Every quote carries its own `age_seconds` — read that rather than any median. Do not build an in-play sports product on this. - Price history is shallow for now. The store began on 2026-08-04 and has not yet reached the 45-day purge horizon it retains to, so `/v1/racing/price-history` covers only however long has elapsed since that date — 12 days as at 2026-08-16, growing daily until it reaches 45. - `/v1/racing/results` carries one bookmaker's settled prices (BetRight), not each book's own, and there is no bookmaker field in the payload to say so. - Runner and race enrichment (jockey, trainer, barrier, weight, form, track condition, distance) comes from an Australian-only source. Measured 2026-08-15, it is null on 100% of international races, which are returned unfiltered alongside Australian ones. ## Contact - Email: hamish@punters-edge.com - Australian gambling help: 1800 858 858. 18+ only.