Live Match Tracking
Use this guide to access live tennis match updates, including scores, statistics, and play-by-play events.
Prerequisite: Confirm Season Availability and Coverage
Understanding which seasons are available—and what level of data coverage is provided—is essential for making reliable and accurate API calls.
- Use the Seasons feed to view all available seasons for each competition in the API.
- Reference the Coverage Matrix to determine the depth of coverage by competition tier.
You can also use the following feeds to see coverage information ahead of matches, including whether serve outcomes, extended stats, and play-by-play data are available, as well as whether scores are delivered live or only after the match:
Understanding Competitions and Seasons
- A Competition in tennis refers to a professional tournament or tour event, such as the Australian Open, Wimbledon, or ATP 1000 – Indian Wells. Each competition has a unique competition_id.
- A Season represents a specific edition of a competition, usually aligned with a calendar year or event date (e.g., Wimbledon 2025). Each season has a unique
season_id
and includes all matches, players, and results for that instance of the competition.
Available Match Statistics
For a list of match stats we provide, see our Tennis Statistics Summary page.
Getting Started: Access Match Schedules
Follow the steps below to access match schedules. For more details, see the Match Schedules integration scenario.
-
Find the
sport_event
ID by querying one of the following Schedule feeds:- Competitor vs Competitor
- Competitor Summaries
- Daily Summaries (This is the most direct path to schedule data)
- Season Summaries
-
Use the
sport_event
ID to access live data from any of the following push and RESTful feeds when the match is about to start or live. The table below shows which feeds correspond to each data type:Data Type
Sport Event Feeds (RESTful)
Live Feeds (RESTful)
Push Feeds
Timeline (Play-by-Play) Data
Match Statistics
Note: All feeds include score updates.
Check Update Frequencies for REST EndpointsThe Update Frequencies page outlines how often data is refreshed and provides recommended call intervals for each REST endpoint. Use it to optimize your polling strategy before, during, and after matches while avoiding unnecessary requests.
Understand Data Points and Match Status WorkflowsAlthough some endpoints provide the same type of data overall, they differ in the specific data points returned. Use the Data Points table for each endpoint (e.g., Sport Event Timeline) to see all possible fields and definitions.
See the Match Status Workflow page** to understand how a match progresses live and how its status impacts the data returned.
Accessing Live Data
Timeline (Play-by-Play) Data
Play-by-play data provides a detailed, sequential account of every point in a match, including serves, and scoring events. This data is useful for analyzing match flow, and player performance in real time.
You can use the following feeds to access play-by-play data:
- Sport Event Timeline - The most comprehensive live data feed, returning detailed information for a specific match using its unique
sport_event
ID. - Push Events - Provides a continuous stream of timeline data for all matches currently live, with query filtering options to target specific matches. Always keep a RESTful backup to track matches in case a Push feed disconnects, since you won’t resume where you left off. For details, see Push Feeds.
- Live Timelines and Live Timelines Delta - RESTful alternatives to the Sport Event Timeline that don’t require
sport_event
IDs in advance, but instead return data for all matches currently live.
You can use play-by-play data to render immersive visuals that represent the live game by mapping serve events and outcomes directly onto a court graphic.

For example, fields like server
, first_serve_fault
(to identify a Second Serve when true
), and result
can drive ball animations, while competitors.name
and country_code
provide player labels and flags.
You can also generate a score bug and point-by-point timelines by using fields such as period_scores
, point_type
, and result
(e.g., an ACE) to track scoring events within each game. Combine these with competitors.name
and match_status
to render the score progression and highlight key moments for each player.

Match Statistics
Match statistics include quantifiable data points from a tennis match, such as aces, double faults, first-serve percentage, break points won, and overall player performance comparisons.
You can use the following fields to access match statistics:
- Sport Event Summary - Returns detailed statistics for a specific match using its unique
sport_event
ID. - Sport Event Timeline - This endpoint also returns the same match statistics as the Sport Event Summary endpoint in addition to play-by-play data.
- Push Statistics - Provides a continuous stream of statistics data for all matches currently live, with query filtering options to target specific matches. Always keep a RESTful backup to track matches in case a Push feed disconnects, since you won’t resume where you left off. For details, see Push Feeds
- Live Summaries - A RESTful alternative to the Sport Event Summary that doesn't require
sport_event
IDs in advance, but instead return statistics for all matches currently live.
You can use match statistics data to render a head-to-head stats view like below using using totals such as service_points_won
, receiver_points_won
, games_won
, and tiebreaks_won
.

Monitoring Post-Match Updates
Learn how to track daily changes to the Tennis API without depleting your call limits.
Doubles (Team) IDs
In the Tennis API, doubles teams are represented as a single competitor
with their own id
, name
, and abbreviation
(e.g., "Cerundolo F / Duran G"
, "C/D"
). Inside that competitor, the players
array lists the two individual athletes with their own id
, name
, country
, and abbreviation
.
<competitors>
<competitor id="sr:competitor:1266321" name="Cerundolo F / Duran G" abbreviation="C/D" qualifier="home">
<players>
<player id="sr:competitor:255595" name="Cerundolo, Francisco" country="Argentina" country_code="ARG" abbreviation="CER"/>
<player id="sr:competitor:43319" name="Duran, Guillermo" country="Argentina" country_code="ARG" abbreviation="DUR"/>
</players>
</competitor>
"competitors": [
{
"id": "sr:competitor:1266321",
"name": "Cerundolo F / Duran G",
"abbreviation": "C/D",
"qualifier": "home",
"players": [
{
"id": "sr:competitor:255595",
"name": "Cerundolo, Francisco",
"country": "Argentina",
"country_code": "ARG",
"abbreviation": "CER"
},
{
"id": "sr:competitor:43319",
"name": "Duran, Guillermo",
"country": "Argentina",
"country_code": "ARG",
"abbreviation": "DUR"
}
]
},
This allows you to treat the team as one unit for brackets and scoring while still accessing player-level details. You can also use the doubles team’s competitor.id
to pull their profile and retrieve ranking information from the Competitor Profile endpoint.
Game State Samples
Click the links below for sample data of Sport Event feeds by match sate. If the match_status
differs, it is indicated after the hyphen.
Updated 2 days ago