Live scores, sub-second
Sets, games, points, server and tiebreak state for every live match — arbitrated from multiple sources into one clean feed.
Live Tennis API is a real-time tennis data API: live scores, match-winner market prices and a proprietary win-probability model for ATP, WTA, Challenger and ITF — singles and doubles — over one REST + WebSocket API.
{ "sets": [1, 0], "games": [[6,4], [3,5]], "points": ["30", "40"], "server": 1, "is_tiebreak": false, "win_probability_p1": 0.62, "timestamp": "2026-07-18T10:41:07Z" }
Our feed beside a public prediction market, on one clock. The figure at the top is a measured interval — the time between our score commit and the market's next quote move — shown with the number of samples behind it.
The data most providers give you — plus the live model analysis they don't.
Sets, games, points, server and tiebreak state for every live match — arbitrated from multiple sources into one clean feed.
Score updates pushed over WebSocket the instant a point is played, on a feed built to fan out to thousands of subscribers. Subscribe to one match or the whole slate; no polling, no rate-limit juggling.
A proprietary live model: the favored side, a calibrated probability, its confidence and the key factors behind the call.
Bid, ask and mid per player with history — line the market up against the data and the model in a single call.
Bios, rankings, ratings and season form; upcoming fixtures and completed results with the winner resolved.
Predictable JSON, UTC timestamps, an OpenAPI 3.1 spec and drop-in REST + WebSocket clients. Built to integrate in an afternoon.
The live API is one of a family. Break-point Alerts and the Historical Data API run on the same key and the same schema, and you manage them all from one developer portal. See all products.
Real-time webhook and push alerts the instant a break point arises in any live match — wire them straight into a bot, a Discord or your phone, no polling.
Break-point AlertsThe point-by-point tape over 171,323 completed matches back to January 2023, plus results and player stats for backtesting — the same clean JSON schema as the live feed, in one bulk-friendly API.
Historical Data APICreate an account, get an instant API key and manage your subscription — with the full REST + WebSocket reference a click away.
Sign up API docsThe point-by-point tape spans 44 monthly periods, January 2023 through August 2026 — across ATP, WTA, Challenger and ITF, singles and doubles. Each match declares how it was recorded, so you can filter to exactly the rows you trust. Below the tape’s floor sits the results archive (1968–2022): 1,485,752 ATP and WTA results with final score, seeds, ranks at the time and per-match serve statistics from 1991 — ending exactly where the tape begins, so no match is ever served from two datasets.
| Value | What it means | Timestamps |
|---|---|---|
| from_start | Watched live from 0-0 — every row carries a real timestamp. | real |
| partial | Picked up mid-match — observed from that point onward. | real |
| reconstructed | Point sequence taken from a point-by-point feed rather than our own observation. | null |
| reconstructed_partial | A reconstruction that does not cover the whole match — it opens after 0-0, or stops before the official final score. | null |
| none | No tape for this match. | — |
?coverage=from_start only matches watched live from 0-0 ?sequence=clean de-duplicated state sequence
Both compose with the tour and date-range filters, so a query returns only the rows you asked for.
"meta": { "coverage": "from_start", "raw_rows": 1284, "unique_states": 311, "point_source": "observed", "model_rows": 287 }
point_source reads observed, reconstructed or mixed, so you always know exactly what you hold. model_rows counts how many of the rows returned carry a win-probability — the model stamp is best-effort, so filter on that number rather than assuming coverage implies it.
Monthly downloadable packages, with a sha256 manifest per file.
Historical Data APIClean REST endpoints and a WebSocket stream, all under one base URL. Authenticate with a bearer token and you are live.
| GET /matches?status=live | Free |
| GET /matches/{id}/score | Free |
| GET /players/{id} | Free |
| GET /history/matches | Basic |
| GET /history/matches/{id} | Basic |
| GET /matches/{id}/statistics | Ultra |
| GET /markets/{id}/prices | Pro |
| GET /matches/{id}/analysis | Ultra |
| GET /rankings?as_of= | Ultra |
| GET /rally/matches/{id} | Ultra |
| WS /ws | Ultra |
# Verify connectivity — no key needed curl https://api.livetennisapi.com/api/public/v1/health # List live matches curl -H "Authorization: Bearer $API_KEY" \ https://api.livetennisapi.com/api/public/v1/matches?status=live
Base URL — https://api.livetennisapi.com/api/public/v1
Subscribe directly for the best price and an instant key. Cancel anytime.
Cancel anytime · Upgrades prorated in place — never two plans · Payments by Stripe, we never see your card.
Beyond ULTRA — custom quotas, SLAs, or a dedicated feed: [email protected].
Already have a key — free or paid? Upgrade in place: upgrade here. Prorated automatically, same key, no second plan.
Same data, same endpoints, same key format — wherever you subscribe.
Subscribe here, billed monthly via Stripe. Your key is issued instantly — best price, no marketplace markup.
View plansThe largest API hub — one key across your RapidAPI subscriptions, with a usage dashboard included.
View on RapidAPIRun it as a pay-per-result Actor that streams scores and analysis straight into an Apify dataset.
View on ApifySubscribe through MagicAPI with unified billing and a single gateway key.
View on API.marketExplore and test every endpoint in our public Postman workspace before you commit a line of code.
Explore in PostmanPlug live tennis data straight into Claude, Cursor or any AI agent — 12 read-only tools, listed in the official MCP Registry.
Connect via MCPInstall a typed client and be reading live scores in a minute — or point an LLM agent at the MCP server. All MIT licensed, all open source.
Sync and async clients over every endpoint, a reconnecting WebSocket feed, and a livetennis CLI. Fully typed.
pip install livetennisapi
Zero runtime dependencies — runs on Node, Deno, Bun, Workers and the browser. Ships types and a CLI you can run with npx.
npm install livetennisapi
Give Claude, Cursor or any MCP client 12 read-only tools over live tennis data. Listed in the official MCP Registry.
npx livetennisapi-mcp
Full API reference at docs.livetennisapi.com · OpenAPI specification on GitHub.
Independent tutorials and tools from developers using the API. Written by them, not us — including where they found the limits.
BotBlog on wiring live score commits straight into bot logic over the WebSocket — reacting the moment a point lands instead of polling for it, with a measured latency study.
Read itA step-by-step Python and Flask build for a personal live scoreboard. Written for absolute beginners — no prior API experience assumed.
Read itA free hosted board built on the API, so you can watch live scores update before deciding whether you want a key at all.
Read itBuilt something? Tell us at [email protected] and we will link it here.
A free tier plus three monthly plans: Basic $9.99, Pro $29.99 and Ultra $99.99. You can subscribe directly here for an instant API key, or on RapidAPI, Apify and API.market.
Yes — upgrade here. Upgrades apply immediately on your existing subscription and API key; Stripe bills only the prorated difference for the rest of the cycle. You never pay for two plans at once, and your key never changes.
Free: live scores & current matches, players, fixtures and your usage — 30 requests/min, 100/day; no history, odds, model fields or WebSocket. Basic ($9.99) adds historical match results, the point-by-point match tape (GET /history/matches/{id}), the results archive back to 1968, head-to-head (GET /h2h) and career aggregates — 60/min, 1,000/day. Pro ($29.99) adds match events, match-winner market odds and bulk monthly history packages — 300/min, 10,000/day. Ultra ($99.99) adds the AI win-probability model fields and analysis, per-match live statistics (aces, double faults, serve split, break points saved and converted), shot-level match-charting stats (serve placement, return depth, net & serve-and-volley, clutch break/game/set-point serving), head-to-head stat splits, the WebSocket live feed and webhooks — 600/min, 500,000/day.
Two layers, two depths. Results go back to 1968: the results archive holds 1,485,752 ATP and WTA results from 1968 through 2022 — final score, seeds, each player's rank at the time, round and draw metadata, and per-match serve statistics from 1991 — with yearly bulk packages. The point-by-point tape then takes over exactly where the archive ends: 44 monthly periods, January 2023 through August 2026, across ATP, WTA, Challenger and ITF — singles and doubles, 26,470,694 archived point-state rows over 171,323 of 174,969 completed matches, growing as the backfill runs. Bulk packages are published per calendar month (tape) and per year (archive), each with a sha256 manifest per file.
Yes, on ULTRA, and it is a different product from the tape. The tape gives the ordered score states of the match; rally construction gives how the point was played — serve direction, every stroke with its wing, direction and depth, the rally length and how the point ended. 11,638 charted matches (7,565 men’s back to 1960, 4,073 women’s), 1,850,490 points. Read one match at GET /rally/matches/{id} or take the whole thing as bulk yearly files. Charting is human work, so coverage is deep rather than universal and is concentrated on the biggest events — GET /rally/matches is the authoritative list of what exists.
Yes, on ULTRA, at three depths. Per live/completed match, GET /matches/{id}/statistics gives aces, double faults, the first/second-serve split, and break points saved and converted — and a completed match keeps its final figures, not just while it is live. Across a pairing, GET /h2h adds serve/return/break-point aggregates. And the deepest layer, GET /charting/players, gives shot-level career stats from the Match Charting Project — serve placement (deuce/ad × wide/body/T), return depth and outcomes, net and serve-and-volley conversion, and clutch break/game/set-point serving and returning — over 11,638 charted matches back to 1960. Coverage there is curated, majors-heavy, and every response reports its matches_charted sample.
The ordered score states of a completed match, with match metadata. Each match declares its own coverage, and the differences are real rather than cosmetic: from_start means we watched it live from 0-0 — every row carries a real timestamp, and our model's win-probability where it was computed (that stamp is best-effort, so where it was not, the field is null rather than guessed); partial means we picked it up mid-match; reconstructed means the point sequence came from a point-by-point feed rather than our own live observation, so those rows carry a null timestamp and no model fields. Nothing is ever synthesised from a final scoreline. The meta block on every response repeats that alongside raw_rows, unique_states and point_source, so you always know exactly what you are holding. Completeness is measured per match, not assumed: meta.points carries a measured verdict on every tape read, ?points=complete serves the sequence in full — score after each point, with server and point winner — where that verdict is complete, and ?points_complete=true filters the match list to measured-complete tapes. As of August 19, 2026, 75.0% of completed matches since 2023 are measured point-complete, and running backfills keep raising that share. Per-match tape reads come with Basic and above; bulk monthly packages come with Pro and above, or with a Historical Data API package purchase. There is no odds tape in the history product.
ATP, WTA, Challenger and ITF — both singles and doubles — from one arbitrated feed.
Yes. The Ultra plan streams score updates the instant a point is played, so you never have to poll. Continuous streaming runs on the push feed (GET /ws-token), built to fan out to thousands of subscribers; a native WebSocket remains available for quick console tests. Both carry per-point event frames on covered matches, with GET /matches/{id}/points for catch-up; each match declares its own pbp_coverage (point where a point vendor covers it, game otherwise), so you always know which cadence you are subscribed to.
Low latency. Scores come from an arbitrated multi-source feed and update within a second or two of the point being played.
Send your API key as an Authorization: Bearer
A proprietary model's live win-probability for each player, with a confidence level and the key factors behind the call. It is available on the Ultra plan.
Yes — explore and test every endpoint in our public Postman workspace, and the /health endpoint needs no key at all.
Pick a plan, get an instant API key, and make your first call in minutes.