18+ Only  |  Gambling can be addictive — please gamble responsibly  |  Gambling Help: 1800 858 858  |  GambleAware

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

Live tote odds, how they moved, and what the exotics would pay.

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.

What a race carries

Every 30 seconds

  • morning_line and win_odds per betting interest, odds-to-1 as the track displays them, with *_decimal beside each.
  • The WIN pool, the race's and each runner's, and every other pool the track runs with its money.
  • 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.

Near the off, and once per race

  • The odds history: each read in which the win odds or the WIN pool changed, from an hour before post, with secs_to_post.
  • Probables per pool, for its minimum stake, from 20 minutes before post every two minutes; will-pays on the multi-race pools once a leg is run.
  • The race card (class, conditions, purse, claiming price, age restriction, surface, condition) and each runner's card (jockey, trainer, weight, age, sex, sire, dam, medication).
  • Scratchings with the track's reason and time.

Calls

Today's tote board

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.

One race, with how its odds moved

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.

Field by field

source_race_idTVG's race key, tvg_<track>_<date>_<n>; pass it back as source_race_id for one race.
race_idThe priced race this is, where an Australian bookmaker prices it; null otherwise.
tote.status, tote.finalopen, off or official; final marks the odds the race settled on.
tote.pools_open, tote.win_poolWhether 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_conditionDirt, Turf or Synthetic after any course change, and the track's condition; null where none is reported.
tote.race_class, tote.conditionsThe 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_restrictionThe purse in the track's currency, the claiming price where it is a claimer, and the age code ('3U').
runners[].morning_line, runners[].win_oddsThe 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, medicationThe runner card, as TVG prints it (names surname first).
runners[].scratched, scratch_reason, scratched_atA 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.

Questions

How often are the odds read?

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).

Why is win_odds null on some races?

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.

Are these the payoffs?

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.

How far back does the odds history go?

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 exactly is a probable?

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.

Is the track condition always there?

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.

Watch the pools form.

A free key reaches today's board, the odds history and the probables.

Get a free key
This site contains wagering-related analysis and is intended for Australian users aged 18+. Gambling involves risk. Please gamble responsibly.