puntersedge_racing_best_odds
Compare win, place, and tote prices for every runner across bookmakers to find the leading price for each, which book offers it, price spread, and market percentage under 100 for cross-book arbs.
Instructions
Best win, place and tote price per runner across all books, with the book offering it, the spread to the worst price, and a race-level market percentage under 100 when the best prices beat the field. Costs 3 credits.
Returns: [{race_id, venue, race_number, race_name, category, country, start_time, books_compared, market_percentage, runners:[{name, number, barrier, jockey, trainer, best_win:{price, bookmaker, age_seconds, stale, source_url}, best_place:{…}, best_tote:{…}, books_quoting_win, books_quoting_place, price_spread_pct}], scratchings, data_age_seconds, stale}] (top-level ARRAY). market_percentage UNDER 100 = a cross-book arb; any single book is always over 100. ⚠ best_tote is NOT comparable to best_win — a pre-race tote figure is an estimate that moves as the pool fills, and taking the max across books is upward-biased by construction (greyhound pools are thinnest and swing hardest). books_quoting_win and books_quoting_place are DIFFERENT sets.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Best price per runner across books on the next 5 races {"num_races": 5, "country": "AU", "include_unresolved": true}
Auth: needs your own key in PUNTERSEDGE_API_KEY.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| venue | No | Comma-separated venue names, case-insensitive. Matched exactly after case folding — read `venue` off an unfiltered call rather than guessing. | |
| country | No | Comma-separated ISO country codes, e.g. AU. Foreign races outside Hong Kong are quoted by a median of ONE book, so a cross-book comparison on them compares nothing. | |
| num_races | No | Races to compare, up to 150. Pass 150 to cover the whole day's card in one call. | |
| bookmakers | No | Restrict the comparison to these bookmaker keys, case-insensitive. An unrecognised key returns a free 422 naming the valid keys. | |
| categories | No | Comma-separated racing codes: horse, greyhound, harness. Omit for all. | |
| include_unresolved | No | Include races whose country is not resolved yet (country is null). Off by default; leaving it off with country=AU drops most of an Australian card. |