19 Sports + Three Racing Codes
Pre-match odds from TAB (tab.com.au) across 19 sports — Soccer, Cricket, AFL, NRL, Tennis, Basketball, Rugby Union, and more — plus horse, greyhound, and harness racing. One integration, one normalized catalog.
TAB Data API
Access pre-match and live odds from TAB (tab.com.au) across 19 sports plus horse, greyhound, and harness racing — with a 30-day results feed. Normalized markets, paginated REST endpoints, and a real-time WebSocket. One API key for all bookmakers.
{
"total": 243,
"page": 1,
"limit": 5,
"totalPages": 49,
"hasNextPage": true,
"events": [
{
"sport": "soccer",
"league": "AFC Challenge League",
"eventId": "3387212",
"home": "Tuv Azarganuud",
"away": "Tainan City",
"live": false,
"startTime": "2026-08-11T04:00:00.000Z",
"markets": [
{
"canonicalMarket": "MATCH_RESULT",
"rawName": "Result",
"period": "FULL_TIME",
"isActive": true,
"marketId": "137393437",
"selections": [
{
"canonicalOutcome": "HOME",
"rawName": "Tuv Azarganuud",
"odds": 2.50,
"isActive": true,
"selectionId": "248655"
},
{
"canonicalOutcome": "DRAW",
"rawName": "Draw",
"odds": 3.10,
"isActive": true,
"selectionId": "248658"
},
{
"canonicalOutcome": "AWAY",
"rawName": "Tainan City",
"odds": 2.45,
"isActive": true,
"selectionId": "248661"
}
]
}
]
}
]
}{
"total": 23,
"page": 1,
"limit": 30,
"totalPages": 1,
"hasNextPage": false,
"races": [
{
"id": "SANDOWN_R9",
"name": "SANDOWN PARK R10 GREYHOUNDS ENTERTAINMENT",
"region": "Australia and New Zealand",
"country": "VIC",
"startDate": "2026-08-10T12:13:00.000Z",
"isInPlay": "false",
"settled": false,
"horses": [
{
"id": "1",
"number": "1",
"name": "INSINUATING",
"trainer": "ROBERT CAMILLERI",
"active": true,
"EW": { "status": "active", "fractional": "", "decimal": "3.7" },
"markets": [
{ "rawName": "Place", "decimal": 1.75 },
{ "rawName": "Tote Win", "decimal": 7.2 }
]
}
]
}
]
}REST calls go to https://api.pulsescore.net with your API key in the X-Secret header. Request parameters and response schemas for every route are in the TAB Swagger docs.
Replace {sport} with a key below. Paginated with ?page and ?limit.
/api/tab/{sport}/leaguesLeagues (tournaments for tennis, MMA, esports)/api/tab/{sport}/leagues/:league/eventsEvents of one league/api/tab/{sport}/eventsAll upcoming events, soonest first/api/tab/{sport}/events/:eventIdOne event with every market{code} is horse-racing, greyhounds, or harness.
/api/tab/{code}/racesUpcoming races with runners and E/W terms/api/tab/{code}/races/:idOne raceIn-play odds; TAB publishes no score or match clock.
/api/tab/live-events/sportsSports live right now, with counts/api/tab/live-events?sport={sport}Live events, optionally by sport/api/tab/live-events/events/:eventIdOne live eventFinished events, without scores.
/api/tab/results/sportsSports with stored results/api/tab/results/leagues?sport={sport}Leagues of one sport/api/tab/results?sport=&league=&team=Finished events, most recent first/api/tab/results/events/:eventIdOne finished eventPass your key as ?key=… on both sockets.
wss://api.pulsescore.net/api/tab/ws/live?sport={sport}Every live event of one sport, every secondwss://api.pulsescore.net/api/stream/ws?bookmakers=tabDelta streams: snapshot, then changes onlyamerican-footballaustralian-rulesbaseballbasketballboxingcricketdartsesportsfield-hockeyhandballice-hockeymmarugby-leaguerugby-unionsnookersoccertable-tennistennisvolleyballTable tennis and field hockey are seasonal on TAB and return empty lists while TAB has none listed.
{
"total": 14,
"page": 1,
"limit": 1,
"totalPages": 14,
"hasNextPage": true,
"hasPrevPage": false,
"sport": "tennis",
"events": [
{
"eventId": "3448004",
"away": "Qu Y",
"home": "Dart",
"league": "WTA",
"live": true,
"markets": [
{
"canonicalMarket": "MATCH_RESULT",
"rawName": "Head To Head",
"period": "FULL_TIME",
"isActive": true,
"selections": [
{
"canonicalOutcome": "HOME",
"rawName": "Harriet Dart",
"odds": 1.04,
"isActive": false,
"selectionId": "435428"
},
{
"canonicalOutcome": "AWAY",
"rawName": "Yihan Qu",
"odds": 26,
"isActive": true,
"selectionId": "435429"
}
],
"marketId": "140006670"
},
{
"canonicalMarket": "GAME_HANDICAP",
"rawName": "Line",
"period": "FULL_TIME",
"line": -7.5,
"isActive": true,
"selections": [
{
"canonicalOutcome": "HOME",
"rawName": "Dart -7.5 Games",
"odds": 1.65,
"isActive": true,
"selectionId": "435542",
"line": -7.5
},
{
"canonicalOutcome": "AWAY",
"rawName": "Qu Y +7.5 Games",
"odds": 2.1,
"isActive": true,
"selectionId": "435543",
"line": 7.5
}
],
"marketId": "140006679"
}
],
"slug": "/sports/betting/Tennis/competitions/WTA/tournaments/WTA Beijing/matches/Dart v Qu Y",
"sport": "tennis",
"startTime": "2026-10-01T08:29:46.000Z"
}
]
}// first frame, once the key and plan are accepted
{ "type": "connected", "bookmaker": "tab", "sport": "tennis", "plan": "PRO",
"validSports": ["american-football", "australian-rules", …, "volleyball"] }
// then about every second: every live event of the sport
{ "sport": "tennis", "timestamp": 1790844478687, "count": 14,
"data": [ { "eventId": "3448004", "home": "Dart", "away": "Qu Y", … } ] }TAB publishes in-play odds without a score or match clock. The WebSocket needs a PRO, MAX, or ULTRA plan (1, 3, or 6 connections).
Instead of polling, declare the TAB boards you want once. Each arrives as a full snapshot, then only what changed every second: markets and selections for events, runners for races. Racing is opt-in: add racing to kinds.
?key=YOUR_KEY&bookmakers=tab
&sports=tennis,horse-racing,greyhounds
&kinds=live,prematch,racing // kinds defaults to live,prematch
// a race on tab/racing/horse-racing: the runner whose price moved, whole
{ "t": "delta", "stream": "tab/racing/horse-racing", "seq": …, "changes": [
{ "eventId": "SANDOWN_R9", "op": "patch",
"rSet": [ { "k": "1", "id": "1", "number": "1", "name": "INSINUATING",
"active": true, "EW": { "status": "active", "decimal": "4.2" }, … } ] } ] }PRO, MAX, and ULTRA plans. Frames, resuming after a drop, and the reference clients are in the Stream API docs; the TAB sports that stream right now are listed at /api/stream/capabilities.
Pre-match odds from TAB (tab.com.au) across 19 sports — Soccer, Cricket, AFL, NRL, Tennis, Basketball, Rugby Union, and more — plus horse, greyhound, and harness racing. One integration, one normalized catalog.
TAB is Australia's best-known betting brand, and racing is its backbone. Thoroughbred, greyhound, and harness races arrive with full runner cards — jockeys, trainers, each-way terms, and fixed-odds plus tote-derived Place and Tote Win prices per runner.
In-play events via REST and a real-time WebSocket that pushes every live event for the chosen sport roughly every second. TAB publishes in-play odds without a score or match clock. WebSocket on PRO, MAX, and ULTRA plans.
One socket for TAB's prematch boards, live boards, and horse, greyhound, and harness races: a full snapshot once, then only what changed every second, keyed by market, selection, and runner. Racing streams are opt-in with kinds=racing. PRO, MAX, and ULTRA plans.
Events that went in play and finished are kept for 30 days: teams, league, and start time, filterable by sport, league, or team (exact name, case-insensitive), or by event ID. TAB's feed carries no scores, so a result tells you which events finished, not the final score.
All markets use canonical naming (MATCH_RESULT, OVER_UNDER, ASIAN_HANDICAP) with decimal odds, the same structure as Bet365, Sportsbet AU, and every other bookmaker on PulseScore. One API key covers them all.
PulseScore provides pre-match odds, live in-play odds, racing, and finished-match results from TAB (tab.com.au). Sports events include normalized market data with canonical market types, selections, and decimal odds; races include the full runner card with jockeys, trainers, each-way terms, and tote-derived prices.
The 19 sports TAB publishes pre-match markets for: Soccer, Basketball, Cricket, Tennis, American Football, Baseball, Ice Hockey, Boxing, MMA, Darts, Snooker, Esports, Handball, Volleyball, Rugby League, Rugby Union, and Australian Rules, plus Table Tennis and Field Hockey when TAB lists them. Each sport exposes /leagues, /leagues/:league/events, /events (paginated), and /events/:eventId. Racing is available for horse, greyhound, and harness via /horse-racing/races, /greyhounds/races, and /harness/races.
Yes. Racing is TAB's core product and all three codes are covered: horse (thoroughbred), greyhound, and harness. Each race returns runners with numbers, jockeys, trainers, each-way (E/W) terms, and decimal odds — including Place and Tote Win prices — via GET /api/tab/horse-racing/races, /greyhounds/races, and /harness/races (paginated). Coverage spans Australian meetings plus international racing.
Yes. Live in-play events are available via REST (/api/tab/live-events, /live-events/sports, /live-events/events/:eventId) and via WebSocket at wss://api.pulsescore.net/api/tab/ws/live. The WebSocket pushes every in-play event for the subscribed sport roughly every second, TAB publishes in-play odds without a score or match clock. PRO, MAX, and ULTRA plans only.
Yes, as a list of finished events. /api/tab/results returns events that went in play and finished, most recent first, retained for 30 days. Filter by sport, league, or team (exact name, case-insensitive), look up a single result with /results/events/:eventId, or discover what to filter on with /results/sports and /results/leagues. TAB's feed carries no scores, so results have no final score, match clock, or statistics.
Yes. Delta streams send TAB's boards over one socket: a full snapshot once, then only what changed, every second. Connect to wss://api.pulsescore.net/api/stream/ws?key=YOUR_KEY&bookmakers=tab&sports=soccer,horse-racing&kinds=live,prematch,racing. Racing (horse-racing, greyhounds, harness) is opt-in through kinds=racing. Available on PRO, MAX, and ULTRA; the full protocol is at /docs/stream-api.
All markets use a canonical format: each market has a type (e.g., MATCH_RESULT, OVER_UNDER, ASIAN_HANDICAP), period (FULL_TIME, FIRST_HALF), and selections with decimal odds. The same structure is used across all sports and bookmakers.
Yes. The BASIC plan is free and includes 500 API requests per month. Upgrade to PRO, MAX, or ULTRA for unlimited requests.
Yes. A single API key gives you access to every bookmaker included in your plan — TAB, Bet365, Sportsbet AU, BetRight, BetOnline, and more. No need for separate keys or accounts.
Sign up for a free account, generate an API key from your dashboard, and pass it via the X-Secret header. The same key works for all bookmaker APIs.
Free tier available. No credit card required. Get your API key in 30 seconds.