Push Feeds
Push feeds deliver tournament data in real time over a persistent connection, so you receive leaderboard and scoring changes as they happen instead of polling. Push complements the RESTful feeds: use Push for low-latency updates during live play, and REST for initial state and recovery.
Access
Golf Push feeds are an add-on service for Sportradar Realtime customers. You can build on the RESTful feeds first (see Tracking Live Tournaments) and layer Push on top once your account is entitled, without changing your data model. Contact your Sportradar representative to add Realtime access.
Subscribe URL
Open a streaming connection by subscribing to a push feed:
GET https://api.sportradar.com/golf/{access_level}/stream/{golf_tour}/{language_code}/{push_feed}/subscribe
x-api-key: YOUR_API_KEYThe available push_feed values are Push Leaderboard and Push Scorecard, available for PGA Tour and DP World Tour events.
The two channels behave differently:
- Push Leaderboard sends the entire leaderboard on every message (positions, score to par, holes and rounds completed). You do not need a reconciliation strategy unless a round has just ended.
- Push Scorecard sends one player per message (hole-by-hole scores). If two rounds are in progress at once, updates for both are pushed unless you filter, so you do need a reconciliation strategy in case of a disconnection.
Why the Push URL Has Nov3Unlike the REST feeds, the Push URL uses a
/stream/path with no version segment. Streaming endpoints are not path-versioned, so do not insertv3(orv2) into a Push URL by analogy with the tournament REST URL. The order is/golf/{access_level}/stream/{golf_tour}/{language_code}/{push_feed}/subscribe.
Making a Request
Connect with a streaming HTTP GET and keep the connection open to receive messages as they arrive:
curl --no-buffer --request GET \
--url "https://api.sportradar.com/golf/production/stream/pga/en/leaderboard/subscribe" \
--header "x-api-key: YOUR_API_KEY"Connection samples in Ruby and Java are provided in the reference.
Filtering the Stream
By default a Push feed delivers every in-progress event on the tour. Both channels accept query-string filters to narrow the stream:
tournament: a tournament id, to scope the stream to a single eventtournament_type: an event type, for exampletournament_type=strokescoring_system: a scoring system, for examplescoring_system=matchfor match play
Push Scorecard additionally supports round (a round sequence number, for example round=2) and player (a player id). tournament_type takes the same values as the tournament event_type described in Fundamentals, and scoring_system filters by the scoring model in play (for example scoring_system=match for match play). Parameter formats and filtered connection samples are on the Push Leaderboard and Push Scorecard reference pages.
Heartbeats and Disconnections
When no new information is available on a feed, a heartbeat message is sent every 5 seconds to keep the connection alive. Use the heartbeat to detect a dropped stream:
- If no message (data or heartbeat) arrives for longer than the heartbeat interval plus a margin, treat the stream as disconnected.
- Reconnect, then backfill from the RESTful feeds (Tournament Leaderboard and Scorecards Per Round) to recover anything missed while disconnected.
This heartbeat-timeout-then-REST-fallback pattern is the disconnect-detection contract referenced by Tracking Live Tournaments and Tracking Playoffs.
Sportradar IDs in Push Payloads
While the Golf API generally uses UUIDs as primary identifiers, Push payloads also include sr_id values on tournament, player, and metadata objects. These follow the standard Sportradar ID format (for example sr:stage:721700 and sr:competitor:46702) and are useful for correlating Push data with other Sportradar products. See ID Handling for how UUIDs and SR_IDs relate.
The tournament and player values in a payload's metadata are compound strings that combine the Sportradar data ID (the UUID) and the SR_ID, comma-separated:
{
"metadata": {
"tournament": "<tournament_uuid>,sr:stage:721700",
"player": "<player_uuid>,sr:competitor:46702"
}
}To use these, split each value on the comma: the first part is the UUID you already store from REST feeds, and the second is the SR_ID for cross-product joins.
Best Practices
- Use Push as the primary live channel and keep a slower REST poll as a safety net.
- Detect disconnects from the 5-second heartbeat; on reconnect, backfill from REST.
- Split the compound
tournamentandplayermetadata strings on the comma to recover the UUID and the SR_ID. - Store the
sr_idonly if you need cross-product correlation; otherwise keep driving your data model from UUIDs. - If you do not have Push entitlement, follow the RESTful live workflow and add Push later without changing your ID model.
Updated 7 days ago
