# PuntersEdge > An Australian-first odds API: Australian and New Zealand racing, and Australian sports. > One REST/JSON endpoint returns live prices from 15 Australian bookmakers on horse, greyhound and harness racing — including a next-to-go endpoint — and 6 bookmakers across 20 sport keys (AFL, NRL, NBA, NFL, MLB, EPL, tennis, cricket, MMA and more), of which 19 carried a quote from a served bookmaker in the trailing 7 days when this file was served. 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. Racing covers Australia — thoroughbred, harness and greyhound — and New Zealand — thoroughbred and harness — in full, through the same endpoints, split with `country=AU` or `country=NZ`. There are no New Zealand greyhounds in the feed. Sports are Australian. British and Irish racing has a panel of its own: Ladbrokes / Coral, William Hill and Betway, with the Australian books that quote it — 3 to 4 bookmakers on each of the 35 British and Irish races open when this file was served (`country=GB,IE`). Every other country in the store sits at a median of one book. Base URL: https://api.puntersedge.online/v1 Auth: an `X-API-Key` header. Get a free key at https://puntersedge.online/api Official TypeScript/JavaScript client: `npm install puntersedge`. No dependencies, ESM and CommonJS, and every response type generated from the OpenAPI schema below rather than hand-written, so the types cannot drift from the API. One error class per status code (402 credits exhausted, 429 rate limited, 422 malformed — three different responses), the credit balance parsed from the response headers, and webhook signature verification that runs unchanged on Node 18+, Deno, Bun, Cloudflare Workers and in the browser. Nothing is retried silently, because a hidden retry can return a price recorded before a move. Package: https://www.npmjs.com/package/puntersedge Docs: https://puntersedge.online/developers/typescript Official Python client: `pip install puntersedge` wraps the endpoints below and ships `puntersedge-arb`, a CLI arbitrage scanner and stake sizer. Since 0.3.0 it scans racing as well as sports: `puntersedge-arb scan --racing --no-sports --categories horse,greyhound` reads /v1/racing/best-odds and backs one runner per leg across the whole field, with no exchange account involved. There is no racing back/lay support: /v1/arb/racing returns 410. Cross-book racing arbs are rare, so most scans find nothing and print why they refused. It holds no bookmaker credentials and places no bets. Optional — the API is plain REST. Source: https://github.com/Propertyscout001/puntersedge-python Two machine-readable companions, both HTTP-checked before publication: - [Full reference in one fetch](https://puntersedge.online/llms-full.txt) — the complete endpoint list enumerated from the live OpenAPI schema, request/response shapes, credit cost per endpoint, the pricing ladder and measured coverage, with no further crawl needed. - [Live coverage measurement](https://puntersedge.online/coverage-report.json) — per-bookmaker share of Australian races, recomputed every 30 minutes, carrying its own `measured_at` and the SQL it ran. The coverage figures in this file are READ from it when this file is served rather than typed in, so the two cannot disagree; if they ever do, it is authoritative and this file is broken. Human version: https://puntersedge.online/coverage-report ## 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. Nothing below is a frozen figure. The racing numbers are read from https://puntersedge.online/coverage-report.json and the sports numbers from the measured-facts layer the rest of this site reads, both re-read when this file is served and both excluding the withheld Betfair Exchange and the non-AU reference book. Racing is a trailing 7-day window on race start times. The sports window is stated once, in the first line of the sports block itself, rather than described here as well — describing it twice is exactly how this file came to characterise one window while publishing figures measured over another. Each block carries its own measurement timestamp. **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 fixture* is how many quote a single match, which is what you actually get to compare a price across. The second can never be larger than the first, and it is smaller wherever a book skips a fixture: more bookmakers quote NRL across the week than quote any one NRL match. Where every book that quotes a sport quotes all of its fixtures, the two are equal. https://puntersedge.online/api/coverage tabulates the first statistic per sport; the per-fixture depth below is the second. If the two pages look like they disagree, this is why. - **Racing — 15 Australian bookmakers**, display name then the key the API uses: Sportsbet (`sportsbet`), BetDeluxe (`betdeluxe`), BetGold (`betgold`), BoostBet (`boostbet`), TAB (`tab`), BetRight (`betright`), PointsBet (`pointsbetau`), TABtouch (`tabtouch`), Palmerbet (`palmerbet`), Betr (`betr_au`), Unibet (`unibet`), NextBet (formerly PlayUp) (`playup`), Ladbrokes (`ladbrokes_au`), Neds (`neds`) and bet365 (`bet365`). Pass the backticked KEY to the `bookmakers` filter. Matching is case-insensitive, so `Sportsbet` resolves to `sportsbet` — but a display name that DIFFERS from its key does not resolve at all, so `PointsBet`, `Betr`, `NextBet (formerly PlayUp)` and `Ladbrokes` are all rejected. An unrecognised key returns a free 422 listing the valid ones. Those keys do not match their display name — `pointsbetau`, `betr_au`, `playup` and `ladbrokes_au` — and a plain `pointsbet` is not a valid AU key. Responses identify a book by its key; sports responses also carry a `title`, but that is derived from the key (`pointsbetau` renders as "Pointsbetau"), so never read it as the brand name. Read the live measurement rather than a frozen one: as at 2026-10-06T03:52:11Z, 1,607 Australian races over the trailing 7 days were quoted by at least one served book; each book quoted 1.2-96.4% of them (bet365 lowest, Sportsbet highest); the MEDIAN race carried 14 of the 15 served books and the mean was 13.22. Every one of those figures is read from https://puntersedge.online/coverage-report.json when this file is served, recomputed there every 30 minutes — quote that URL, not this sentence. Racing covers New Zealand as well: the same query with `country = 'NZ'` measured 96 NZ races over the same window at a median of 12 books, across 12 books that quote NZ. Betfair Exchange is ingested but withheld from customer responses pending a Betfair data licence, so it is not counted here. - **Sports — 6 Australian bookmakers** quoting in the last 24 hours: BetRight (`betright`), Ladbrokes (`ladbrokes_au`), Palmerbet (`palmerbet`), PointsBet (`pointsbetau`), Sportsbet (`sportsbet`) and TAB (`tab`). Offshore reference books also served on US sports, not counted as Australian: Bovada (`bovada`) and FanDuel (`fanduel`). Per sport it is much thinner, and per *event* thinner again: - Measured 6 Oct 2026 03:52 UTC, counting DISTINCT customer-served `bookmaker_key` per fixture over fixtures that started within the last 7 days or are still to come, excluding bookmakers withheld from customer responses. The denominator is fixtures a served book actually quoted, so a fixture nobody quoted is not averaged in. The tier sentence below is read from these same rows and the same window, so the decimals and the tier list cannot disagree. - NFL: 4.20 books on a quoted fixture across 46 quoted fixtures, 0.0% single-book - NBA: 4.09 books on a quoted fixture across 34 quoted fixtures, 5.9% single-book - AFLW: 4.00 books on a quoted fixture across 18 quoted fixtures, 0.0% single-book - Rugby Union: 3.46 books on a quoted fixture across 81 quoted fixtures, 23.5% single-book - WNBA: 3.00 books on a quoted fixture across 15 quoted fixtures, 33.3% single-book - Super League: 3.00 books on a quoted fixture across 1 quoted fixtures, 0.0% single-book - College Football: 2.26 books on a quoted fixture across 227 quoted fixtures, 46.3% single-book - NRL: 2.12 books on a quoted fixture across 8 quoted fixtures, 50.0% single-book - EPL: 2.00 books on a quoted fixture across 20 quoted fixtures, 0.0% single-book - NHL: 1.88 books on a quoted fixture across 59 quoted fixtures, 11.9% single-book - NRLW: 1.67 books on a quoted fixture across 3 quoted fixtures, 66.7% single-book - Tennis ATP: 1.66 books on a quoted fixture across 2,120 quoted fixtures, 59.4% single-book - Tennis WTA: 1.66 books on a quoted fixture across 1,342 quoted fixtures, 60.2% single-book - MLB: 1.44 books on a quoted fixture across 94 quoted fixtures, 77.7% single-book - Soccer (Other Competitions): 1.19 books on a quoted fixture across 899 quoted fixtures, 81.4% single-book - Basketball (Other Competitions): 1.05 books on a quoted fixture across 216 quoted fixtures, 94.9% single-book - Cricket (Other Competitions): 1.00 books on a quoted fixture across 69 quoted fixtures, 100.0% single-book - MMA/UFC: 1.00 books on a quoted fixture across 52 quoted fixtures, 100.0% single-book - Test Cricket: 1.00 books on a quoted fixture across 1 quoted fixtures, 100.0% single-book - No served bookmaker quoted a fixture in the window, so no figure is stated: AFL. - These move week to week with a short, seasonal fixture list, so read the TIER, not the decimal. Measured 2026-10-06 over the trailing 7 days, Rugby Union, NBA, NRL, NFL, College Football, AFLW, WNBA, Super League, NHL and EPL carry more than one customer-served bookmaker on the majority of fixtures; on Tennis ATP, Tennis WTA, MLB, NRLW, Soccer (Other Competitions), Basketball (Other Competitions), Cricket (Other Competitions), MMA/UFC and Test Cricket you are usually looking at a single price. The rule is one line — a sport is multi_book when at least 50% of its quoted fixtures in the window carried two or more customer-served bookmakers, single_book when it is below that, seasonal when no served book quoted any fixture, and not_queryable when the API 404s the key — so a sport is in exactly one of those lists. A multi-window stability check is not available on this data: the `events` table holds no fixture earlier than 2026-09-29T04:00:00Z, so a 14- or 30-day window returns exactly the same rows as this 7-day one. An earlier version of this section published fixed bands and claimed they "do not move with the sampling window"; that claim was withdrawn on 2026-08-18, when every multi-book sport measured above its published band two days after publication. - The per-sport figures on /api/coverage count DISTINCT books that quote the sport at all, which is naturally higher than books per individual fixture. - So multi-book sports comparison means Rugby Union, NBA, NRL, NFL, College Football, AFLW, WNBA, Super League, NHL and EPL — the sports where at least 50% of quoted fixtures carried two or more customer-served bookmakers. That is the honest weak spot: racing is where the book depth is. - Sport keys: 20 sport keys are queryable — `active = true` in the `sports` table, the same flag the API's own key validation enforces, measured 2026-10-06; the catalogue holds 23 rows, and a key that is not queryable returns 404. An empty array from a sport key means out of season, not broken. There is no `horse-racing` sport key: racing has its own endpoints. The keys are `rugby_union`, `nba`, `nrl`, `nfl`, `tennis_atp`, `tennis_wta`, `ncaaf`, `aflw`, `wnba`, `mlb`, `nrlw`, `super_league`, `soccer_other`, `basketball_other`, `nhl`, `soccer_epl`, `cricket_other`, `mma`, `cricket_test` and `afl`. 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. - 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 96.8% of billed API calls and 97.0% of credits are racing endpoints — measured from `usage_logs` over the trailing 30 days when this file was served (2026-10-06T03:49:51Z), not typed in. - Sports responses carry a per-market `quality` object (`score`, `status`, `age_seconds`, `stale_after_seconds`) so a price's age travels with the price. `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). `age_seconds` remains the finer signal: it says how stale, not just that it is. ## Main endpoints Every endpoint explained in plain English — what it returns, when to use it, what it costs and which plan has it: https://puntersedge.online/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/racing/closing-lines` — the permanent closing-line and result archive: opening and closing price per runner per book over any date range, plus the finishing position where one is known. Never purged, unlike `/v1/racing/price-history`, which reads the live 45-day snapshot store. Plan-gated, and **5 credits for `format=json`, 20 for `format=csv`** — see https://puntersedge.online/llms-full.txt for the gate. - `GET /v1/racing/closing-lines/coverage` — what that archive actually holds, computed from the table at request time. 1 credit. - `POST /v1/racing/clv` — score up to 200 bets against the closing line: per bet the named book's close or the market's best/median, CLV in percent, beat-the-close, the result and flat-stake P&L; across the list average and median CLV, beat rate, win rate and ROI. Plus and above. 5 credits. - `GET /v1/racing/markets` — every market on one race: win, place and Same Race Multi Top 2, Top 3 and Top 4 per bookmaker, each book's market percentage (Σ 1/price), the best price per runner in each market, and the settled exotic dividends once the race has been run. Top 2/3/4 are quoted by sportsbet, ladbrokes_au, neds and pointsbetau only. A race that has jumped is answered from our own minute-by-minute capture of the last price each book showed. Plus and above. 2 credits. - `GET /v1/bulk/datasets` and `GET /v1/bulk/{dataset}/{period}` — pre-built dataset files: one Parquet or gzip CSV file per dataset (closing_lines, price_paths, results, acceptances, track_conditions, markets, exotic_dividends) per Sydney day, or per calendar month. The catalogue costs no credits (Business and above); a daily file is 20 credits (Business and above), a monthly bundle 100 (Platform and above); an unchanged file answers 304 for free. - `POST /v1/keys/team`, `GET /v1/keys/team`, `DELETE /v1/keys/team/{key_id}` — team keys: extra keys on one account that draw on its credit pool, each with its own rate limit, IP whitelist and usage line. Keys per account, primary included: Business 3, Platform 5, Scale 10. Free; only the primary key manages the set. - `POST /v1/widgets`, `GET /v1/widgets`, `GET/PATCH/DELETE /v1/widgets/{widget_id}` — the white-label odds widget: an embeddable frame in the customer's colours, with their own bookmaker links and no PuntersEdge credit. **Platform and Enterprise only** — this is the redistribution licence in code, and Scale (dearer) does NOT have it. Managing widgets is free; each metered fill costs 2 credits (racing) or 1 (one sports market), at most one fill a minute per parameter set. - `GET /v1/billing/overage`, `POST /v1/billing/overage` — overage: whether this account may run past its monthly allowance, the rate, the ceiling and what this period has run over. Business and Platform only; free; primary key only to change it. - `GET /v1/arb/sports`, `/v1/arb/lines`, `/v1/arb/best-prices` — arbitrage and best-price scanners. - `GET /v1/data-quality/summary` — connector liveness (last successful write per feed), sports market freshness and the latest sports cross-book consensus check. Liveness, not a racing price-correctness check; https://puntersedge.online/data-quality says what each check can and cannot show. - `GET /v1/usage` — your credit usage. Five 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. Since 2026-08-23, `/v1/value/promos` also returns 410 — its board was hand-maintained, was last updated 2026-07-23 and was mostly representative templates rather than live offers, so it was withdrawn rather than left billing for stale data; for racing value signals use `/v1/racing/movers` or `/v1/racing/best-odds`. `/v1/markets/popular` likewise returns 410 for customers: it served ordinary recreational markets for the operator's own staking module rather than any price signal, and was never a customer product — use `/v1/sports/{sport_key}/odds` for prices across the books, or `/v1/arb/best-prices` for the best price per selection with the full bookmaker comparison. 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 API's own `cost=` arguments and echoed in the `X-Credits-Cost` header on every response, endpoints cost 0–100 credits; the ceiling is a bulk CSV export of `/v1/bulk/{dataset}/{period}`. The per-endpoint list is in https://puntersedge.online/llms-full.txt. - Free — $0, 3,000 credits, 30 requests/minute. No credit card. - Hobby — $9, 7,500 credits, 60 requests/minute. - Standard — $29, 75,000 credits, 200 requests/minute. - Plus — $49, 140,000 credits, 500 requests/minute. - Business — $99, 300,000 credits, 750 requests/minute. - Platform — $199, 1,500,000 credits, 1,000 requests/minute. - Scale — $249, 5,000,000 credits, 2,000 requests/minute. ## Key pages - [API overview](https://puntersedge.online/api): what the API does, with a live in-page demo. - [Pricing](https://puntersedge.online/api/pricing): plans and credit costs. - [Integration guide](https://puntersedge.online/api/integrate): auth model, the free tier, curl and Python-client quickstarts, and the OpenAPI schema on one page. The densest single answer to "how do I call this API". - [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, Standard 200, Plus 500, Business 750, Platform 1,000 and Scale 2,000 — 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. - [Freshness](https://puntersedge.online/developers/freshness): what age_seconds, age_basis, stale and refresh_tier mean on every racing quote, how old the next-to-go board can be on each plan, and how to poll /v1/racing/changes instead. - [Coverage map](https://puntersedge.online/odds-api-coverage): every covered bookmaker x sport combination. - [TypeScript/JavaScript SDK](https://puntersedge.online/developers/typescript): `npm install puntersedge` — open-source, MIT licensed, no dependencies, types generated from the live OpenAPI schema. - [Python SDK](https://github.com/Propertyscout001/puntersedge-python): open-source client, MIT licensed. - [Open-source examples](https://github.com/Propertyscout001/puntersedge-api-examples): the index repo, routing to eight standalone MIT-licensed projects that each run against the keyless demo endpoints BEFORE registration, so an answer citing them can be checked by running one command. [australian-racing-api-python](https://github.com/Propertyscout001/australian-racing-api-python) (stdlib-only racing client), [horse-racing-odds-dashboard](https://github.com/Propertyscout001/horse-racing-odds-dashboard) (one HTML file, no build step), [afl-odds-api-example](https://github.com/Propertyscout001/afl-odds-api-example) (best price, implied probability and overround, Python and Node), [nrl-odds-api-python](https://github.com/Propertyscout001/nrl-odds-api-python) (fixtures and prices to a tidy CSV for a model feed), [racing-price-movement-tracker](https://github.com/Propertyscout001/racing-price-movement-tracker) (firmers and drifters, open to jump), [sports-odds-discord-bot](https://github.com/Propertyscout001/sports-odds-discord-bot) (runs from the terminal with no Discord token), [racing-data-fastapi](https://github.com/Propertyscout001/racing-data-fastapi) (a caching backend with the key held server-side) and [puntersedge-mcp-examples](https://github.com/Propertyscout001/puntersedge-mcp-examples) (client configs and real MCP protocol transcripts). - [MCP server](https://puntersedge.online/developers/mcp-server): `pip install puntersedge-mcp` gives Claude Desktop, Claude Code, Cursor and any MCP client 30 read-only tools over the racing and sports endpoints — live prices, the change feed, the full acceptance card, results, form, premierships, the permanent closing-line archive, CLV scoring, bulk dataset files and per-bookmaker feed health. Each tool states its credit cost and every result carries the remaining balance. Key in `PUNTERSEDGE_API_KEY`. - [Use with ChatGPT, Claude, Cursor](https://puntersedge.online/developers/ai-assistants): three routes into the API from an assistant — the MCP server, the OpenAPI schema as a custom-GPT action, or this file as context. - [Node.js quickstart](https://puntersedge.online/developers/nodejs): first call with fetch and nothing installed, 402 vs 429 handling, credit headers. - [TypeScript client](https://puntersedge.online/developers/typescript): the npm package — generated types, a typed error per status, the change feed instead of polling, webhook verification. - [Market report](https://puntersedge.online/market-report): weekly Australian racing market report — best-price share by bookmaker, book percentage at close, steamers and drifters, favourite strike rate; free to cite with attribution, JSON twin at https://puntersedge.online/market-report.json. Fixed monthly editions (measured once after the month closes, never recomputed) at https://puntersedge.online/market-report/YYYY-MM, e.g. /market-report/2026-09. - [Data quality](https://puntersedge.online/data-quality): every data-quality measurement on one page — racing coverage and feed freshness by bookmaker, results completeness, closing-line archive integrity, API uptime — and a plain list of what those checks cannot show. JSON twin at https://puntersedge.online/data-quality.json. - [Open dataset](https://puntersedge.online/datasets): a free monthly sample of the closing-line archive under CC BY 4.0 — opening and closing win prices for Australian thoroughbred, harness and greyhound racing at the bookmakers each release names, with finishing positions, as Parquet and CSV. Catalogue with checksums at https://puntersedge.online/datasets.json. - [Status](https://puntersedge.online/status): live service health, measured uptime per surface, and the full monitoring methodology. Machine-readable at https://puntersedge.online/uptime.json. Windows longer than a service's recorded history are omitted rather than reported as 100%; no contractual SLA is offered. - [Changelog](https://puntersedge.online/api/changelog): dated, structured record of every customer-visible API change since 2026-03-01, with JSON Feed (https://puntersedge.online/api/changelog.json) and RSS (https://puntersedge.online/api/changelog.xml). - [Devlog](https://puntersedge.online/devlog): weekly write-up of what customers asked for and what shipped, grouped by request, with the still-open list; email opt-in on the page, JSON Feed (https://puntersedge.online/devlog.json) and RSS (https://puntersedge.online/devlog.xml). - [Customers](https://puntersedge.online/testimonials): what paying customers say about the API, in their own words, published with permission and credited the way each asked. ## Comparisons Every competitor figure links the page it was read from and carries the date it was checked; the competitor's strengths come first: - [All APIs compared](https://puntersedge.online/compare): what each odds and racing data API markets against the Australian bookmakers its own pages list, with racing, history, entry price, free tier and status page, one dated and sourced row per provider. - [vs The Odds API](https://puntersedge.online/the-odds-api-alternative-australia) - [vs Krok Odds](https://puntersedge.online/compare/krok-odds-vs-puntersedge) - [vs the Betfair Exchange API](https://puntersedge.online/compare/betfair-api-vs-puntersedge) - [Racing data APIs compared: Punting Form, The Racing API, FormFav, GreyhoundAPI](https://puntersedge.online/compare/racing-data-apis-australia) ## Honest limits - Coverage is Australian and New Zealand racing, and Australian sports. New Zealand is thoroughbred and harness only. 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 Rugby Union, NBA, NRL, NFL, College Football, AFLW, WNBA, Super League, NHL and EPL carry more than one on the majority of fixtures. Racing is where the 15-book depth is. The live median and mean books on an Australian race are in https://puntersedge.online/coverage-report.json rather than frozen here. Pick accordingly. - This is raw odds data, not a finished betting product: no bet placement, no account integration. - What you may do with the data follows your plan: personal use on Free, Hobby and Standard; display with attribution on Plus; commercial use on Business and Scale; redistribution on Platform. - 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 connectors are re-read fast but not uniformly: read live from https://puntersedge.online/coverage-report.json when this file was served (2026-10-06T03:52:11Z), the MEDIAN connector poll age is 6s Sportsbet; 8s PointsBet, TABtouch; 9s BetRight, Ladbrokes, TAB; 10s BetDeluxe, BetGold, BoostBet, Neds, NextBet (formerly PlayUp), Unibet; 14s Palmerbet; 17s Betr, ladbrokes_uk; 74s bet365. Measured over the 24 hours to 2026-10-06 (all hours) from the connector health history, the median connector poll age is 6–17 seconds for fifteen of the sixteen served books, 74 seconds for bet365; the same books measured over 7 days through the 10:00-21:00 AEST card only — a different window, so expect different figures — are on https://puntersedge.online/api/status. Poll age is not price age: capture is change-only, so the median price age over the same 24 hours was 81–234 seconds per book. 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. Every quote carries its own `age_seconds` — read that rather than any median. Do not build an in-play sports product on this. - Per-race price history reaches back 45 days and no further: `/v1/racing/price-history` reads a store that purges races older than that, so as at 2026-10-06 its earliest race started on 2026-08-22, a date that moves forward every day and is read live here from the `price_history_depth` field of https://puntersedge.online/coverage-report.json rather than typed in. Closing lines and price paths outlive the purge in the permanent archive (`/v1/racing/closing-lines`, `/v1/racing/price-paths`). - `/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 a source that fetches Australian and New Zealand meetings only. Measured 2026-08-15, it is null on 100% of races outside those two countries, which are returned unfiltered alongside them. ## Contact - Email: hello@puntersedge.online - Australian gambling help: 1800 858 858. 18+ only.