Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Match Status Workflow

🚧

Live Coverage Requirement

The 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 Between status and match_status

The status field indicates the overall state of the match: before it starts, during live play, and after it ends.

Once a match is live, match_status adds the finer phase of play (for example 1st_set, 2nd_set, 3rd_set), and after unusual endings it records how the match ended (for example retired or walkover).



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

ValueMeaning
not_startedThe match is scheduled to be played
match_about_to_startThe scheduled time has passed; play is about to begin
startedThe match has begun
liveThe match is currently in progress
interruptedPlay has stopped for a short time (for example, rain)
suspendedThe match has begun but has been postponed to a later time
delayedThe start is temporarily delayed; the match will continue
endedThe match is over
closedResults have been confirmed
cancelledThe match will not be played
abandonedThe 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_status shares the lifecycle values above and adds the live phases and special outcomes:

ValueMeaning
1st_set through 5th_setThe respective set is in progress
start_delayedThe start is temporarily delayed
walkoverThe match ended in a walkover (no play)
retiredThe match ended early because a player retired
defaultedThe match ended by player disqualification


Status Lifecycle

Match Status LifecycleMain path, pauses, special endings, and terminal states
Main pathnot_startedmatch_about_to_startliveendedclosed
During live1st_set … 5th_setmatch_status tracks the current set
Pausesinterruptedsuspendeddelayedplay resumes or resumes later; scores kept
Early endingsretiredwalkoverdefaultedmatch_status records how it ended
Not playedcancelledabandoned
Only closed, cancelled, and abandoned are terminal. ended means finished but not yet confirmed.


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
      }
    ]
  }
}
  • interrupted means play stopped for a short time; expect it to resume.
  • suspended means the match has been postponed to a later time (commonly the next day); the match keeps its ID and its scores.
  • delayed and start_delayed cover 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 for match_about_to_start.
  • live (and interrupted): 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 until closed; 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.


Did this page help you?