tennisapi.dev / tennis scores api

A tennis scores API that keeps up with the serve

Live scoreboards over REST, per-match detail for second screens, and results that land the moment a match finishes — backed by 58 years of history for instant context.

Get a free API key Read the docs
$ curl "https://api.citoapi.com/api/v1/tennis/matches/live" \
    -H "x-api-key: YOUR_API_KEY"

{ "items": [ { "match_id": "…", "sets": [[6,4],[3,2]],
    "serving": "player1", "surface": "Hard", "round": "QF" } ] }

Live, without the plumbing

GET /tennis/matches/live returns every in-progress match with its scoreboard. Drill into one match for sets, games, and serve state. When you need push instead of poll, WebSocket subscriptions and webhooks (match start, set won, final result) deliver events to you — with delivery-proof records, so a missed event is visible instead of mysterious.

Scores mean more with history attached

The same key that streams the live scoreboard answers 'what's the head-to-head?' and 'how has she done on hard courts this year?' in one extra call. That's the difference between a score ticker and a second-screen product.

Results feeds made trivial

GET /tennis/matches/recent gives you the latest completed matches per tour — a results page, a notification trigger, or a data-warehouse sync, straight off one endpoint.

The dataset behind it

1,730,276 matchesEvery ATP and WTA match since 1968 — main draws, qualifying, Challengers, and ITF — with set scores and serve stats.
5,566,184 ranking rowsEvery published weekly ranking Monday for both tours, queryable by exact date.
137,410 playersBios, handedness, countries, activity status, and career statistics with surface and year filters.
57,910 tournamentsEditions with tier, surface, dates, season calendars, and round-by-round draw brackets.
Head-to-head engineAny two players in history — or a whole group via the H2H matrix — with surface, finals, and Slam splits.
Live scoreboardsIn-progress matches with per-match detailed state, plus recent results the moment they finish.

Frequently asked

How fresh are the live scores?

Live scoreboards update continuously while matches are in progress; webhooks and WebSocket push deliver changes as they land.

Do finished matches move into the archive?

Yes — completed matches join the same archive as the 1.7M historical matches, with the same schema and IDs.

Can I get notified when a match ends?

Yes — register a webhook for final results, or subscribe over WebSocket.

Your first call is thirty seconds away

Free tier to prove it, production tiers when you ship.

More tennis API resources