Tennis data. Every point counts.
Point-by-point data, player statistics and live match probabilities. Explore the data, then make your first API request for free.
Historical records from 2021, with live coverage by league. Find the tournaments and fields for your application.
1.6 million recorded points.
Archive inventory from 11 September 2026. Explore published coverage to find the tournaments and editions available for your project.
Archive snapshot · 2026-09-11
The score is only the result.
The point sequence shows how the match got there. Inspect individual events, then calculate your own statistics.
score_snapshot → point → correctionBuild from records or start with the answer.
Raw PBP and derived analytics share identifiers, versions and coverage metadata, so you can move between them without rebuilding context.
Raw PBP
Retrieve the canonical point sequence behind every supported calculation.
- Match, set, game and point state
- Server, scorer, serve number and outcome
- Available fields and explicit missing values
Ready-made statistics
Compare player and match performance using statistics with their eligible sample counts.
- Serve and return performance by player
- Tournament and edition comparisons
- Match metrics with eligible counts
A match is more than its final score.
Points won by Jannik Sinner125 of 238 recorded points
One court. Every grain of the game.
Connect individual points to match, player and tournament questions.
Reconstruct a match
Follow the point order and score changes in a match replay.
Answer performance questions
Serve, return and pressure metrics with eligible samples.
Train on reproducible history
Versioned point sequences for repeatable experiments.
Research every state change
Compare match states in sequence. Check timestamp availability before time-based analysis.
One request. One real match.
Create a key and fetch a match without choosing a paid plan. The free sample does not spend your plan quota.
import json, os
from urllib.request import Request, urlopen
request = Request(
"https://api.datafortennis.com/onboarding/v1/match",
headers={"Authorization": "Bearer " + os.environ["DFT_API_KEY"]}
)
with urlopen(request, timeout=15) as response:
match_response = json.load(response)
print(json.dumps(match_response, indent=2))Uses standard HTTP and your DFT_API_KEY environment variable. The free route returns one match; run it in the playground with your own key.
Your first match is a request away.
Register, create an API key and run the free sample in the console. Choose a plan when you need more data.
