TAB Data API

TAB API for Pre-Match, Live & Racing Odds

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.

What a TAB API Response Looks Like

GET /api/tab/soccer/events?page=1&limit=5
{
  "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"
            }
          ]
        }
      ]
    }
  ]
}

Racing — Full Runner Cards with Tote Prices

GET /api/tab/greyhounds/races?page=1&limit=30
{
  "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 }
          ]
        }
      ]
    }
  ]
}

Every TAB Endpoint

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.

Prematch — every sport

Replace {sport} with a key below. Paginated with ?page and ?limit.

  • GET/api/tab/{sport}/leaguesLeagues (tournaments for tennis, MMA, esports)
  • GET/api/tab/{sport}/leagues/:league/eventsEvents of one league
  • GET/api/tab/{sport}/eventsAll upcoming events, soonest first
  • GET/api/tab/{sport}/events/:eventIdOne event with every market

Racing

{code} is horse-racing, greyhounds, or harness.

  • GET/api/tab/{code}/racesUpcoming races with runners and E/W terms
  • GET/api/tab/{code}/races/:idOne race

Live

In-play odds; TAB publishes no score or match clock.

  • GET/api/tab/live-events/sportsSports live right now, with counts
  • GET/api/tab/live-events?sport={sport}Live events, optionally by sport
  • GET/api/tab/live-events/events/:eventIdOne live event

Results (30 days)

Finished events, without scores.

  • GET/api/tab/results/sportsSports with stored results
  • GET/api/tab/results/leagues?sport={sport}Leagues of one sport
  • GET/api/tab/results?sport=&league=&team=Finished events, most recent first
  • GET/api/tab/results/events/:eventIdOne finished event

Real time (PRO, MAX, ULTRA)

Pass your key as ?key=… on both sockets.

  • WSwss://api.pulsescore.net/api/tab/ws/live?sport={sport}Every live event of one sport, every second
  • WSwss://api.pulsescore.net/api/stream/ws?bookmakers=tabDelta streams: snapshot, then changes only

Sport keys

american-footballaustralian-rulesbaseballbasketballboxingcricketdartsesportsfield-hockeyhandballice-hockeymmarugby-leaguerugby-unionsnookersoccertable-tennistennisvolleyball

Table tennis and field hockey are seasonal on TAB and return empty lists while TAB has none listed.

In-Play Odds over REST and WebSocket

GET /api/tab/live-events?sport=tennis&limit=1
{
  "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"
    }
  ]
}
wss://api.pulsescore.net/api/tab/ws/live?key=YOUR_KEY&sport=tennis
// 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).

Delta Streams — Prematch, Live & Racing on One Socket

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.

wss://api.pulsescore.net/api/stream/ws
?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.

Why Use PulseScore for TAB Data

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.

Australia's Iconic Racing Coverage

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.

Live Odds over REST and WebSocket

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.

Delta Streams for Prematch, Live & Racing

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.

30-Day Results Feed

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.

One Schema Across Every Bookmaker

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.

Frequently Asked Questions

What data does the TAB API provide?

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.

What sports are covered?

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.

Is Australian racing included?

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.

Does TAB support live in-play data?

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.

Are match results available?

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.

Can I stream TAB odds instead of polling?

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.

How are the markets structured?

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.

Is there a free tier?

Yes. The BASIC plan is free and includes 500 API requests per month. Upgrade to PRO, MAX, or ULTRA for unlimited requests.

Can I access TAB alongside other bookmakers with the same API key?

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.

How do I authenticate with the API?

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.

Start Using the TAB API Today

Free tier available. No credit card required. Get your API key in 30 seconds.