PuntersEdge › US & Canadian racing › US Tote Odds API
Wagering is for adults, where it is legal. Problem gambling help in the US: the National Problem Gambling Helpline, call or text 1-800-MY-RESET (1-800-697-3738), chat at ncpgambling.org. In Ontario: ConnexOntario, free and 24/7, 1-866-531-2600.
US & Canadian racing · Tote odds
Every race on the US Eastern card, read every 30 seconds while it is on the board: each betting interest's morning line and live win odds, the pools behind them, and once the race is near, the probables and will-pays. Priced by a bookmaker or not. 307 races on today's board, 4 with their pools open now.
A tote is a pool, not a bookmaker: before the off its odds are an estimate of the payoff, and the pool pays what it holds when it closes. The settled payoffs are on the results page.
morning_line and win_odds per betting interest, odds-to-1 as the track displays them, with *_decimal beside each.status open, off or official; the read after it is official is kept as final.win_odds stays null until the WIN pool holds money: before that a track's odds only repeat the morning line.secs_to_post.GET /v1/racing/tote
curl 'https://api.puntersedge.online/v1/racing/tote?country=US,CA' \
-H 'X-API-Key: YOUR_KEY'Every US and Canadian race on TVG's board for the US Eastern day: per betting interest the morning line and the live win odds, odds-to-1 and decimal, with the WIN pool, the race card and each runner's card. Priced by a bookmaker or not.
GET /v1/racing/tote
curl 'https://api.puntersedge.online/v1/racing/tote?source_race_id=tvg_BEL_2026-10-31_1&history=true&exotics=true' \
-H 'X-API-Key: YOUR_KEY'history=true adds every read in which the odds or the WIN pool changed from an hour before post; exotics=true adds the probables and will-pays. Both take one race.
| source_race_id | TVG's race key, tvg_<track>_<date>_<n>; pass it back as source_race_id for one race. |
| race_id | The priced race this is, where an Australian bookmaker prices it; null otherwise. |
| tote.status, tote.final | open, off or official; final marks the odds the race settled on. |
| tote.pools_open, tote.win_pool | Whether the WIN pool holds money, and how much (USD as TVG reports it). |
| tote.pools[] | Every pool the track runs on the race with its money: {code, name, amount}. |
| tote.surface, tote.track_condition | Dirt, Turf or Synthetic after any course change, and the track's condition; null where none is reported. |
| tote.race_class, tote.conditions | The race class ('Maiden Claiming', 'Allowance', 'Stakes'; on harness the gait) and the conditions of entry, verbatim. |
| tote.purse, tote.purse_currency, tote.claiming_price, tote.age_restriction | The purse in the track's currency, the claiming price where it is a claimer, and the age code ('3U'). |
| runners[].morning_line, runners[].win_odds | The track's line and the live odds, odds-to-1 as displayed; *_decimal beside each. |
| runners[].jockey, trainer, weight_lb, age, sex, sire, dam, dam_sire, medication | The runner card, as TVG prints it (names surname first). |
| runners[].scratched, scratch_reason, scratched_at | A scratching with the track's reason and time where its change log has them. |
| history[] | With history=true: each read in which the odds or the WIN pool changed, with secs_to_post. |
| exotics.probables[], exotics.will_pays[] | With exotics=true: probables per pool for its min_wager, and will-pays after a leg is run. |
The same race carries the tote as tote on /v1/racing/next-to-go when a bookmaker prices it; races no bookmaker prices are on /v1/racing/events?country=US,CA as tote_only entries. The endpoint reference has every parameter and cost.
Every 30 seconds while a race is on the board, and once more when it is official, so each race keeps the odds it settled on (final).
Until a track opens its WIN pool, the odds it displays only repeat the morning line, so win_odds is null until the pool holds money (pools_open). It is always null on a scratched runner.
No. Tote odds before the off are an estimate: the pool pays what it holds when it closes, and a US payoff is rounded down to a dime per $2. The settled payoffs are on /v1/racing/results.
The tote board is held from 26 October 2026; the odds history from 27 October 2026. A race's history starts an hour before post and runs until it is official.
What a combination would pay for the pool's minimum stake if it won now: an exacta is [winner, runner-up, payout], a daily double [this race's winner, the next race's winner, payout]. Read from 20 minutes before post, every two minutes.
Where the track reports one (Fast, Firm, Sloppy, Good and the rest), and after any change it logs during the day. Where a track reports none, track_condition is null rather than guessed.
A free key reaches today's board, the odds history and the probables.
Get a free key