| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Original HTTPS Page] |
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
| Install | ||
|---|---|---|
| Python | pip install livetennisapi | PyPI · source |
| JavaScript / TypeScript | npm install livetennisapi | npm · source |
| MCP server | npx livetennisapi-mcp | npm · source |
| Starters / examples | Runnable break-point apps (paper-only) | Go · Node · Python |
from livetennisapi import LiveTennisAPI
with LiveTennisAPI() as client: # reads LIVETENNISAPI_KEY
for match in client.list_matches(status="live"):
print(match.tournament, match.score.sets)import { LiveTennisAPI } from 'livetennisapi';
const { data } = await new LiveTennisAPI().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.
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"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"}| Endpoint | Returns | Tier |
|---|---|---|
| GET /matches | Matches by lifecycle — live and upcoming | FREE¹ |
| GET /matches/{id} | Full match detail — any single match, including a completed one | FREE |
| GET /matches/{id}/score | Current score only — lowest-latency read | FREE |
| GET /matches/{id}/events | Match events, newest first | PRO |
| GET /matches/{id}/prices | Price ticks for a match's market | PRO |
| GET /matches/{id}/statistics | Detailed match statistics | ULTRA |
| GET /matches/{id}/analysis | Model analysis — thesis + profile | ULTRA |
| GET /players | Search players by name | FREE |
| GET /players/{id} | Bio, ranking, cached stats | FREE |
| GET /h2h | Head-to-head record between any two players | BASIC² |
| GET /rankings | Ranking listings (ATP, WTA, …) | PRO |
| GET /rankings?player= | One player's rank as of any date | ULTRA |
| GET /markets | Match-winner market for a match | PRO |
| GET /markets/{id}/prices | Recent price ticks per side | PRO |
| GET /fixtures | Upcoming scheduled fixtures | FREE |
| GET /usage | Your key's usage and quota — doesn't count against it | FREE |
| GET /history/matches | Completed matches with derived winner | BASIC² |
| GET /history/matches/{id} | One completed match from the historical tape | BASIC² |
| GET /history/archive/… | 1968–2022 results archive — 1.49M matches, player bios, rankings back to 1973 | BASIC² |
| GET /history/matches/{id}/rally + GET /rally/matches | Point-by-point rally tape | ULTRA |
| GET /charting/… | Shot-by-shot match charting | ULTRA |
| GET /history/packages | Historical data packages | PRO³ |
| GET /health | Liveness probe (no auth) | — |
| WS /ws | Live score push feed | ULTRA |
| GET /ws-token | Token for the managed high-fan-out push feed | ULTRA |
| Webhooks | Push notifications for match events | ULTRA |
¹ 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.
| FREE | BASIC | PRO | ULTRA | |
|---|---|---|---|---|
| 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 limit | 30/min · 100/day | 60/min · 1k/day | 300/min · 10k/day | 600/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.
| Official clients | Python · JavaScript/TypeScript · Go · Swift · .NET · Dart/Flutter · PHP · Laravel |
| Agents & LLM tooling | MCP server · Vercel AI SDK tools · Codex plugin · Dify plugin · Gemini CLI · Zed · LangChain · Haystack |
| Automation & apps | n8n · Node-RED · Home Assistant · Obsidian · VS Code · Flow Launcher · MagicMirror² · Red-DiscordBot |
| Starters / examples | Go · Node · Python |
| Prediction markets | Polymarket tennis trading toolkit — discover tennis event markets, match them to live matches, watch market prices vs live scores (observe-only) |
| Spec & meta | OpenAPI 3.1 · .github (this profile) |
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
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.
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.
Polymarket tennis trading toolkit (Python, MIT, observe-only): discover tennis markets on the Gamma API, match them to live tennis matches, watch market price vs live score, server and break point. The data layer for a Polymarket or Kalshi tennis trading bot.
OpenAPI 3.1 specification for the Live Tennis API — real-time tennis scores, players, market prices and model win-probability
Who sees the point first? Measurement harness for live-tennis score latency vs Polymarket/Kalshi repricing — LTA poll + push feed, Gamma, CLOB WS, Kalshi orderbook. Methodology + offline tests; no numbers published yet. MIT.
Official JavaScript/TypeScript client for the Live Tennis API — real-time tennis scores, players, rankings, market prices and model win-probability for ATP, WTA, Challenger, ITF and juniors, over REST and WebSocket
MCP server for the Live Tennis API — give Claude, Cursor and other LLM agents real-time tennis scores, odds and model win-probability
Tennis point-by-point dataset (ATP/WTA/Challenger/ITF, 2023-) — free for academic research. Docs + loaders; data via Zenodo DOI 10.5281/zenodo.22048731
Live tennis scores, fixtures and player search for elizaOS agents — ATP, WTA, Challenger, ITF, juniors. Community plugin for the elizaOS registry.
Live tennis scores, rankings and fixtures for Slack — a slack-machine plugin powered by the Live Tennis API (free key, no card). Slash command /tennis (live | rankings | player <name> | next) plus a natural-language mention handler; async httpx, grac
Live Tennis API as Vercel AI SDK tools — 24 read-only tools for live scores, players, rankings, head-to-head, the 1968–2022 archive and model win-probability (ATP, WTA, Challenger, ITF and juniors).
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
Loading…
Loading…
| Back | FazBrowse Home | New Git URL |
{ "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 } }