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, ormix(rather thanstroke) - Teams with their own IDs, names, and aliases (e.g., "USA", "Europe")
- Matches with formats of
singles,fourball, orfoursomes - Match types of
regular,semifinal,championship, orconsolation. The knockout tiers appear in bracket events: the 2024 T-Mobile Match Play ranregularbracket matches, then asemifinalround and achampionshipmatch, andconsolationmarks a third-place match (staged annually at the WGC-Dell Technologies Match Play). Cup sessions areregular - Mix events (for example the T-Mobile Match Play) split the Tournament Summary into a
summariesarray with one part per format: astrokepart carrying thefield, then amatchpart carrying thebrackets - Player roles of
player,captain,vice-captain, orassistant - Captain's picks flagged via a
captains_pickboolean - 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 PracticeCheck the
event_typefield on a tournament before assuming a stroke-play structure. Tournaments withevent_typeofcup,team, ormixintroduce 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:
| Feed | Purpose |
|---|---|
| Tournament Schedule | Identify team events via event_type and discover tournament IDs |
| Tournament Summary | Retrieve team rosters, captain roles, and bracket structures |
| Tee Times Per Round | Retrieve match pairings, formats, and bracket groupings per session |
| Tournament Leaderboard | Retrieve overall team standings and match-level results |
| Scorecards Per Round | Retrieve hole-by-hole match scoring and per-hole outcomes |
| Push Leaderboard | Stream real-time team standings and match results |
| Push Scorecard | Stream 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
- Identify the team event via
event_type - Retrieve team rosters and captain assignments
- Pull match pairings and formats for each session
- Track team standings and match results
- 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_typedrives 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
formatidentifying 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 APIThe 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 sametournament.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 FormatsThe two-team model above applies to
cupevents. LIV Golf's franchise-team competition is modeled differently: LIV tournaments returnevent_type: strokewith ascoring_systemfield and noteamsarray. Treat LIV events as individual stroke play and derive team groupings from your own mapping. Always branch onevent_type(andscoring_systemwhere 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
sequencenumber reflecting tee-time order within the round - The
match_format(singles,fourball, orfoursomes) - The
match_type(regular,semifinal,championship, orconsolation) - 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.positionandteam.tiedfor current standingsteam.scorefor total team points (e.g., 14.5 points in a Ryder Cup)team.strokesandteam.moneywhere applicable- Match-level results including current match score (e.g., "3 up", "halved")
For match-play scoring, watch for:
wins,losses, andhalvedcounts per team and for every rostered player, present regardless of which sessions the player appeared in- Match-level
scorereflecting holes ahead or behind (e.g.,2for 2 up,-1for 1 down) unplayedholes 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:
outcomeper hole (win,loss,halved)match_scoreshowing the running match state after each holestrokesper hole for each team or playersequencefor hole order within the matchunplayedcount 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 DifferencesMatch-play scoring data is structured differently from stroke-play scoring. Build your integration to handle both
matchandplayerscoring branches based on the tournament'sevent_typeandmatch_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/subscribeBoth 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.statusdrives whether the event is upcoming, live, or final (delays surface as asuspendedround status)round.statusdrives per-session polling and display logicmatch.statusdrives per-match scoring updatesmatch.match_formatdrives 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_typeon 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
outcomevalues and runningmatch_scorerather than total strokes - Use
match.match_formatto drive format-specific UI (foursomes pairings vs. fourball pairings vs. singles) - Watch
match.statustransitions 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=matchto scope the stream when needed
Updated 6 days ago
