GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Guides

Monitoring Team Events

This integration scenario explains how to monitor team-based golf events such as the Ryder Cup, Presidents Cup, and Solheim Cup using the Sportradar Golf API. It focuses on the data structures unique to team events, including team identifiers, match formats, captain roles, and bracket groupings.

This scenario is commonly used to:

  • Display team standings and head-to-head match results
  • Track session-by-session play across foursomes, fourball, and singles
  • Surface captain and vice-captain assignments
  • Drive scoreboards and broadcast overlays for cup-style events


Overview

Team events behave differently from standard stroke-play tournaments. Instead of individual players competing on a shared leaderboard, two teams compete head-to-head across a series of matches, often spanning multiple formats and sessions over several days.

The Golf API supports team events through the same tournament-centric feeds used for stroke-play events, but the response structure introduces additional concepts: teams, matches, match formats, captain roles, and in some cases brackets. These concepts surface in event_type values of cup, team, or mix.

Cup events such as the Ryder Cup and Presidents Cup anchor the examples in this scenario: two-team match-play events contested across foursomes, fourball, and singles sessions over several days. The roster sample below is from the 2024 Presidents Cup.


Before You Start: Team Event Concepts

Several concepts unique to team events affect how data is structured:

  • Event type of cup, team, or mix (rather than stroke)
  • Teams with their own IDs, names, and aliases (e.g., "USA", "Europe")
  • Matches with formats of singles, fourball, or foursomes
  • Match types of regular, semifinal, championship, or consolation. The knockout tiers appear in bracket events: the 2024 T-Mobile Match Play ran regular bracket matches, then a semifinal round and a championship match, and consolation marks a third-place match (staged annually at the WGC-Dell Technologies Match Play). Cup sessions are regular
  • Mix events (for example the T-Mobile Match Play) split the Tournament Summary into a summaries array with one part per format: a stroke part carrying the field, then a match part carrying the brackets
  • Player roles of player, captain, vice-captain, or assistant
  • Captain's picks flagged via a captains_pick boolean
  • Brackets for grouping matches in events with bracket structures

Scoring also differs. In match play, results are expressed as holes won (e.g., "3 & 2") and per-hole outcomes (win, loss, halved), rather than total strokes relative to par.


💡

Best Practice

Check the event_type field on a tournament before assuming a stroke-play structure. Tournaments with event_type of cup, team, or mix introduce team and match data that requires different handling than standard stroke-play events.

Match-play scoring uses different fields than stroke play. Reference the Scorecards Per Round data points to handle both scoring structures in your integration.


Relevant Feeds

The following feeds are used when monitoring team events:

FeedPurpose
Tournament ScheduleIdentify team events via event_type and discover tournament IDs
Tournament SummaryRetrieve team rosters, captain roles, and bracket structures
Tee Times Per RoundRetrieve match pairings, formats, and bracket groupings per session
Tournament LeaderboardRetrieve overall team standings and match-level results
Scorecards Per RoundRetrieve hole-by-hole match scoring and per-hole outcomes
Push LeaderboardStream real-time team standings and match results
Push ScorecardStream real-time hole-by-hole match scoring updates


High-Level Workflow

A typical team event integration follows this flow:

Schedule → Identify Team Event → Tournament Summary (Teams) → Tee Times (Matches) → Leaderboard / Scorecards → Push Feeds

  1. Identify the team event via event_type
  2. Retrieve team rosters and captain assignments
  3. Pull match pairings and formats for each session
  4. Track team standings and match results
  5. Layer in Push feeds for real-time updates


Integration Steps


1. Identify the Team Event

Start by calling the Tournament Schedule feed and look for tournaments with an event_type of cup, team, or mix. Standard stroke-play events return event_type: "stroke", so this field is the primary signal that you're dealing with a team event.

GET https://api.sportradar.com/golf/{access_level}/{golf_tour}/v3/{language_code}/{season_year}/tournaments/schedule.{format}

Extract the tournament.id for the team event. This ID is required for all downstream requests.

Why this matters

  • event_type drives whether your integration should expect team and match data
  • Tournament Schedule is the canonical source for tournament IDs across all event types
  • Cup events appear in the same schedule feed as stroke-play events on their associated tour

2. Retrieve Team Rosters and Captains

Use the Tournament Summary feed to retrieve team rosters, captain assignments, and player roles for the event.

GET https://api.sportradar.com/golf/{access_level}/{golf_tour}/v3/{language_code}/{season_year}/tournaments/{tournament_id}/summary.{format}

In team events, the tournament carries a teams array. Each team includes its ID, name, alias, and a members roster; each member carries a role (the team captain is role: "captain"), and discretionary selections are flagged with captains_pick: true, absent for automatic qualifiers. Presidents Cup rosters carry 12 players: six automatic qualifiers and six captain's picks. Each round also carries a format (fourball, foursomes, or singles) that labels the session; each match repeats the value as its match_format. The example below is from the 2024 Presidents Cup, trimmed to one team and three members:

{
  "event_type": "cup",
  "status": "closed",
  "rounds": [
    { "number": 1, "format": "fourball", "status": "closed" },
    { "number": 2, "format": "foursomes", "status": "closed" },
    { "number": 3, "format": "fourball", "status": "closed" },
    { "number": 4, "format": "foursomes", "status": "closed" },
    { "number": 5, "format": "singles", "status": "closed" }
  ],
  "teams": [
    {
      "id": "97af8312-7f84-46f3-89fd-8f9c4c188945",
      "name": "International",
      "alias": "INTL",
      "members": [
        { "id": "b8003ab4-6c80-41a5-9f54-901d5269434b", "first_name": "Mike", "last_name": "Weir", "country": "CANADA", "role": "captain", "abbr_name": "M.Weir" },
        { "id": "b2cde176-328d-4856-9684-6885a1651f57", "first_name": "Christiaan", "last_name": "Bezuidenhout", "country": "SOUTH AFRICA", "role": "player", "captains_pick": true, "abbr_name": "C.Bezuidenhout" },
        { "id": "97cd8ce8-beb2-484e-9081-ccba9baa0607", "first_name": "Jason", "last_name": "Day", "country": "AUSTRALIA", "role": "player", "abbr_name": "J.Day" }
      ]
    }
  ]
}

Tournament Summary returns:

  • Team IDs, names, and aliases
  • Team rosters (members) with player roles (player, captain, vice-captain, assistant)
  • Captain's pick flags
  • A per-round format identifying each session
  • Bracket groupings (in events with bracket structures)
  • Standard tournament context (venue, weather, broadcasts)

Store team IDs and rosters at the start of the event. Roles and captain's pick flags do not change during play.


ℹ️

The 2025 Ryder Cup in the API

The 2025 Ryder Cup (event_type: cup, 2025-09-26 to 2025-09-28) appears in both the PGA Tour and DP World Tour 2025 schedules under the same tournament.id, and uses the same two-team structure shown above. Co-sanctioned cup events list multiple tour entries; resolve the event from either tour's schedule.


👥

LIV and Other Franchise-Team Formats

The two-team model above applies to cup events. LIV Golf's franchise-team competition is modeled differently: LIV tournaments return event_type: stroke with a scoring_system field and no teams array. Treat LIV events as individual stroke play and derive team groupings from your own mapping. Always branch on event_type (and scoring_system where present) rather than assuming a format.


3. Retrieve Match Pairings

Use the Tee Times Per Round feed to retrieve match pairings for each session. In team events, the response includes a match element for each head-to-head matchup, with format and tee time details.

Rounds populate progressively rather than all at once: pairings for the next day's session are typically announced the afternoon or evening before, and that round's matches then appear in this feed and in Scorecards Per Round. Within a round, matches are ordered by tee time, and each match carries a unique match.id and sequence number, so either is a stable key inside the round.

GET https://api.sportradar.com/golf/{access_level}/{golf_tour}/v3/{language_code}/{season_year}/tournaments/{tournament_id}/{round_type}/{round_number}/teetimes.{format}

Each match includes:

  • A unique match.id
  • A sequence number reflecting tee-time order within the round
  • The match_format (singles, fourball, or foursomes)
  • The match_type (regular, semifinal, championship, or consolation)
  • The scheduled tee_time
  • Participants grouped by team
{
  "round": {
    "number": 1,
    "status": "scheduled",
    "matches": [
      {
        "id": "09a5bbfd-595b-4c83-b803-6f0b78679ae1",
        "title": "Friday Morning Foursomes Match 1",
        "match_format": "foursomes",
        "match_type": "regular",
        "tee_time": "2025-09-26T11:35:00+00:00",
        "back_nine": false,
        "status": "scheduled",
        "participants": [
          {
            "team": {
              "name": "USA"
            },
            "sequence": 1,
            "players": [
              {
                "id": "6db3e736-d86d-4181-aa3b-651b8c1bfdc1",
                "first_name": "Scottie",
                "last_name": "Scheffler"
              }
            ]
          },
          {
            "team": {
              "name": "Europe"
            },
            "sequence": 2,
            "players": [
              {
                "id": "da226913-b804-48de-adbf-96e956eb75ac",
                "first_name": "Rory",
                "last_name": "McIlroy"
              }
            ]
          }
        ]
      }
    ]
  }
}

Use this feed to:

  • Display the session schedule (e.g., Friday morning foursomes, Friday afternoon fourball)
  • Show team pairings within each match
  • Track which players are participating in each session
  • Detect match format changes across days

4. Track Team Standings and Match Results

Use the Tournament Leaderboard feed to retrieve overall team standings and per-match results.

GET https://api.sportradar.com/golf/{access_level}/{golf_tour}/v3/{language_code}/{season_year}/tournaments/{tournament_id}/leaderboard.{format}

In team events, the leaderboard response includes a top-level teams array with team-level scoring (points, position, tied status). Individual matches surface their own scoring and outcomes.

Team standings show:

  • team.position and team.tied for current standings
  • team.score for total team points (e.g., 14.5 points in a Ryder Cup)
  • team.strokes and team.money where applicable
  • Match-level results including current match score (e.g., "3 up", "halved")

For match-play scoring, watch for:

  • wins, losses, and halved counts per team and for every rostered player, present regardless of which sessions the player appeared in
  • Match-level score reflecting holes ahead or behind (e.g., 2 for 2 up, -1 for 1 down)
  • unplayed holes when a match ends before reaching 18

This feed shifts to a 3-second TTL during live play. Poll it on a regular cadence, or replace polling with the Push Leaderboard feed (see step 6), to keep team standings current.


5. Track Hole-by-Hole Match Scoring

Use the Scorecards Per Round feed to retrieve hole-by-hole match scoring. Match-play scoring differs from stroke-play scoring in important ways.

GET https://api.sportradar.com/golf/{access_level}/{golf_tour}/v3/{language_code}/{season_year}/tournaments/{tournament_id}/{round_type}/{round_number}/scores.{format}

In match play, each hole has an outcome (win, loss, or halved) and a running match_score reflecting which team or player is ahead. The structure is organized by match, with scoring grouped per team or player.

Key match-play scoring fields:

  • outcome per hole (win, loss, halved)
  • match_score showing the running match state after each hole
  • strokes per hole for each team or player
  • sequence for hole order within the match
  • unplayed count when a match concludes before hole 18

An unplayed hole carries only its number, par, and yardage, with no strokes or outcome; a hole that was played and lost carries outcome: "loss". The presence of outcome is what separates a hole that was never played from one a player lost. A match with status: "closed" is final.

Use this feed to power live match-play scoreboards, hole-by-hole match tickers, and detailed match views.


⚠️

Managing Structure Differences

Match-play scoring data is structured differently from stroke-play scoring. Build your integration to handle both match and player scoring branches based on the tournament's event_type and match_format.


6. Layer In Push Feeds for Real-Time Updates

Push Leaderboard and Push Scorecard stream updates throughout team events the same way they do for stroke-play tournaments. Push streams cover PGA Tour and DP World Tour events, which is where the Ryder Cup and Presidents Cup surface; for events on other tours, such as the Solheim Cup, use the RESTful feeds in steps 4 and 5.

GET https://api.sportradar.com/golf/{access_level}/stream/{golf_tour}/{language_code}/leaderboards/subscribe
GET https://api.sportradar.com/golf/{access_level}/stream/{golf_tour}/{language_code}/scorecards/subscribe

Both feeds support filtering by tournament, tournament_type, and scoring_system. Set scoring_system=match to scope Push streams specifically to match-play data.

In the event of a Push disconnection, recover missed data using the corresponding RESTful feed.


7. Monitor Status and Session Transitions

Team events progress through multiple sessions across multiple days. Monitor key status fields to drive your application's behavior:

  • tournament.status drives whether the event is upcoming, live, or final (delays surface as a suspended round status)
  • round.status drives per-session polling and display logic
  • match.status drives per-match scoring updates
  • match.match_format drives format-specific UI (foursomes vs. fourball vs. singles)

A typical Ryder Cup proceeds through five sessions: Friday foursomes, Friday fourball, Saturday foursomes, Saturday fourball, and Sunday singles. Each session is a separate round in the API, with its own format and set of matches.

Use the Daily Change Log to detect when tournament, pairing, or participant records have been updated between sessions.



Common Use Cases

Typical builds on this workflow include:

  • Powering Ryder Cup, Presidents Cup, and Solheim Cup scoreboards
  • Displaying session-by-session match results
  • Surfacing captain assignments and captain's picks
  • Driving broadcast overlays for cup-style events
  • Tracking team point totals across multi-day formats
  • Supporting fantasy and prediction applications scoped to team events

Best Practices

  • Check event_type on every tournament. Standard stroke-play feeds and team event feeds share endpoints but return different structures
  • Cache team rosters and captain assignments after the initial Tournament Summary call. These rarely change during the event
  • Build your scoring logic to handle both stroke-play and match-play structures. Match play introduces per-hole outcome values and running match_score rather than total strokes
  • Use match.match_format to drive format-specific UI (foursomes pairings vs. fourball pairings vs. singles)
  • Watch match.status transitions to detect match completions, which can occur before all 18 holes are played
  • Use the same Push feed infrastructure as stroke-play tournaments, with scoring_system=match to scope the stream when needed

Did this page help you?