Changelog
What changed in the API, newest first.
GET /v1/matches/{id}/points gives every score in every game as our live tracking saw it, about every 10 seconds, with who served, for matches followed live from October 2026, on every plan. Every match now carries points_per_game, win_by, utc_offset_min, started_at (the first point), timeouts, cards, video_review, challenges_each and, while live, serving. Events carry utc_offset_min.
GET /v1/rankings gives the top 100 of every world ranking list, senior and youth, singles and doubles (by pair or by player), with points and movement, on every plan. GET /v1/players/{id}/rankings gives a player's ranking week by week on the Live, Archive and Complete plans. Ranking history starts with the week of 5 October 2026 and grows every week. GET /v1/players/{id} now carries world_ranks, the player's ranks this week.
When a match card records no length, duration_s is now measured by our live tracking for every match followed from its first point, to about 10 seconds.
GET /v1/players/{id} now carries born, hand and height_cm where they are publicly recorded, mostly for senior players, and lost in a player's record no longer counts draws or matches not played.
An official match without a winner now says why in result_note: not played, draw or stopped, beside walkover, retired and disqualified. Team ties list each rubber's game score in games, and a tie level on rubbers in a format played to a games total takes the side with more games as its winner.
One SKILL.md that teaches Claude and other agents to use the API, at /skill.md and found by agents at /.well-known/agent-skills/index.json. See The whole API in one file.
On the Live and Complete plans, add up to 10 addresses on your dashboard and get a signed POST for match.finished, match.live and event.added, with retries over about 3 days. See Webhooks.
Rotate a key from the dashboard: the new key works at once and the old one keeps working for 24 hours while you swap it in.
round is now our own code (final, semi_final, quarter_final, round_of_16 ... group, qualifying_1, bronze), and the round filter takes the same codes. irm is replaced by result_note (walkover, retired or disqualified), table is the table number, and team ties carry rubber. The outside player number and its filter are gone: find players by name or country. Names are in normal casing, such as Wang Chuqin, and event names carry no organiser's brand, such as Champions Macao 2026.
Calls a minute and calls a day are now counted across all the keys of an account, and /v1/usage reports the account's calls.
The documentation as one Markdown file, llms.txt, an OpenAPI 3.1 file and a Postman collection, all generated from the same source as these pages.
Coverage and every page now say so. Earlier seasons are not in the API yet.
Twelve endpoints: live matches, matches, a match, yesterday's results, events, an event and its matches, players, a player, a player's matches, head to head and usage. Free key, Live, Archive and Complete plans.