Match Status Workflow
Live Coverage RequirementThe live workflows on this page apply only to matches with live coverage. Always check the coverage level before applying event-based logic. See Data Coverage and Tiers for how to read a match's coverage.
Every tennis match progresses through a series of statuses during its lifecycle. Use the status and match_status fields to determine the state of a match, drive your polling cadence, and decide which feeds to call at each stage.
Difference Betweenstatusandmatch_statusThe
statusfield indicates the overall state of the match: before it starts, during live play, and after it ends.Once a match is live,
match_statusadds the finer phase of play (for example1st_set,2nd_set,3rd_set), and after unusual endings it records how the match ended (for exampleretiredorwalkover).
Where Status Lives
Both fields sit in the sport_event_status object, which appears in every match-shaped feed: Sport Event Summary, Daily Summaries, Season Summaries, Competitor Summaries, and the three live feeds. During live play the same object also carries the set-by-set period_scores and the serving/point game_state shown below.
Status Definitions
status
status| Value | Meaning |
|---|---|
not_started | The match is scheduled to be played |
match_about_to_start | The scheduled time has passed; play is about to begin |
started | The match has begun |
live | The match is currently in progress |
interrupted | Play has stopped for a short time (for example, rain) |
suspended | The match has begun but has been postponed to a later time |
delayed | The start is temporarily delayed; the match will continue |
ended | The match is over |
closed | Results have been confirmed |
cancelled | The match will not be played |
abandoned | The match has been abandoned |
Only closed, cancelled, and abandoned are terminal. A match at ended has finished play but its result is still subject to confirmation; treat closed as the signal that the result is official.
match_status
match_statusmatch_status shares the lifecycle values above and adds the live phases and special outcomes:
| Value | Meaning |
|---|---|
1st_set through 5th_set | The respective set is in progress |
start_delayed | The start is temporarily delayed |
walkover | The match ended in a walkover (no play) |
retired | The match ended early because a player retired |
defaulted | The match ended by player disqualification |
Status Lifecycle
How a Match Progresses
The walkthrough below follows real responses through a match day.
1. Scheduled
Before play, a match sits at not_started. The sport_event_status is minimal:
{
"sport_event": {
"id": "sr:sport_event:73165832",
"start_time": "2026-07-27T20:10:00+00:00",
"start_time_confirmed": true
},
"sport_event_status": {
"status": "not_started",
"match_status": "not_started",
"period_scores": [
{
"home_score": 0,
"away_score": 0,
"type": "set"
}
]
}
}2. Live, with set and game state
During play, status moves to live and match_status tracks the current set. period_scores carries games won per set, and game_state carries the point score, the server, and any advantage. Here a first set stands at 5-5 with the receiver holding advantage at 50-40:
{
"sport_event": {
"id": "sr:sport_event:73163852",
"start_time": "2026-07-27T21:00:00+00:00"
},
"sport_event_status": {
"status": "live",
"match_status": "1st_set",
"home_score": 0,
"away_score": 0,
"period_scores": [
{
"home_score": 5,
"away_score": 5,
"type": "set",
"number": 1
}
],
"game_state": {
"home_score": 50,
"away_score": 40,
"serving": "away",
"advantage": "home",
"last_point_result": "receiver_winner",
"tie_break": false
}
}
}Read game_state fields together: serving names the side serving (home/away), home_score/away_score inside game_state are the point scores (0, 15, 30, 40, 50), advantage appears at deuce, and tie_break flags a tiebreak game. last_point_result describes how the previous point ended.
3. Ended, then closed
When play finishes, status moves to ended and then settles at closed once the result is confirmed. The final sport_event_status carries winner_id, the sets total in home_score/away_score, and per-set period_scores including tiebreak points where applicable:
{
"sport_event": {
"id": "sr:sport_event:72318992",
"start_time": "2026-07-12T15:05:00+00:00"
},
"sport_event_status": {
"status": "closed",
"match_status": "ended",
"home_score": 3,
"away_score": 1,
"period_scores": [
{
"home_score": 6,
"away_score": 7,
"type": "set",
"number": 1,
"home_tiebreak_score": 7,
"away_tiebreak_score": 9
},
{
"home_score": 7,
"away_score": 6,
"type": "set",
"number": 2,
"home_tiebreak_score": 7,
"away_tiebreak_score": 2
},
{
"home_score": 6,
"away_score": 3,
"type": "set",
"number": 3
},
{
"home_score": 6,
"away_score": 4,
"type": "set",
"number": 4
}
],
"winner_id": "sr:competitor:225050"
}
}Note the tiebreak sets: home_tiebreak_score and away_tiebreak_score record the tiebreak points alongside the 7-6 games score.
Interruptions and Delays
Weather and darkness stop play regularly. An interrupted match keeps its scores and returns to live when play resumes:
{
"sport_event": {
"id": "sr:sport_event:73148798",
"start_time": "2026-07-27T15:00:00+00:00"
},
"sport_event_status": {
"status": "interrupted",
"match_status": "interrupted",
"home_score": 1,
"away_score": 1,
"period_scores": [
{
"home_score": 7,
"away_score": 5,
"type": "set",
"number": 1
},
{
"home_score": 2,
"away_score": 6,
"type": "set",
"number": 2
},
{
"home_score": 2,
"away_score": 4,
"type": "set",
"number": 3
}
]
}
}interruptedmeans play stopped for a short time; expect it to resume.suspendedmeans the match has been postponed to a later time (commonly the next day); the match keeps its ID and its scores.delayedandstart_delayedcover matches that have not yet begun on time.
Poll the match at its live cadence through an interruption: the transition back to live is your signal that scoring has resumed.
Special Match Outcomes
Tennis matches can end without a completed final set. The match_status records how, and winning_reason adds detail where relevant.
A retirement ends the match mid-play; completed and partial set scores are preserved:
{
"sport_event": {
"id": "sr:sport_event:72287384",
"competitors": [
{
"id": "sr:competitor:287541",
"name": "Sweeny, Dane",
"qualifier": "home"
},
{
"id": "sr:competitor:873695",
"name": "Blanch, Darwin",
"qualifier": "away"
}
]
},
"sport_event_status": {
"status": "ended",
"match_status": "retired",
"period_scores": [
{
"home_score": 2,
"away_score": 6,
"type": "set",
"number": 1
},
{
"home_score": 7,
"away_score": 6,
"type": "set",
"number": 2,
"home_tiebreak_score": 9,
"away_tiebreak_score": 7
},
{
"home_score": 4,
"away_score": 0,
"type": "set",
"number": 3
}
],
"winner_id": "sr:competitor:287541"
}
}A walkover ends the match before any play; there are no period_scores, and winning_reason states the walkover:
{
"sport_event": {
"id": "sr:sport_event:73169922",
"competitors": [
{
"id": "sr:competitor:284801",
"name": "Boyer, Tristan",
"qualifier": "home"
},
{
"id": "sr:competitor:17080",
"name": "Tomic, Bernard",
"qualifier": "away"
}
]
},
"sport_event_status": {
"status": "ended",
"match_status": "walkover",
"winner_id": "sr:competitor:284801",
"winning_reason": "walkover"
}
}A default (defaulted) ends the match by disqualification and follows the same shape as a retirement.
Build result displays against winner_id plus match_status rather than assuming a full scoreline: a decided match does not always carry complete sets.
Cancelled
A cancelled match will not be played. Cancelled matches may report detailed_serve_outcomes and play_by_play as false regardless of the competition's normal coverage; see Data Coverage and Tiers. If a fixture is replaced rather than simply dropped, reconcile with the change feeds described in Monitoring Data Changes.
Status-Driven Polling
Let the status drive your request cadence:
not_started: poll the schedule feeds at their standard cadence and watch formatch_about_to_start.live(andinterrupted): poll Live Summaries and the match's Sport Event Summary at the live cadence; layer in Live Timelines for point-by-point.ended: keep polling untilclosed; statistics and results can still be corrected in this window.closed: stop live polling. Pull the final Sport Event Summary and Sport Event Timeline once for your archive.
Per-feed cadences are in Update Frequencies.
Updated 1 day ago
