LIVELive scores refreshed about every 10 seconds, from every table in play

Table tennis data,
one API call away.

Live scores, every result since December 2024, events, players and head to head, as clean JSON. 15 endpoints, copy-paste code in four languages, and an MCP server so your AI assistant can read it too.

50 calls a day, free No card Instant key, no card
Waiting

        
Sample · Men's Singles · R16Game 4
CHNWang Chuqin1191172
JPNTomokazu Harimoto811651
from /v1/liveupdated just now

Start free, upgrade when you need the whole picture

Every plan uses the same key, the same endpoints and the same code.

Compare every plan

Free key

$0 forever
Try it, build a prototype
  • 50 calls a day
  • Yesterday to the days ahead
  • Match scores, events, players
Get a free key
RECOMMENDED

Live

$69 a month
Live scores apps and widgets
  • /v1/live, about every 10 seconds
  • Every game score, length, table
  • This year's results and head to head
Upgrade to Live

Archive

$59 a month
Research, models, stats sites
  • Every result since December 2024
  • Every game score and duration
  • Player records and head to head
See Archive

Complete

$99 a month
Everything, at higher limits
  • Live plus the whole archive
  • 50,000 calls a day
  • 120 calls a minute
See Complete
Live now

Every point, as it happens

While an event is on, /v1/live returns every match in play with the game in progress. This board is drawn from the same data and refreshes on its own.

See today's matches
Contender Istanbul 2026 · WD · Quarter-finals · Table 2Game 4
JPNHashimoto Honoka/Nagasaki Miyu811112
CHNQin Yuxuan/Zong Geman11751
updated 2s agolive
Contender Istanbul 2026 · MS · Round of 16 · Table 1Game 3
CHNLi Tianyang7111
TURYigenler Abdullah1181
updated 4s agolive

2 matches in play now. Refreshes every 10 seconds.

Inside a match

The whole match, point by point

Who served, who won the point, every game score, the running momentum and the numbers that decide matches. All of it from the same match id.

See /v1/matches/{id}
Sample · Champions · Men's Singles · Quarter-final · Table 1Game 4
TRACKING VIEW
Lin ShidongMoregardball
CHNLin Shidong
SWETruls Moregard
Illustration: positions and ball flight are drawn for the picture, not tracked data. The score, server, momentum and head-to-head stats come from the point-by-point record; the tracking panel is simulated.
In the response
sidesscoreroundstatusbest_ofgamesduration_stablepoints

Momentum point by point, 0 points · level

▲ Lin Shidong aheadMoregard ahead ▼

Tracking SIMULATED

0km/h, last shot
0fastest shot, km/h
0shots in this rally
speed, last 24 shots

Head to head in this match

0longest run of points
0points at 10-all
41mmatch length so far
Get point by point with Live Start with a free key

Orange fields come with Live, Archive and Complete.

Coverage

Every professional event since December 2024

From Grand Smashes to youth and para events: every match, every discipline, the full calendar ahead. One archive, one key, the same shape of JSON.

GET /v1/events
Matches held, week by week
JanFebMarAprMayJunJulAugSepOctNovDec
90,488matches since Dec 2024
353events on the calendar
8,696players with a record
Sep 2026busiest month
Hover a week to see what was on. Striped weeks are still to come.fewer more
Top tier
0events

Grand Smash, Champions, Finals, World Cup

Contender
0events

Star Contender and Contender

Feeder
0events

Feeder series

Youth
0events

Youth Star Contender and Contender, U11 to U19

Para and other
0events

Para events by sport class, and the rest

MSMen's singles
discipline=MS
WSWomen's singles
discipline=WS
MDMen's doubles
discipline=MD
WDWomen's doubles
discipline=WD
XDMixed doubles
discipline=XD
MTMen's teams
discipline=MT
WTWomen's teams
discipline=WT
XTMixed teams
discipline=XT
YouthU11U13U15U17U19
Parasport classes such as MS6WS10XD17
GET /v1/events?tier=1&from=2025-01-01

Counted from the database, refreshed every 10 minutes.

Endpoint explorer

15 endpoints. Try every one right here.

Pick an endpoint, change the filters, and watch the request and the code update. Send it to see the exact shape of JSON you will get back.

Full documentation

Uses a sample key here. Sign in and it uses yours.
Fields in each result

          
Press Send to see the response

        
Quick start

From nothing to live scores on your site in three steps

No SDK to install, no contract to sign. A key, one HTTPS call, and a few lines to draw it.

Get a free key
1

Get your key 30 sec

Sign up with Google. The key appears straight away, with 50 free calls a day.

2

Make your first call 1 min

Send the key as a Bearer token. Yesterday's results work on every plan.


          
200 OK · 38 matches · JSON with data and meta
3

Put it on your page 5 min

Loop over data and draw each match. This is what the response turns into.

Champions Macao · MS · FinalFinished
BRAHugo Calderano1
SWETruls Moregard4
Sample · WS · Semi-finalFinished
CHNSun Yingsha4
CHNWang Manyu2
About 20 lines of JavaScriptCopy the widget code
Works from any language that speaks HTTPS PHP Python JavaScript TypeScript Go Ruby C# Java curl
Built for builders

What people build with it

The same endpoints power very different products. Pick yours and see which calls it takes and which plan fits.

Compare plans
MCP server

Give your AI assistant the whole of table tennis

Our MCP server lets Claude, ChatGPT, Cursor and any MCP client call the API for you. Ask in plain words; it picks the right tool, calls it with your key and answers from real data.

1
Copy your MCP address

It is on your dashboard, next to your key.

2
Add it to your assistant

Paste it where your app adds connectors or MCP servers.

3
Ask

"Who is playing right now?" "How has Lebrun done against Calderano?"

config

        
Table Tennis APIMCP
C
ClaudeDesktop and web
G
ChatGPTconnectors
>_
Cursorand other IDEs
●
Live scoresevery table
R
Resultssince Dec 2024
P
Playersand records
H
Head to headevery meeting
You: Who is playing right now?
PAIDlive_matches

Matches being played now

FREEfind_matches

Matches on a day, any event

FREEget_match

One match with every game

FREEresults_yesterday

Yesterday's finished matches

FREEfind_events

Events past, running, ahead

FREEworld_rankings

The world rankings, any list

PAIDplayer_rankings

A player's ranking by week

FREEfind_players

Players by name or country

FREEget_player

A player and their record

PAIDplayer_matches

A player's matches

PAIDhead_to_head

Two players, every meeting

your own agent?

Use the OpenAPI file and llms.txt

The client names are examples of MCP-capable apps; the exact place to add a server differs by app. Your MCP address is issued with your key.

Players and head to head

Every rivalry, settled in one call

Every meeting between two players since December 2024, with the games, the events and who won. Plus each player's record by discipline.

Browse players

0–0
meetings won

Every meeting, oldest to newesthover for the score
Dec 2024Apr 2025Aug 2025Dec 2025Apr 2026Sep 2026

All figures in the three rivalries are samples for the layout; the built section reads them from /v1/h2h.

Plans

One key. Four plans. Upgrade in a click.

Every plan uses the same endpoints and the same code. Change plan at any time and your key keeps working.

Free key
$0 forever
Try it and build a prototype
Get a free key
RECOMMENDED
Live
$69 a month
Live scores apps and widgets
Archive
$59 a month
Research, models, stats sites
Complete
$99 a month
Live and the whole archive
Limits
Calls a day5020,00020,00050,000
Calls a minute106060120
Dates you can read
Match daysYesterday to the days aheadand today1 January this year onwardand the days aheadEvery day since Dec 2024up to yesterdayEvery day since Dec 2024and the days ahead
Endpoints
/v1/results/yesterday
/v1/matches, /v1/matches/{id}
/v1/events and event matches
/v1/players, /v1/players/{id}
/v1/live
/v1/players/{id}/matches
/v1/h2h/{a}/{b}
Fields
Players, score, round, status
Every game score
Match length and table
Point by point, main-draw singlesSOONSOONSOON
Tools
MCP server for AI assistants
OpenAPI, Postman, llms.txt
SupportHelp centreTicketsTicketsTickets, first in line
Same key on every planUpgrade or downgrade without changing code.
Cancel any timeYour plan runs to the end of the period you paid for.
On your statementCharges show as DEVELOPERDATA.NET.
Need more?Higher limits or a data licence, ask us.
Questions and answers

Everything you want to know before you build

Straight answers about the data, the plans and the code. Can't find yours? Open a ticket and we'll reply by email.

27 questions

Getting started

What is the Table Tennis API?

It is a JSON API for professional table tennis. One key gives you live scores from every table at professional events, every result since December 2024 with the score of each game, the event calendar ahead, player records and head to head. It has 15 endpoints under https://api.tabletennisapi.com/v1/, an MCP server for AI assistants, and ready-to-copy code in curl, PHP, Python and JavaScript.

It is built for developers who want table tennis data in their own product without scraping websites or keeping up with changes to someone else's pages.

How do I get an API key?

Enter your email on the sign-up page and your key arrives straight away. There is no card to enter and no trial that runs out. The free key gives you 50 calls a day and reads yesterday's results, today and the matches scheduled in the days ahead.

Your key starts with tta_live_. It is shown in full once, when it is created, so copy it somewhere safe. If you lose it you can revoke it and make a new one from your dashboard at any time.

How do I make my first call?

Send your key in a header and ask for yesterday's results, which every plan can read:

curl https://api.tabletennisapi.com/v1/results/yesterday \
  -H "Authorization: Bearer $TT_KEY"

You get back an object with data (the matches) and meta (counts and paging). The documentation has the same call in PHP, Python and JavaScript, and a console where you can try every endpoint from your browser.

Is there an SDK I need to install?

No. The API is plain HTTPS and JSON, so any language that can make a web request can use it: PHP, Python, JavaScript and TypeScript, Go, Ruby, Java, C# and the rest. We publish an OpenAPI file and a Postman collection, so you can generate a typed client in your own language if you prefer one.

Data and coverage

Where does the data come from?

We gather results, schedules and live scoring from professional table tennis events as they happen, check them, and store every match in one consistent shape with our own ids, so your code never has to deal with changing formats.

Table Tennis API is an independent service run by DeveloperData.net.

Which events and years are covered?

Every professional event from December 2024 onwards, from the top tier (Grand Smash, Champions, Finals and the World Cup) through Star Contender and Contender, the Feeder series, youth events and para events. The event calendar ahead is included too, so you can show what is coming next. Earlier seasons are not in the API yet.

Each event carries a tier from 1 to 5, so you can filter to the level you care about with /v1/events?tier=1.

Do you cover doubles, team events, youth and para?

Yes. Every match has a discipline: men's and women's singles (MS, WS), men's, women's and mixed doubles (MD, WD, XD) and team ties (MT, WT, XT). Doubles sides list both players.

Youth matches carry an age group from U11 to U19, and para matches carry their sport class, such as MS6. You can filter on any of these, or ask for seniors only with age_group=senior.

What is in a match record?

The event, the local date of play and the start time in UTC, the discipline, the round (both as a code like quarter_final and in words), the status, best-of, both sides with their players and countries, the score in games and the winner.

Live, Archive and Complete add every game score, the length of the match in seconds and the table it was played on. On the free key those three fields come back as null with a note in meta saying which plans include them.

What do the match statuses mean?

finished means the official result is in. live means the match is being played now. scheduled means it is on the calendar and has not started. unconfirmed means the match was played but no official result has been published yet, which happens occasionally with smaller events; it updates when the result arrives.

How quickly do results appear?

Live scores are refreshed about every 10 seconds while play is on. When a match ends its final score is kept straight away, and the official result replaces it as soon as it is confirmed. Full results for the day are complete and checked the next morning, which is why yesterday's results are available on every plan.

Do you have the world rankings?

Yes. /v1/rankings gives the top 100 of every world ranking list, senior and youth: men's and women's singles, and men's, women's and mixed doubles ranked by pair or by each player, with points and the places moved since the week before. It is on every plan, the free key included.

A new list comes out every week and we keep each one, so ranking history runs from October 2026. /v1/players/{id}/rankings gives a player's ranking week by week on the Live, Archive and Complete plans.

Do you have point by point data?

Point by point for main-draw singles is on the way for the Live, Archive and Complete plans: who served, who won each point and the running score, so you can draw momentum charts and serve and return stats. The homepage shows what it will look like. Everything else described on this page is available today.

Live scores

How do I build a live scores page?

Call /v1/live every 10 seconds or so. It returns every match being played now, across every table and event, with the score in games and the points in the game in progress. Draw each match, and when one leaves the list it has finished; its final score is in /v1/matches/{id}.

The response meta tells you how many matches are live, how far behind real time the data is and how often to poll.

Which plans include live scores?

/v1/live is on the Live and Complete plans. The free key can still see today's matches and their status through /v1/matches, which is enough to build and test your page before you upgrade.

Plans and billing

What does the free key include?

50 calls a day and 10 a minute, reading yesterday, today and the matches scheduled ahead. It covers results, matches, events and players, including /v1/results/yesterday. Game scores, match length and table come back empty, and live scores, a player's full match list and head to head need a paid plan. It is free for as long as you use it.

What is the difference between Live, Archive and Complete?

Live is for live scores apps: live scores, every game score, and every match from 1 January this year onwards, with 20,000 calls a day.

Archive is for research and stats sites: every result since December 2024 up to yesterday, with every game score, player match lists and head to head, also 20,000 calls a day.

Complete is both together, live scores and the whole archive, with higher limits of 50,000 calls a day and 120 a minute.

What happens if I go over my limit?

The call is refused with 429: rate_limited if you went over the per-minute limit, or quota_exceeded if you used the day's allowance. Nothing is charged. Every response carries X-RateLimit-Remaining and X-Quota-Remaining headers, and /v1/usage (which does not count against your allowance) shows your calls today and when the count resets.

Can I change or cancel my plan?

Yes, at any time from your dashboard, and your key keeps working throughout. An upgrade takes effect immediately. If you cancel, your plan runs to the end of the period you have paid for and then returns to the free key. Yearly billing costs ten months for twelve.

How will the charge appear on my statement?

Payments are processed securely by Stripe, and the charge shows as DEVELOPERDATA.NET. If you have a question about a charge, the billing help page at developerdata.net/support looks it up for you.

Technical

How do I authenticate?

Send your key in a header, either Authorization: Bearer <key> or X-API-Key: <key>. Keys in the address are refused on purpose, because addresses end up in logs and browser history. Keep the key on your server rather than in code that runs in a visitor's browser.

How does paging work?

Lists return 50 rows by default and up to 200 with per_page. Most lists page with page, and meta tells you the total and the number of pages. Long histories such as a player's matches use a cursor instead: pass meta.next_cursor back as cursor to get the next page. Date ranges on /v1/matches can span up to 31 days a call.

What do the ids look like, and are they stable?

Every id has a prefix that says what it is: ev_ for events, mt_ for matches and pl_ for players, followed by a short code. They never change, so you can store them.

What errors can the API return?

Errors come back as JSON with a short code and a plain message: 400 bad_request for a malformed value, 401 unauthorized for a missing or revoked key, 403 upgrade_required when the data is outside your plan (the message names the plans that include it), 404 not_found, 422 unknown_parameter when a filter name is misspelt, and 429 for limits.

What time zone are dates and times in?

Start times are in UTC, written like 2026-03-14T09:40:00Z. The date of a match is the local day of play at the venue, so a match on the evening of 14 March in Macao is dated 14 March wherever you are. Filters such as ?date= use that local day.

AI and MCP

Can I use it with Claude, ChatGPT or Cursor?

Yes. Our MCP server gives AI assistants 14 tools, from live matches to head to head, that call the API with your key. Add your MCP address, shown on your dashboard, to any app that supports MCP servers or connectors, and ask questions in plain words. Each tool follows your plan, so a free key can answer questions about results and players.

Do you have llms.txt and an OpenAPI file?

Yes. llms.txt gives language models a short guide to the API, and the OpenAPI file describes every endpoint, filter and field, so you can build your own agent, generate a client or import everything into Postman in one step.

Using the data

Can I show the data on my website or in my app?

Yes. Every plan lets you use the data inside your own website, app or service and show it to your users. What you cannot do is resell or redistribute the raw data as a feed of your own. If you need that, or limits above the Complete plan, ask us about a data licence.

How do I get help?

The documentation covers every endpoint with examples you can run. If you are stuck, open a ticket from the support page and we will reply by email; paid plans can open tickets, and Complete is answered first. Billing questions go to developerdata.net/support.

No question matches that. Try other words, or open a ticket.

Your first table tennis API call is a minute away.

Free key, no card, 50 calls a day. Build it today, upgrade when your users want live scores and the whole archive.

Get your free key
The key appears on the next screen. No card, no trial clock.