Integration GuidesReference Docs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Push Feeds

The NFL API's Push feeds stream data to you as it is entered, over a long-lived HTTP connection, removing the need to poll during live windows. Push complements the REST feeds rather than replacing them: there is no stateful session, so after any disconnection the matching REST feed fills the gap.


The Push Feeds

FeedWhat it streams
Push EventsEvery play and game event as it lands, with the game header and situation context
Push StatisticsTeam and player statistic lines updated as plays are entered
Push PulseA lightweight scoring pulse for score-and-clock use cases


Opening a Connection

Subscribe with a single GET; follow redirects and keep the connection open:

GET https://api.sportradar.com/nfl/official/{access_level}/stream/{language_code}/events/subscribe
GET https://api.sportradar.com/nfl/official/{access_level}/stream/{language_code}/statistics/subscribe
PUSH CONNECTION LIFECYCLEone connection covers every live NFL game
1. SubscribeGET /stream/en/events/subscribethe connection redirects, then stays open
2. Streamchunked messagesone JSON message per line; heartbeats every 5 seconds confirm a healthy connection
3. Applyreplace by ideach message carries full current state for its entity; newer replaces older
4. Reconnectresubscribe + REST catch-upon a drop, open a new connection and refill the gap from the matching REST feeds
Push complements the REST feeds; it does not replace them.


Filtering the Stream

By default a connection carries every live game. Query string parameters narrow the stream:

ParameterPurpose
event_categoryEvent families such as redzone, two_minute, scoring_play, big_play, turnover
event_typeSpecific event types such as timeout, two_minute_warning, period_end, game_over
matchA single game
teamA single team's games
statusinprogress or created
localeLanguage code (en)

The Push Events reference page carries the full parameter list with examples.


Reading the Stream

Messages arrive one JSON object per line. Heartbeats confirm the connection every five seconds:

{
    "heartbeat": {
        "interval": 5000
    }
}

An event message pairs the game header with the event itself (trimmed to scalar fields):

{
    "payload": {
        "game": {
            "id": "8e5c2ec7-7a64-4095-84dc-1aaf6ab964bb",
            "title": "Monday Night Football",
            "status": "inprogress",
            "coverage": "full",
            "game_type": "regular",
            "scheduled": "2025-10-28T00:15:00+00:00",
            "entry_mode": "LDE",
            "wx_temp": 54,
            "wx_humidity": 86,
            "wx_wind_speed": 5,
            "wx_wind_direction": "E",
            "wx_condition": "Overcast",
            "weather": "Overcast Temp: 54 F, Humidity: 86%, Wind: E 5 mph",
            "quarter": 1,
            "clock": "14:52",
            "conference_game": false,
            "sr_id": "sr:match:60575123"
        },
        "event": {
            "type": "play",
            "id": "d39d3a70-b38e-11f0-a6de-413cdae9e49d",
            "sequence": 1761610592006,
            "clock": "15:00",
            "home_points": 0,
            "away_points": 0,
            "created_at": "2025-10-28T00:16:32+00:00",
            "updated_at": "2025-10-28T00:16:33+00:00",
            "play_type": "kickoff",
            "wall_clock": "2025-10-28T00:16:14+00:00",
            "source": "SRUS",
            "official": true,
            "fake_punt": false,
            "fake_field_goal": false,
            "screen_pass": false,
            "play_action": false,
            "run_pass_option": false,
            "description": "H.Butker kicks 60 yards from KC 35 to the WAS 5. L.McCaffrey returns the kickoff. Tackled by KC at WAS 43."
        }
    },
    "locale": "en",
    "metadata": {
        "league": "nfl",
        "match": "sd:match:8e5c2ec7-7a64-4095-84dc-1aaf6ab964bb,sr:match:60575123",
        "status": "inprogress",
        "event_type": "kickoff",
        "event_category": "",
        "locale": "en",
        "operation": "update",
        "version": "v7",
        "team": "sd:team:6680d28d-d4d2-49f6-aace-5292d3ec02c2,sr:competitor:4422"
    }
}

Messages arrive ahead of the television picture. Broadcast integrations commonly hold the display of push data back so it lands with their video feed; apply that offset in the presentation layer and keep ingestion immediate.



Statistics Messages

Statistics messages carry the team context and the updated statistic lines (trimmed):

{
    "payload": {
        "name": "Chiefs",
        "market": "Kansas City",
        "alias": "KC",
        "id": "8e5c2ec7-7a64-4095-84dc-1aaf6ab964bb",
        "title": "Monday Night Football",
        "status": "inprogress",
        "coverage": "full",
        "game_type": "regular",
        "scheduled": "2025-10-28T00:15:00+00:00",
        "entry_mode": "LDE",
        "wx_temp": 54,
        "wx_humidity": 86,
        "wx_wind_speed": 5,
        "wx_wind_direction": "E",
        "wx_condition": "Overcast",
        "weather": "Overcast Temp: 54 F, Humidity: 86%, Wind: E 5 mph",
        "quarter": 1,
        "clock": "14:52",
        "conference_game": false,
        "sr_id": "sr:match:60575123",
        "team": {
            "name": "Chiefs",
            "market": "Kansas City",
            "alias": "KC",
            "id": "6680d28d-d4d2-49f6-aace-5292d3ec02c2",
            "sr_id": "sr:competitor:4422"
        }
    },
    "locale": "en",
    "metadata": {
        "league": "nfl",
        "match": "sd:match:8e5c2ec7-7a64-4095-84dc-1aaf6ab964bb,sr:match:60575123",
        "status": "inprogress",
        "participant": "sd:team:6680d28d-d4d2-49f6-aace-5292d3ec02c2,sr:competitor:4422",
        "locale": "en",
        "operation": "update",
        "version": "v7"
    }
}


Metadata and Routing

Every payload closes with a metadata block: the league, the game, the game status, the operation, and the event type or participant the message concerns. Comma-delimited values pair the sd:-prefixed GUID with the sr: URN for the same entity, so read them as an array:

  • "match": "sd:match:8e5c2ec7-...,sr:match:60575123" is one game under both ID families
  • Event messages name the team in team and statistics messages name the team or player in participant, each paired the same way (sd:team:...,sr:competitor:4422)
  • Route messages by metadata.match before parsing the payload when you track several games on one connection
  • Filter high-interest moments client-side with event_type and event_category, which carry the same values the query string parameters accept


Recovering from Disconnections

If you are disconnected, resubscribe and use the corresponding RESTful feed to catch up: request the Game Play-by-Play to recover missed plays, and the Game Statistics feed to refresh statistic lines. Design the catch-up path first; live streams should always have a REST fallback.


Testing Push

You can use our API Simulations to open a continuous Push simulation of a NFL game. Simulations replay past games as if they were live, over both REST and Push, so connection handling, parsing, and recovery can be exercised at any time of year.




Did this page help you?