A racing odds API for Australia should carry each bookmaker's fixed win and place prices with read times, the exchange's back and lay prices with the money at each, every price's history, and each race's status, scratchings and result. All of it has to hang off one race identity that every bookmaker's version of the race maps onto, across thoroughbred, harness and greyhound meetings.
Racing is harder to carry than sport: races jump minutes apart across up to five time zones, a late scratching re-prices a whole field, and the prices that matter most are read in the final minutes before the jump. The questions to ask any odds API apply to every sport; racing adds the ones below.
What one race record should carry
Ask to see one complete race, every field filled, before you pay:
| Part | Fields to ask for | Why it matters |
|---|---|---|
| Race identity | Local date, track, code, race number, scheduled jump time with its time zone, the provider's race id | The key every bookmaker's version maps onto |
| Runners | Name, saddlecloth number, barrier or box, scratched flag with the scratching time | Matching runners, and deductions |
| Bookmaker prices | Win price, place price, places paid, read time, for each bookmaker | The prices you compare and bet |
| Exchange | Best back and lay prices, money available at each, last traded price, read time | A reference market with real money behind it |
| Flucs | Every price change with its time, from the opening price | How the market got to this price |
| Status | Open, suspended or closed, and the actual jump time | Whether a price can still be taken |
| After the race | Placings, protests, correct weight, dead heats, deductions, tote dividends | Settling and checking bets |
A racing data API, in the usual sense, carries the fields, form, scratchings and results without prices; a racing odds feed carries the prices. Software that bets or settles bets needs both, joined on the same race.
Fixed prices, exchange back and lay, and flucs
Three kinds of price behave differently and should never share a column. A bookmaker's fixed price is its own offer with its margin built in, an exchange's back and lay prices are other punters' offers with money waiting at each, and flucs are the history of either.
With illustrative prices for one runner, 2 minutes 40 seconds before a 3:40 pm jump:
| Source | Price | Money available | Read at |
|---|---|---|---|
| Bookmaker A, win | $5.50 | Not shown | 3:37:12 pm |
| Bookmaker B, win | $5.00 | Not shown | 3:35:55 pm |
| Exchange, best back | $5.60 | $85 | 3:37:16 pm |
| Exchange, best lay | $5.90 | $40 | 3:37:16 pm |
Three readings follow from the times and amounts:
- Bookmaker B's price is 77 seconds older than A's, so it shows where B was, not where B is.
- The back price sits below the lay price, as it should, with implied chances of 1 / 5.60 = 17.9% and 1 / 5.90 = 16.9%.
- Only $85 waits at $5.60, so a $100 back bet would need a lower price for the rest. A thin reference should always travel with its amount.
Place prices mean little without the places paid, which depend on whose rules apply: tote place pools have their own field-size rule, and online bookmakers set their own place terms. A feed should carry the places paid beside each bookmaker's place price.
An API's flucs are its own record of the prices it read, so a gap in its reads draws a smoother line than the market really did. For NSW TAB race meetings the official fluctuations, starting price and top fluc come from Racing NSW's NSW Official Price service, not from an odds API's own reads. Horse racing flucs covers reading the line itself.
Matching one race across bookmakers
An API is only as good as its race matching, and track names are the first trap. Sandown in Melbourne races on two courses, Lakeside and Hillside, and Sandown Park is a greyhound track in Victoria, so a bookmaker that lists a bare "Sandown" could mean any of three tracks in two codes. Meetings also move: Racing Victoria's 2026-27 race dates, released in April 2026, reallocate Caulfield and Caulfield Heath feature meetings to Sandown, and in January 2025 it moved a Caulfield meeting to Sandown (Lakeside).
Race numbers are the second trap: bookmakers do not always number a meeting the same way, so a race number alone is not a key. Dates are the third. Store every time in UTC with its offset, and remember that a race before 11 am AEDT (10 am in Brisbane, 8 am in Perth) falls on the previous UTC date. A race at 10:52 am AEDT on Saturday 10 October 2026 is 11:52 pm UTC on Friday 9 October, so a feed that groups races by UTC date files it with Friday's card.
Match on local date, track and code first, then confirm with the jump time and the runners. With illustrative listings, not a real meeting:
| Bookmaker | Track as listed | Race | Jump time as listed | Runners |
|---|---|---|---|---|
| A | Sandown Lakeside | R5 | 2:50 pm AEDT | 10, names match |
| B | Sandown-Lakeside | Race 5 | 03:50 UTC | 10, names match |
| C | Sandown | R5 | 2:50 pm | 10, one name missing its apostrophe |
| D | Sandown Park | R5 | 2:52 pm | 8 greyhounds |
A, B and C are one race: 03:50 UTC is 2:50 pm AEDT, and the runner names agree once spelling is normalised. D shares a race number and a jump time within two minutes, and is a different race in a different code. Normalise runner names before comparing them (case, apostrophes and country suffixes such as (NZ)), and use saddlecloth numbers as a second check.
Scratchings, results and settlement data
Every scratching needs its time. When a runner is withdrawn late, the Stewards set a deduction, in cents in the dollar, for winning fixed-odds bets struck before the withdrawal, with separate figures for the win and the places. A bet struck after it is not reduced for that scratching. Tote bets on the withdrawn runner are refunded, though in multi-race pools such as the double, the quaddie and BIG6 the selection moves to a substitute instead. Without the scratching time, a feed cannot say which of your bets the deduction reaches.
With an illustrative 11c win deduction after a 2:47 pm scratching, and two $30 win bets on the eventual winner:
| Bet | Struck at | Price | Return before deduction | Deduction | Paid if it comes off the whole return |
|---|---|---|---|---|---|
| 1 | 2:31 pm | $4.60 | 30 x 4.60 = $138.00 | 11c | 138.00 x 0.89 = $122.82 |
| 2 | 2:52 pm | $4.10 | 30 x 4.10 = $123.00 | None | $123.00 |
The later bet took a shorter price because the field had already been re-framed, so it carries no deduction. Check your bookmaker's terms for whether a deduction comes off the whole return, as the NSW and WA rule books apply it, or only the winnings; scratchings and deductions compares the two.
Results need a status as well as placings. Placings become official only when the Stewards declare correct weight, which AR 212 of the Australian Rules of Racing ties to two things: the weigh-in of the riders who must weigh in, and the outcome of any protest. Under AR 214(6), a change to the Judge's placings after correct weight has no effect on the Stewards' earlier orders on betting. So a feed should label each result provisional, protest pending or correct weight, and settlement code should wait for the third label. Correct weight and protests covers each step.
A dead heat needs a flag and the number of runners tied. AR 213 splits the prize money between dead-heaters and is silent on bets, so payouts come from betting rules and each bookmaker's terms, which dead heat rules compares. Harness and greyhound racing run under their own rule books, so these thoroughbred rule numbers do not carry across.
Tote dividends arrive last. A dividend is declared per unit after the result, so before the race a feed can carry only approximates, estimates that move as the pool grows. An approximate and a fixed price belong in different columns.
Latency and timestamps near the jump
Close to the jump a stale price costs the most, because there is little time to check it again and a late scratching can re-price the field. Set a maximum price age that tightens as the jump nears. An illustrative policy:
| Time to the jump | Oldest price you act on |
|---|---|
| More than 30 minutes | 2 minutes |
| 5 to 30 minutes | 30 seconds |
| Under 5 minutes | 10 seconds |
Bookmaker A's $5.50 from the snapshot above, read at 3:37:12 pm and checked at 3:37:41 pm, is 29 seconds old with 2 minutes 19 seconds to the 3:40 pm jump. The under-5-minute rule turns it away until a fresher read arrives.
Treat the scheduled jump as a plan, not a fact. A race running late is still open after its scheduled time, so a feed that closes races by the clock drops live prices, and one that ignores the real jump keeps showing pre-race prices after the race has started. Ask for a status that comes from the market itself.
From the first Sunday in October to the first Sunday in April (4 October 2026 to 4 April 2027), Sydney, Melbourne, Canberra and Hobart run on AEDT (UTC+11) and Adelaide on ACDT (UTC+10:30), while Brisbane stays on AEST (UTC+10), Darwin on ACST (UTC+9:30) and Perth on AWST (UTC+8). In those months a 2:00 pm race in Brisbane is a 3:00 pm race in Sydney, and a feed that hard-codes Sydney as UTC+10 is an hour out.
Racing data rights
Racing data has owners. The racing bodies produce the fields, form and results, and they control how wagering operators use them. Racing NSW's bookmakers and betting page says the controlling bodies of the three codes grant approval and set fees for licensed wagering operators' use of NSW race fields information. It also says an operator using NSW thoroughbred race fields must seek Racing NSW's approval wherever it is based or licensed (checked October 2026).
Those approvals are described for wagering operators. What you may do with data you buy is set by the provider's licence. Ask in writing whether you may show it to others, store it or build a product on it, and which parts come from a racing body. Historical odds data covers the same questions for stored prices. None of this is legal advice.
Racing feed traps and what each one costs
With illustrative figures from the examples above:
| Trap | What happens |
|---|---|
| Keying races by track and race number alone | Prices from another race, or another code, land on your runner |
| Closing races by the scheduled time | A race running late loses its prices while it is still open |
| Acting on a price read before a late scratching | An 11c deduction cuts a $138.00 return to $122.82 |
| Comparing a tote approximate with a fixed price | The approximate can shorten before the dividend is declared |
| Settling on the Judge's placings | A protest can still change them before correct weight |
When you do not need a racing odds API
If you bet a few races a week by hand, an odds screen with flucs and exchange prices gives you the same comparison with no code. Of the betting tools in Australia, an API makes sense only once your method is written as code and runs across many races.
Racing prices from B337
On the Terminal, bookmaker racing prices sit beside Betfair back and lay, with each price's history (flucs) and the closing lines, for thoroughbred, harness and greyhound racing. The Terminal shows prices from 40+ bookmakers across racing and sports, gathered in repeated reads rather than tick by tick, so check any price with your bookmaker before you bet.
For code, API Odds delivers live odds from Australian bookmakers and Betfair, racing and sports alike, over the B337 API without placing any bets. It comes with Terminal View and needs coding. Its coverage, access and price are settled with the team before you pay, so ask which race-record fields it carries, from read times and flucs to scratching times and correct-weight status.
Racing bets from your own code go through the Execution API. It sends each bet to a session running on your computer, in an account you hold, so nothing is placed while that computer is off, asleep or offline. Bets placed this way use credits, and both products sit in the automation range. Betfair and TAB are trade marks of their owners; B337 is not affiliated with them.
Risk: Betting involves risk. A racing price can change in the seconds before the jump, a late scratching can cut a return, and a bet that looks good against the exchange can still lose. Many bookmakers restrict automated betting in their terms, and can limit stakes, void bets or close an account. See responsible gambling for limits and support.
For free and confidential support call 1800 858 858 or visit gamblinghelponline.org.au.