Skip to content

Data format

Every publication, snapshot or delta, is a JSON object of the same shape:

Field Type Meaning
type "snapshot" | "delta" Which channel kind this came from
events Race[] Races. A snapshot holds all of them; a delta holds exactly one
ts number Upstream build time of the frame, seconds since epoch
sent_ts number Deltas only: when this message was published. now - sent_ts = delivery latency
ready object Snapshot only: per-book readiness map, used internally; safe to ignore

A real race from a live snapshot, trimmed to four books and one runner (a real one has 50+ books and every runner):

race.json
{
"type": "race",
"key": "lismore|R|6|2026-11-09",
"sport": "racing",
"event": {
"venue": "Lismore",
"number": 6,
"type": "R",
"day": "2026-11-09",
"start": "2026-11-09T06:15:00Z",
"name": "WESTPAC RESCUE HELICOPTER SERVICE BENCHMARK 66 HANDICAP",
"rclass": "BM66",
"country": "AUS"
},
"books": [
"tab",
"ladbrokes",
"betfair",
"surge"
],
"book_event_ids": {
"tab": "2026-11-09|R|LSM|6",
"ladbrokes": "745d6332-332c-4245-81fb-38fbe90f60b4",
"betfair": "1.265206788"
},
"source_rx_ts": {
"tab": 1794180946.649499,
"ladbrokes": 1794180946.837214,
"betfair": 1794180947.263693
},
"selections": [
{
"key": 2,
"number": 2,
"name": "BARELLO",
"status": "ACTIVE",
"book_runner_id": "164432",
"bookie_ids": {
"tab": "164432",
"ladbrokes": "87739f4c-022a-43f0-90e4-242f367f6109",
"betfair": "58569545"
},
"odds": {
"tab": {
"win": 4.4,
"place": 2.3,
"place_open": true,
"place_count": 2,
"place_count_src": "book",
"exp_count": 2,
"allow_place": true,
"allow_fo_place": true,
"silk_url": "https://api.beta.tab.com.au/v1/tab-info-service/racing/silk/ORANGE%2C%20BLACK%20MALTESE%20CROSS%2C%20BLACK%20CAP"
},
"ladbrokes": {
"win": 4.2,
"place": 2.2,
"place_count_src": "unknown",
"place_ladder": {
"4": 1.25,
"5": 1.08
},
"tote": {
"win": {
"18ba60da-abd2-463c-a34a-dc6368377ac8": 4.7
},
"place": {
"18ba60da-abd2-463c-a34a-dc6368377ac8": 1.7
}
}
},
"betfair": {
"back": 4.3,
"lay": 8.8,
"back_ladder": [
[
0,
4.3,
4.54
],
[
1,
4.2,
13.24
],
[
2,
4.1,
59.12
]
],
"lay_ladder": [
[
0,
8.8,
3.31
],
[
1,
9,
34.02
],
[
2,
10,
24.88
]
],
"traded": [],
"back_ladder_disp": [
[
0,
4.3,
4.54
],
[
1,
4.2,
13.24
],
[
2,
4.1,
59.12
]
],
"lay_ladder_disp": [
[
0,
8.8,
3.31
],
[
1,
9,
34.02
],
[
2,
10,
24.88
]
],
"back_disp": 4.3,
"lay_disp": 8.8,
"place_back": 1.86,
"place_lay": 6.6,
"bsp": 4.37,
"pt": 1794180900501,
"places": {
"2": {
"back": 1.86,
"lay": 6.6,
"ltp": null,
"bsp": 4.02,
"back_ladder": [
[
0,
1.86,
146.63
],
[
1,
1.85,
35.29
]
],
"lay_ladder": [
[
0,
6.6,
3.45
],
[
1,
7,
37.06
]
],
"traded": [],
"matched": null
}
}
},
"surge": {
"win": 4.2,
"place": 2.05,
"place_count_src": "unknown",
"fixed_market_id_win": 62764030,
"fixed_market_id_place": 62764021
}
}
}
],
"bf_status": "OPEN",
"bf_inplay": false,
"bf_updated": 1794180947.170831,
"tab_updated": 1794180944.356199,
"country": "AU",
"ts": 1794180947.264339
}

Put every book’s win for every runner side by side and you have the portal’s race grid. This is that grid, the portal’s own component, replaying one real race from the feed. The betfair object above becomes the Back and Lay columns:

Casino R1
G Greyhound · AUSJumps 14:19 AEDT
14:02:43 recorded
Betfair OPEN82 bookmakers priced
RunnerBestBackLayRate−$20UnibetUnibet−$20BetBunkerBetBunker−$20BetDragonBetDragon−$20BearBetBearBet−$20BetAcesBetAces−$20PointsBetPointsBet−$20HotBetHotBet−$23ColossalBetColossalBet−$25BetBlitzBetBlitz−$20BetFocusBetFocus−$20BetrBetr−$20BetChampsBetChamps−$20BetBuzzBetBuzz−$20BetRightBetRight−$20BetRealBetReal−$20TeamBetTeamBet−$20MillennialBetMillennialBet−$20MintBetMintBet−$20Star SportsStar Sports−$20RipperBetRipperBet−$20TrueBetTrueBet−$20WizBetWizBet−$22ChaseBetChaseBet−$20BlondeBetBlondeBet−$20TopBetTopBet−$23CashCageCashCage−$20SurgeSurge−$20PuntSportPuntSport−$20TABtouchTABtouch−$20XBetXBet−$20BetPinnacleBetPinnacle−$20XcelBetXcelBet−$20NoisyNoisy−$20BetJetBetJet−$20BetNationBetNation−$20NedsNeds−$22BetAusBetAus−$20MightyBetMightyBet−$20BetExpressBetExpress−$20BigBetBigBet−$20YesBetYesBet−$20PulseBetPulseBet−$22BetDashBetDash−$20CrownBetCrownBet−$25MarantelliBetMarantelliBet−$20BetEstateBetEstate−$20BallrBetBallrBet−$20BaggyBetBaggyBet−$20BetitBetit−$20BetLocalBetLocal−$22BetSupremeBetSupreme−$20BetYouCanBetYouCan−$20Next2GoNext2Go−$20DafabetDafabet−$20OkeBetOkeBet−$20PonyBetPonyBet−$22BetLegendsBetLegends−$20GemBetGemBet−$20PuntXPuntX−$20BetzookaBetzooka−$22DonnieBetDonnieBet−$22FatBetFatBet−$20BossBetBossBet−$20WishBetWishBet−$20EarlyCrowEarlyCrow−$20KnucklebetKnucklebet−$20Punt123Punt123−$20PlayWestPlayWest−$20SwiftBetSwiftBet−$20StableBetStableBet−$20PremiumBetPremiumBet−$20TABTAB−$20PicnicBetPicnicBet−$20UpcozUpcoz−$20RiverBetRiverBet−$20RealBookieRealBookie−$20Rob WaterhouseRob Waterhouse−$20ReadyBetReadyBet−$20LadbrokesLadbrokes−$20PlayUpPlayUp−$20NextbetNextbet−$20123Bet123Bet
#1 Denni Norris5.505.508.4065%5.505.505.505.505.505.505.504.804.605.505.505.505.505.505.505.505.505.505.505.505.505.505.005.505.504.805.505.505.505.505.505.505.505.505.505.505.005.505.505.505.505.505.005.504.605.505.505.505.505.505.005.505.505.505.505.505.005.505.505.505.005.005.505.505.505.505.505.505.505.505.505.505.505.505.505.505.505.505.505.505.505.50
#2 Stoke And Smoke2.502.624.0063%2.452.402.352.402.402.402.452.252.052.352.452.402.352.452.402.352.452.352.352.352.452.352.202.452.502.152.452.352.452.402.352.402.452.452.452.452.402.452.452.452.452.452.402.452.052.452.452.452.452.452.402.452.452.452.452.452.402.452.452.452.402.352.452.452.452.452.452.452.452.452.452.502.452.452.452.452.302.402.452.452.452.35
#3 Integrity Cookie4.404.809.0049%4.404.204.204.404.404.404.203.803.704.204.404.404.204.404.203.904.404.204.204.204.404.204.004.404.403.804.404.204.404.404.204.404.404.404.404.404.204.404.404.404.404.404.204.403.704.404.404.404.404.404.204.404.404.404.404.404.204.404.404.404.204.004.404.404.404.404.404.404.404.404.404.404.404.404.404.404.004.404.404.004.004.20
#4 Ake's Journey1715.59518%16161617161617131315161716151615161615161615141616131615161615171616161615161616161615161316161616161516161616161516161615141616161616161616161616161616161616161615
#5 Long Bay Blue9.009.002536%9.009.008.509.009.009.009.007.007.508.509.009.008.509.009.008.509.008.508.508.509.008.508.009.009.007.509.008.508.509.008.509.009.009.009.009.008.509.009.009.009.009.008.509.007.509.009.009.009.009.008.509.009.009.009.009.008.509.009.009.008.508.009.009.009.009.009.009.009.009.009.009.009.009.009.009.009.009.009.009.009.008.50
#6 Joey The Mock4.604.709.8047%4.604.604.404.604.604.604.604.003.904.404.604.604.404.604.404.404.604.404.404.404.604.404.204.604.604.004.604.404.604.604.404.604.604.604.604.604.404.604.604.604.604.604.404.603.804.604.604.604.604.604.404.604.604.604.604.604.404.604.604.604.404.204.604.604.604.604.604.604.604.604.604.604.604.604.604.604.404.604.604.604.604.40
#7 Make A Parade312520016%26262631262626212126262626262126262626262626232626232626262626262626262623262626262623262126262626262326262626262326262623232626262626262626262626262626212626262626
#8 Bundock Bonnie10104622%1010101010109.508.008.50101010109.5010101010101010109.0010108.50109.509.50109.5010101010109.0010101010109.00108.0010101010109.0010101010109.001010109.009.00101010101010101010101010101010101010109.50
#9 Magic SugarScratched
#10 Bundock TommyScratched

Recorded from the feed on 26 Oct 2026, 14:02 AEDT: 3 minutes, 138 price changes, played back at 2× speed. It's the same grid you see after you log in.Licensed Australian bookmakers only · ⊘ betting closed · · no price yet. Click any price to open the race once you're logged in.

Field Meaning
type Always "race" today
key Stable race id: venue|code|race number|local day. Use it as your map key
sport "racing" (sports are coming)
event.venue, event.number Meeting name and race number
event.type Code: R thoroughbred, H harness, G greyhound
event.day Local race day YYYY-MM-DD
event.start Scheduled jump, ISO 8601 UTC
event.name, event.rclass Race name and class, when the books publish one
event.country, country Country (AUS/AU, also NZ and others for international meetings)
books Book ids that price this race
book_event_ids Each book’s own id for the race (handy for deep links)
source_rx_ts Per book: when we last received data from it for this race (epoch s)
bf_status, bf_inplay Betfair market status (OPEN, SUSPENDED, CLOSED) and in-play flag; null if no Betfair market
bf_updated, tab_updated Last update time from Betfair / TAB (epoch s)
ts When this race object was last rebuilt (epoch s)
selections The runners, see below
Field Meaning
key, number Runner (saddle cloth / box) number
name Runner name, as the books print it
status ACTIVE or SCRATCHED
bookie_ids Each book’s own id for this runner
odds Map of book id → prices. A book missing from the map has no price for this runner right now

Most books share these fields. Any of them can be absent; treat absence as “unknown”, not zero.

Field Meaning
win, place Fixed win / place price (decimal)
fixed_win_open, fixed_place_open Whether the market is open for betting. false with no price = not yet / no longer offered
place_count Number of places paid, when known; place_count_src says where that came from
place_open, allow_place, allow_fo_place TAB-style place-market flags
place_ladder Extra-place prices keyed by number of places (e.g. top-4, top-5)
tote Tote pools where a book shows them: win/place, keyed by pool id
fixed_market_id_win, fixed_market_id_place The book’s own market ids
silk_url Jockey silks image, when the book provides one

Betfair appears as just another book id, betfair, with exchange fields:

Field Meaning
back, lay Best back and lay price
back_ladder, lay_ladder Depth: [level, price, size AUD] triples, best first
back_disp, lay_disp, *_ladder_disp The same, as Betfair’s website displays them (virtual bets included)
ltp, traded, matched Last traded price, traded volume ladder and matched total, when available
bsp Projected Betfair Starting Price
place_back, place_lay, places Place-market equivalents; places is keyed by number of places
pt Betfair publish time, epoch milliseconds

Odds compares prices only. It is not a bookmaker, takes no bets and does not tell you what to back. Prices come from licensed Australian bookmakers' public sites and can change at any moment; always check the price with the bookmaker before you bet.

18+ · Chances are you're about to lose. For free and confidential support call 1800 858 858 or visit gamblinghelponline.org.au