Real-time table tennis match data

Live Table Tennis Scores API for Point-by-Point Match Data

Power live-score apps, tournament trackers, broadcaster tools, betting interfaces and analytics products with structured access to current point scores, set scores, match status, walkovers, retirements and supported live match events.

Point-by-Point Set Scores Match Status WebSocket Ready
Live Match Set 4 Point Event
{
  "match_id": "match_tt_48291",
  "status": "live",
  "sets": {
    "player_a": 2,
    "player_b": 1
  },
  "current_set": {
    "number": 4,
    "player_a": 8,
    "player_b": 6
  },
  "last_event": {
    "type": "point_won",
    "player_id": "player_tt_101"
  }
}
Follow Every Point Current set and point progression
Handle Every Match State Live, completed, walkover and retirement
Implementation notice: Endpoint paths, response fields, update frequency, response times, supported tournaments and WebSocket availability shown on this page are illustrative until the production feed is confirmed. Replace placeholders with verified values before publishing.
Live scoring built for developers

What Is a Live Table Tennis Scores API?

A Live Table Tennis Scores API gives applications machine-readable access to the current state of a table tennis match. Instead of reading a rendered scoreboard, developers can request or subscribe to structured fields such as player IDs, current set, current point score, completed sets, match status and supported live events.

This structure is useful for mobile apps, tournament dashboards, broadcaster graphics, notification systems, prediction products and other services that need reliable match-state updates throughout play.

For live applications, use REST to load the complete match state and WebSocket where supported to receive incremental point and set events.

Live Table Tennis Data Available Through the API

Current Point Score

Retrieve the point score for both players inside the active set.

Completed Set Scores

Access the score of each completed set and the total sets won by each player.

Point-by-Point Events

Process supported point-won events to build timelines and live scoring interfaces.

Match Status

Distinguish scheduled, live, completed, delayed, walkover, retirement and other documented states.

Match Started

Detect when a scheduled match transitions into live play.

Set Started

Track the active set number and reset the current point score when a new set begins.

Set Won

Receive the winner and final score of a set where event-level delivery is supported.

Match Completed

Retrieve the confirmed winner, final set score and final match status.

Walkovers

Represent matches decided without normal competitive completion.

Retirements

Preserve match context and score when a player retires during play.

Serving Player

Display the current server where the selected live feed includes service information.

Tournament Context

Connect each live match to its tournament, round, stage and schedule where available.

Track a Table Tennis Match From Schedule to Final Result

A live-score integration should preserve each official match state instead of treating every match as only live or finished.

Stage Possible data Application behaviour
Recommended handling
Scheduled Before play begins Players, tournament, round, scheduled time and match format Show fixture and countdown information
Live Match in progress Current point score, set score, current set and supported events Refresh or stream updates continuously
Interval Between sets where represented Completed set score, next set number and match state Preserve the completed-set history
Completed Normal finish Winner, final sets, set history and final status Reconcile final state and stop frequent polling
Walkover No normal competitive finish Official status and declared winner where supplied Do not manufacture missing point or set scores
Retirement Player stops during match Score at retirement, player context and official status Preserve the real score and retirement state
Point-by-point scoring

Build Point-by-Point Table Tennis Scoreboards

Point-level data lets applications show match progression without waiting for an entire set to finish. Each event should include a stable event identifier, match identifier, set number, player and resulting score where supported.

Illustrative Point Event

{
  "event_id": "event_tt_90018",
  "match_id": "match_tt_48291",
  "type": "point_won",
  "sequence": 73,
  "set_number": 4,
  "player_id": "player_tt_101",
  "score": {
    "player_a": 8,
    "player_b": 6
  },
  "created_at": "2026-08-07T05:20:12Z"
}

Recommended Event Fields

Field Purpose
event_id Prevents the same point from being processed twice
match_id Connects the event to the correct match
sequence Helps detect missing or out-of-order events
set_number Identifies the active set
player_id Identifies the player who won the point
score Provides the authoritative score after the event
created_at Records the provider event timestamp
Set scoring

Store Complete Set History

Do not keep only the current number of sets won. Store the completed score of every set so your application can display the full match history and recover correctly after a refresh.

{
  "set_history": [
    {
      "set": 1,
      "player_a": 11,
      "player_b": 7
    },
    {
      "set": 2,
      "player_a": 9,
      "player_b": 11
    },
    {
      "set": 3,
      "player_a": 11,
      "player_b": 6
    }
  ],
  "current_set": {
    "number": 4,
    "player_a": 8,
    "player_b": 6
  }
}
Use the score supplied by the API as the authoritative state. Do not reconstruct an official result only by counting local point events.
Walkovers and retirements

Handle Non-Standard Match Endings Correctly

Walkover

A walkover should be represented with the documented official status instead of fabricating unplayed point or set scores.

Retirement

Preserve the real score at the time of retirement and store the official match-ending status.

Delayed Match

Keep the fixture visible and display the official delayed state where supplied.

Cancelled Match

Do not treat a cancelled fixture as a completed competitive result.

Illustrative Retirement Response

{
  "match_id": "match_tt_48291",
  "status": "retired",
  "winner_id": "player_tt_101",
  "retired_player_id": "player_tt_204",
  "sets": {
    "player_a": 2,
    "player_b": 1
  },
  "current_set": {
    "number": 4,
    "player_a": 8,
    "player_b": 6
  }
}
Tournament coverage

Live Scores Across Supported Table Tennis Competitions

Tournament coverage must be confirmed event by event. The final coverage matrix should state whether a competition includes fixtures, live point scores, set scores, player rankings, statistics and historical results.

WTT Events

Confirm live-score and point-level availability for each supported event.

ITTF Competition Data

Confirm the exact tournaments, stages and data categories included by the production feed.

Olympic Table Tennis

Verify schedule, live-score, result and event depth for the required Olympic edition.

World Championships

Confirm singles, doubles, rounds and historical coverage separately.

Domestic Events

Check live scoring and result depth by country, league or tournament.

Historical Events

Verify how far back set-by-set and point-level data extends.

API request

Retrieve All Live Table Tennis Matches

Illustrative Endpoint

GET /v1/table-tennis/matches/live

Example Query Parameters

Parameter Example Purpose
tournament_id tournament_211 Return live matches from one tournament
player_id player_tt_101 Return a live match involving one player
status live Filter by documented match state
date 2026-08-07 Limit results to one date
page 1 Paginate large result sets

Example Request

GET /v1/table-tennis/matches/live
    ?tournament_id=tournament_211
Complete JSON response

Example Live Table Tennis Score Response

{
  "data": {
    "match_id": "match_tt_48291",
    "status": "live",
    "round": "quarterfinal",
    "best_of": 7,
    "tournament": {
      "id": "tournament_211",
      "name": "Example International Open"
    },
    "player_a": {
      "id": "player_tt_101",
      "name": "Player A",
      "ranking": 8
    },
    "player_b": {
      "id": "player_tt_204",
      "name": "Player B",
      "ranking": 14
    },
    "sets": {
      "player_a": 2,
      "player_b": 1
    },
    "set_history": [
      {
        "set": 1,
        "player_a": 11,
        "player_b": 7
      },
      {
        "set": 2,
        "player_a": 9,
        "player_b": 11
      },
      {
        "set": 3,
        "player_a": 11,
        "player_b": 6
      }
    ],
    "current_set": {
      "number": 4,
      "player_a": 8,
      "player_b": 6
    },
    "server_player_id": "player_tt_204",
    "last_event": {
      "event_id": "event_tt_90018",
      "type": "point_won",
      "player_id": "player_tt_101"
    },
    "updated_at": "2026-08-07T05:20:12Z"
  }
}

This payload is illustrative. Final field names and values must match the production API.

JavaScript example

Load Live Table Tennis Scores With JavaScript

const response = await fetch(
  '/api/table-tennis/matches/live'
);

if (!response.ok) {
  throw new Error(
    `Live scores request failed: ${response.status}`
  );
}

const payload = await response.json();

for (const match of payload.data) {
  renderLiveMatch(match);
}

Render the Current Score

function renderLiveMatch(match) {
  const currentSet = match.current_set;

  console.log(
    `${match.player_a.name} ${match.sets.player_a}` +
    ` - ${match.sets.player_b} ${match.player_b.name}`
  );

  if (currentSet) {
    console.log(
      `Set ${currentSet.number}: ` +
      `${currentSet.player_a}-${currentSet.player_b}`
    );
  }
}
Python example

Retrieve Live Scores With Python

import requests

response = requests.get(
    "https://api.example.com/v1/table-tennis/matches/live",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Accept": "application/json",
    },
    timeout=15,
)

response.raise_for_status()
payload = response.json()

for match in payload["data"]:
    print(
        match["player_a"]["name"],
        match["sets"]["player_a"],
        "-",
        match["sets"]["player_b"],
        match["player_b"]["name"],
    )
PHP example

Retrieve Live Scores With PHP

<?php

$url = 'https://api.example.com/v1/table-tennis/matches/live';

$ch = curl_init($url);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer YOUR_API_KEY',
        'Accept: application/json',
    ],
    CURLOPT_TIMEOUT => 15,
]);

$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($body === false) {
    throw new RuntimeException(curl_error($ch));
}

curl_close($ch);

if ($status < 200 || $status >= 300) {
    throw new RuntimeException(
        'Live scores API returned HTTP ' . $status
    );
}

$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
REST polling

Refresh Live Table Tennis Scores With Controlled Polling

REST polling can work well for prototypes and moderate live-update requirements. Poll from a shared backend rather than letting every visitor make identical upstream requests.

let refreshTimer;

function startLiveScorePolling() {
  stopLiveScorePolling();

  refreshTimer = setInterval(async () => {
    if (document.visibilityState !== 'visible') {
      return;
    }

    try {
      await loadLiveScores();
    } catch (error) {
      console.error(error);
    }
  }, 15000);
}

function stopLiveScorePolling() {
  if (refreshTimer) {
    clearInterval(refreshTimer);
    refreshTimer = undefined;
  }
}
The 15-second interval is illustrative. Use the production provider’s confirmed update guidance and plan limits.
WebSocket live scores

Stream Points and Sets Instead of Polling

WebSocket is useful when the application needs incremental live events without waiting for the next REST refresh.

Illustrative Subscription

{
  "action": "subscribe",
  "channel": "table_tennis_match_events",
  "match_ids": [
    "match_tt_48291"
  ]
}

Possible Live Events

  • match_started
  • point_won
  • set_started
  • set_won
  • match_completed
  • walkover
  • retirement
  • match_status_changed

Recommended Hybrid Architecture

Before the match:
REST loads fixture and player context

At match start:
REST loads complete current state

During play:
WebSocket delivers supported point and set events

After disconnect:
REST reloads authoritative state
WebSocket reconnects and resubscribes

At match end:
REST confirms the final result
Duplicate protection

Process Every Point Event Once

Replayed or duplicated events must not increase the score twice. Store unique event IDs and sequence values before updating local match state.

processed_table_tennis_events

event_id          unique
match_id
sequence
event_type
set_number
player_id
processed_at

Safe Event Workflow

  1. Receive the event
  2. Validate the match identifier
  3. Check whether the event ID already exists
  4. Compare the sequence number
  5. Store the unique event
  6. Update match state
  7. Broadcast the validated update
Connection recovery

Recover Live Scores After a Network Interruption

A live application should assume that temporary network failures will happen.

1. Detect stale or closed connection
2. Mark the interface as reconnecting
3. Wait using controlled backoff
4. Request the latest match state through REST
5. Reopen the WebSocket connection
6. Authenticate
7. Resubscribe to the required match
8. Compare the last processed sequence
9. Apply only missing events
10. Restore the live indicator
Response time and update frequency

Measure Live Table Tennis Data Freshness

Avoid publishing a guaranteed millisecond response time or update frequency unless it has been measured or contractually confirmed.

End-to-end freshness depends on:

  • The original match data source
  • Provider processing time
  • Network delivery
  • Your backend processing
  • Cache or message-broker delay
  • Frontend rendering

Recommended Measurements

provider_event_time
backend_received_time
processing_completed_time
frontend_displayed_time

End-to-end freshness =
frontend_displayed_time - provider_event_time
API versus scraping

Why an API Is Better Than Scraping Live Score Websites

Requirement Live Scores API Scraping a score website
Data format Structured JSON HTML designed for human display
Stable IDs Match, player and tournament IDs Often inferred from labels or URLs
Point updates Documented fields or live events Repeated page parsing
Status handling Explicit documented values Text labels must be interpreted
Error handling HTTP and API errors Markup changes can silently break parsers
Maintenance Versioned developer contract Parser changes whenever the source UI changes

An API also does not automatically grant every commercial right. Review the provider’s licence for display, storage and redistribution.

Live demo structure

Live Table Tennis Scores Demo

A production demo can use the same API endpoints as your customers and display a small set of currently supported matches.

Live Demo

Tournament
Example International Open

Quarterfinal
Player A                 Player B
Sets: 2                  Sets: 1

Current set: 4
Points: 8                Points: 6

Status: LIVE
Last update: API_TIMESTAMP
Connect this section to real production data only after the API host, authentication, coverage and public-demo policy are confirmed.
Commercial use cases

What Can You Build With a Live Table Tennis Scores API?

Live Score Apps

Display active matches, point scores, set scores and final results.

Tournament Trackers

Connect live scores to schedules, rounds, players and tournament pages.

Broadcast Graphics

Feed live scores and match status into supported production graphics and dashboards.

Notifications

Trigger point, set or match-result alerts after validating unique live events.

Betting Products

Combine live match state with separately licensed odds and market data where available.

Analytics Systems

Store live and completed match progression for supported research and analysis workflows.

Production checklist

Live Table Tennis API Integration Checklist

  • Use stable match, player and tournament identifiers
  • Load complete match state before processing incremental events
  • Preserve every completed set score
  • Handle walkovers and retirements explicitly
  • Store unique live event IDs
  • Track sequence values where available
  • Use server-side caching for shared live state
  • Respect documented rate limits
  • Show last-updated timestamps
  • Detect stale connections
  • Reconcile state after reconnecting
  • Confirm the final result after the match ends
Frequently asked questions

Live Table Tennis Scores API FAQs

What does a Live Table Tennis Scores API provide?

It can provide current point scores, set scores, match status, players, tournament context and supported live events.

Can I get point-by-point table tennis scores?

Point-level data may be available for supported matches and plans. Check tournament-level coverage before production.

Does the API provide set scores?

Supported live-match responses can include completed sets, sets won and the active set score.

How are walkovers represented?

Use the documented official status and do not invent unplayed points or sets.

How are retirements represented?

Preserve the real score at retirement and the official match-ending state supplied by the API.

How often do live scores update?

Update timing depends on the competition, feed and delivery method. Use provider timestamps and confirmed service guidance.

Should I use REST or WebSocket?

Use REST for complete state and WebSocket for incremental point and set events where supported.

How is an API different from scraping?

An API provides structured fields, stable IDs and documented error handling instead of depending on rendered HTML.

Can I build a public live-score demo?

Yes, after confirming production credentials, public display rights, coverage and request limits.

Build real-time table tennis products

Start Integrating Live Table Tennis Scores

Confirm tournament coverage, choose REST polling or WebSocket streaming and build against structured point, set and match-state data.

Chat on WhatsApp