Push Feeds
The NCAAFB 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: a dropped session can be resumed within 10 minutes with the missed messages replayed (see Recovering from Disconnections), and the matching REST feed fills any longer gap.
The Push Feeds
| Feed | What it streams |
|---|---|
| Push Events | Every play and game event as it lands, with the game header and situation context |
| Push Statistics | Team and player statistic lines updated as plays are entered |
Opening a Connection
Subscribe with a single GET; follow redirects and keep the connection open:
GET https://api.sportradar.com/ncaafb/{access_level}/stream/{language_code}/events/subscribeGET https://api.sportradar.com/ncaafb/{access_level}/stream/{language_code}/statistics/subscribeFiltering the Stream
By default a connection carries every live game. Query string parameters narrow the stream:
| Parameter | Purpose |
|---|---|
event_category | Event families such as redzone, two_minute, scoring_play, big_play, turnover |
event_type | Specific event types such as timeout, two_minute_warning, period_end, game_over |
match | A single game |
team | A single team's games |
status | inprogress or created |
locale | Language 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": "fd3b9a50-7b22-45ea-852b-fe9362affc9d",
"title": "Rose Bowl",
"parent_id": "9c77e6a1-d2c6-483a-a01e-150797e94e7e",
"status": "inprogress",
"coverage": "full",
"neutral_site": true,
"game_type": "playoff",
"playoff_game_type": "CFP Quarterfinal",
"expected_latency": 25,
"scheduled": "2026-01-01T21:00:00+00:00",
"entry_mode": "LDE",
"wx_temp": 63,
"wx_humidity": 94,
"wx_wind_speed": 6,
"wx_wind_direction": "S",
"wx_condition": "Partly cloudy",
"weather": "Partly cloudy Temp: 63 F, Humidity: 94%, Wind: S 6 mph",
"quarter": 1,
"clock": "15:00",
"conference_game": false,
"sr_id": "sr:match:66951994"
},
"event": {
"type": "play",
"id": "55618620-e750-11f0-a712-15d9367530ce",
"sequence": 1767301964210,
"clock": "15:00",
"home_points": 0,
"away_points": 0,
"created_at": "2026-01-01T21:12:44+00:00",
"updated_at": "2026-01-01T21:12:44+00:00",
"play_type": "kickoff",
"wall_clock": "2026-01-01T21:12:39+00:00",
"source": "SRUS",
"official": true,
"fake_punt": false,
"fake_field_goal": false,
"screen_pass": false,
"play_action": false,
"run_pass_option": false,
"description": "C.Talty kicks 65 yards from ALA 35 to the IND End Zone. Touchback."
}
},
"locale": "en",
"metadata": {
"match": "sd:match:fd3b9a50-7b22-45ea-852b-fe9362affc9d,sr:match:66951994",
"team": "sd:team:19775492-f1eb-4bc5-9e15-078ebd689c0f",
"league": "ncaafb",
"locale": "en",
"status": "inprogress",
"event_type": "kickoff",
"event_category": "",
"operation": "update",
"version": "v7"
}
}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": "Crimson Tide",
"market": "Alabama",
"alias": "ALA",
"id": "fd3b9a50-7b22-45ea-852b-fe9362affc9d",
"title": "Rose Bowl",
"parent_id": "9c77e6a1-d2c6-483a-a01e-150797e94e7e",
"status": "inprogress",
"coverage": "full",
"neutral_site": true,
"game_type": "playoff",
"playoff_game_type": "CFP Quarterfinal",
"expected_latency": 25,
"scheduled": "2026-01-01T21:00:00+00:00",
"entry_mode": "LDE",
"wx_temp": 63,
"wx_humidity": 94,
"wx_wind_speed": 6,
"wx_wind_direction": "S",
"wx_condition": "Partly cloudy",
"weather": "Partly cloudy Temp: 63 F, Humidity: 94%, Wind: S 6 mph",
"quarter": 1,
"clock": "15:00",
"conference_game": false,
"sr_id": "sr:match:66951994",
"team": {
"name": "Crimson Tide",
"market": "Alabama",
"alias": "ALA",
"id": "19775492-f1eb-4bc5-9e15-078ebd689c0f"
}
},
"locale": "en",
"metadata": {
"match": "sd:match:fd3b9a50-7b22-45ea-852b-fe9362affc9d,sr:match:66951994",
"league": "ncaafb",
"locale": "en",
"status": "inprogress",
"participant": "sd:team:19775492-f1eb-4bc5-9e15-078ebd689c0f",
"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:fd3b9a50-...,sr:match:66951994"is one game under both ID families- Event messages name the team in
teamand statistics messages name the team or player inparticipant; in the messages above these carry the GUID alone - Route messages by
metadata.matchbefore parsing the payload when you track several games on one connection - Filter high-interest moments client-side with
event_typeandevent_category, which carry the same values the query string parameters accept
Recovering from Disconnections
Should you stop receiving heartbeat messages, or be disconnected from the Push service for any reason, resume the session first:
- Keep the
sessionIdfrom the302redirect that answered your subscribe request (theLocationheader, or the final URL if your client follows redirects). - Within 10 minutes of the last message, repeat the same subscribe request with the same filter parameters and
resumeSessionId=<sessionId>added. A fresh token and redirect come back; do not reuse the old token. - The missed messages are replayed (up to 5,000 messages or 30 seconds, at least once, so de-duplicate), then the stream continues live.
After the window, or if any parameter differs, the request opens a new session with no replay and no error. The full procedure with sample requests is under Disconnections on the Push Feeds page.
If the window has passed, 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 NCAAFB 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.
Updated 7 days ago
