Skip to content
@livetennisapi

Live Tennis API

Real-time tennis data API — live scores, players, rankings, match-winner market prices and model win-probability, over REST and WebSocket.
Live Tennis API

Real-time tennis data over REST and WebSocket. Live scores, players, rankings, head-to-heads, a 1968–2022 results archive, match-winner market prices and model win-probability — for ATP, WTA, Challenger, ITF and juniors.

Get a free API key — no card · Documentation · Website · Pricing


SDKs

Install
Pythonpip install livetennisapiPyPI · source
JavaScript / TypeScriptnpm install livetennisapinpm · source
MCP servernpx livetennisapi-mcpnpm · source
Starters / examplesRunnable break-point apps (paper-only)Go · Node · Python
fromlivetennisapiimportLiveTennisAPIwithLiveTennisAPI() asclient: # reads LIVETENNISAPI_KEYformatchinclient.list_matches(status="live"):
print(match.tournament, match.score.sets)
import{LiveTennisAPI}from'livetennisapi';const{ data }=awaitnewLiveTennisAPI().listMatches({status: 'live'});

Both ship a livetennis CLI and a reconnecting WebSocket client. The MCP server gives Claude, Cursor and other LLM agents 24 read-only tools over the same data.

Quickstart (raw HTTP)

Every response is JSON. Authenticate with Authorization: Bearer (preferred) or an X-API-Key header — either works. A free key ($0, no card) covers everything below:

curl https://api.livetennisapi.com/api/public/v1/matches?status=live \
-H "Authorization: Bearer $LIVETENNISAPI_KEY"
{
"data": [
{
"id": 18953,
"tournament": "ATP Wimbledon",
"surface": "grass",
"round": "R16",
"status": "live",
"players": { "p1": { "name": "", "ranking": 3 }, "p2": { "name": "" } },
"score": { "sets": [1, 1], "games": [[6, 3, 2], [4, 6, 1]], "points": ["40", "30"], "server": 1 }
}
],
"meta": { "limit": 50, "offset": 0, "count": 1, "total": 1, "has_more": false }
}

No key yet? Grab a free one — or hit the liveness probe, which needs no auth:

curl https://api.livetennisapi.com/api/public/v1/health
# {"status":"ok","version":"v1"}

Endpoints

EndpointReturnsTier
GET /matchesMatches by lifecycle — live and upcomingFREE¹
GET /matches/{id}Full match detail — any single match, including a completed oneFREE
GET /matches/{id}/scoreCurrent score only — lowest-latency readFREE
GET /matches/{id}/eventsMatch events, newest firstPRO
GET /matches/{id}/pricesPrice ticks for a match's marketPRO
GET /matches/{id}/statisticsDetailed match statisticsULTRA
GET /matches/{id}/analysisModel analysis — thesis + profileULTRA
GET /playersSearch players by nameFREE
GET /players/{id}Bio, ranking, cached statsFREE
GET /h2hHead-to-head record between any two playersBASIC²
GET /rankingsRanking listings (ATP, WTA, …)PRO
GET /rankings?player=One player's rank as of any dateULTRA
GET /marketsMatch-winner market for a matchPRO
GET /markets/{id}/pricesRecent price ticks per sidePRO
GET /fixturesUpcoming scheduled fixturesFREE
GET /usageYour key's usage and quota — doesn't count against itFREE
GET /history/matchesCompleted matches with derived winnerBASIC²
GET /history/matches/{id}One completed match from the historical tapeBASIC²
GET /history/archive/…1968–2022 results archive — 1.49M matches, player bios, rankings back to 1973BASIC²
GET /history/matches/{id}/rally + GET /rally/matchesPoint-by-point rally tapeULTRA
GET /charting/…Shot-by-shot match chartingULTRA
GET /history/packagesHistorical data packagesPRO³
GET /healthLiveness probe (no auth)
WS /wsLive score push feedULTRA
GET /ws-tokenToken for the managed high-fan-out push feedULTRA
WebhooksPush notifications for match eventsULTRA

¹ Bulk paging of completed matches (GET /matches?status=completed) needs the BASIC tier or any History plan; a single completed match by id (GET /matches/{id}) is FREE. ² Or any History plan — History plans work on top of a free core key. ³ Or History Pro and above.

Tiers

FREEBASICPROULTRA
Live & upcoming matches, scores, players, fixtures, usage
Completed-match listings, /h2h, /history/matches + the 1968–2022 archive¹
Match events, market prices, ranking listings + /history/packages
As-of rankings, match statistics, rally + charting data, model analysis + win_probability_p1 / danger
WebSocket live feed, push feed + webhooks
Rate limit30/min · 100/day60/min · 1k/day300/min · 10k/day600/min · 500k/day
$0 — no card$9.99/mo$29.99/mo$99.99/mo

¹ Also unlocked by any History plan, on top of a free core key.

Start free — a FREE key is fine to use from browser code (CORS is open, GET-only, no credentials mode); keep paid keys server-side.

Calling above your tier returns 403 {"error":"upgrade_required"} — never a silent empty result. Upgrade any time at livetennisapi.com/subscribe/upgrade.

Conventions

  • Base URLhttps://api.livetennisapi.com/api/public/v1
  • Timestamps — UTC ISO 8601 with a Z suffix, everywhere.
  • Lists return {data, meta}; single resources return the object directly.
  • Paginationlimit (default 50, max 200) and offset; page while meta.has_more is true (meta.total may be null).
  • Score shapesets is [sets_p1, sets_p2]; games is [games_p1, games_p2] where each side is a per-set list, so [[6,3,2],[4,6,1]] reads 6-4, 3-6, 2-1.
  • Forward compatibility — ignore unknown fields. Additive changes land within v1, so clients should not reject responses carrying fields they don't recognise.
  • Errors401 unauthorized · 403 upgrade_required · 404 · 429 (honour Retry-After; the body's resets_at and the X-RateLimit-Reset header give the exact UTC instant your quota resets).

Documentation

All repositories

Official clientsPython · JavaScript/TypeScript · Go · Swift · .NET · Dart/Flutter · PHP · Laravel
Agents & LLM toolingMCP server · Vercel AI SDK tools · Codex plugin · Dify plugin · Gemini CLI · Zed · LangChain · Haystack
Automation & appsn8n · Node-RED · Home Assistant · Obsidian · VS Code · Flow Launcher · MagicMirror² · Red-DiscordBot
Starters / examplesGo · Node · Python
Spec & metaOpenAPI 3.1 · .github (this profile)

Where to subscribe

Direct is cheapest, has the only free tier, and issues a key instantly. The API is also listed on the marketplaces you may already be billing through:

Direct — free tier · Direct — paid plans · RapidAPI · Apify · API.market · Postman

Status

The API is live and serving. Anything published in this organisation is tested against the production endpoint before release — see each repository's contract tests.

Affiliate program

Know developers who need tennis data? The affiliate program pays 51% recurring commission for the life of every referred subscription — 30-day cookie, and the people you refer get 10% off. Free to join.

Built by the team behind livetennisapi.com

Popular repositories Loading

  1. livetennisapi-mcp livetennisapi-mcpPublic

    MCP server for the Live Tennis API — give Claude, Cursor and other LLM agents real-time tennis scores, odds and model win-probability

    TypeScript 192 76

  2. livetennisapi-haystack livetennisapi-haystackPublic

    Haystack 2.x integration for the Live Tennis API: live scores, matches, players, h2h, archive and rankings as Documents — ATP, WTA, Challenger, ITF and juniors

    Python 1

  3. trmnl-live-tennis trmnl-live-tennisPublic

    Live tennis scores on your TRMNL e-ink display — ATP, WTA, Challenger, ITF, juniors

    Liquid 1

  4. .github .githubPublic

    Organisation profile for Live Tennis API

    Shell

  5. openapi openapiPublic

    OpenAPI 3.1 specification for the Live Tennis API — real-time tennis scores, players, market prices and model win-probability

    Python

  6. livetennisapi-python livetennisapi-pythonPublic

    Official Python client for the Live Tennis API — real-time tennis scores for ATP, WTA, Challenger, ITF and juniors: players, rankings, market prices and model win-probability over REST and WebSocket

    Python

Repositories

Showing 10 of 44 repositories

Top languages

Loading…

Most used topics

Loading…