Integration GuidesReference Docs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Live Game Updates

Use this guide to effectively access live NCAA Football (NCAAFB) game updates and statistics. It also covers the Daily Change Log endpoint which can be used to track postgame stat revisions.

Prerequisite - Accessing Available Seasons

To avoid confusion and ensure you're accessing available data, refer to our Seasons feed. This resource lists all the seasons for which we have data.

For example: To ensure data availability for future seasons, such as a schedule in advance of when a season begins, first check the Seasons feed to verify that data for that specific season is already provided.

Starting with this feed can prevent unnecessary errors and streamline your data retrieval process.

📆

When are the schedules and game times for FBS and FCS teams typically released?

Schedulers and game times are typically released in the spring, around the month of April.



Getting Started - Accessing the Games You Want

  1. Find the game ID by querying one of the following feeds:

    • Current Season Schedule
    • Current Week Schedule
    • Season Schedule
    • Weekly Schedule

      👍

      Tip - Use Current Schedule Feeds

      You can use the Current Week Schedule or Current Season Schedule feeds, to verify the specific week or type of season that's currently in progress. These feeds automatically return the schedule for the ongoing season or week, which is useful if you're unsure about the current part of the season.

      Use these feeds for non-live schedule retrieval only.

  2. Use the Game Id to access live data from any of the following feeds:

    Data TypeRecommended Feed
    Play-by-Play Data- Game Play-by-Play
    - Push Events
    Scoring Updates- Game Boxscore
    - Game Play-by-Play
    Game Statistics- Game Statistics
    - Push Statistics

    📘

    Using Game IDs for Push Feeds

    Using a specific game ID is optional when filtering the push events or push statistics feeds. Without specifying a game ID, the feeds will automatically return data for all games currently in progress.


Utilizing Schedule Feeds

You only need to call the schedule feeds once or twice a day at most to get the most up-to-date season information. Follow these steps:

  1. Load the necessary schedule using any of the schedule feeds.
  2. To stay updated on any scheduling changes, refer to the Daily Change Log feed. More details are available in the Change Log section.
  3. Ensure to start requests to live games no earlier than 10 minutes before the scheduled time.

Utilizing the Current_Week Path in API Requests:

The current_week path convention in API requests simplifies retrieving data specific to the ongoing week of an NCAAFB season.

Current Week Schedule:

[https://api.sportradar.com/ncaafb/{access_level/v7/{language}/games/current_week/{format}]

By using this convention, you avoid the need to specify the season's year and type (such as regular season or playoffs) in your query parameters. This feature is particularly useful for applications that need to automatically fetch the most current game week information without manual updates to the query as the season progresses.

Limitations of Schedule Feeds for Real-Time Game Status Updates:

  • The Season Schedule feed provides game status information, including statuses like closed, inprogress, and complete. However, it does not update as frequently as the real-time game feeds, which offer more current game status updates.
  • For more immediate updates, consider using more real-time feeds like the Game Play-by-Play or Game Boxscore endpoints, which are designed to provide the most up-to-date status changes during games.


Play-by-Play Data

Play-by-Play data provides a detailed, sequential account of every action that occurs during a game, including all plays and events. This data type is crucial for analyzing game flow, player performance, and tactical decisions in real-time.


Option 1 - Using the Game Play-by-Play Feed

You can call the Game Play-by-Play feed to get a live play-by-play timeline, including possession and ball location as well as all team and player statistics earned on each play.

How to Pull the Game Play-by-Play Feed:

  1. Ensure you have your game IDs and schedules.
  2. Call the Play-by-Play feed: Use your game ID to request the Play-by-Play feed for real-time updates throughout the live game.

Recommended Pull Frequency:

  • Request this feed no sooner than 10 minutes before the scheduled start of the game (status = scheduled) based on your specific needs.
  • Once the game is in progress (status = inprogress), you may query the feed as necessary.
  • The endpoint offers real-time data updates and maintains a two-second TTL once the game status changes to inprogress.
  • Utilize the Daily Change Log to capture data changes after a game has ended.

Play-by-Play Example:

{
"pbp": [
  {
    "type": "drive",
    "id": "ba92a183-0fa8-4baa-886f-ac8f94f07e5f",
    "sequence": 1,
    "start_reason": "Kickoff",
    "end_reason": "Touchdown",
    "play_count": 12,
    "duration": "5:42",
    "first_downs": 4,
    "gain": 80,
    "penalty_yards": -5,
    "inside_20": true,
    "scoring_drive": true,
    "created_at": "2021-11-26T18:31:46+00:00",
    "updated_at": "2021-11-26T18:40:05+00:00",
    "events": [
      {
        "type": "play",
        "id": "2cf58280-4ee4-11ec-ae50-bb2ca00a4d17",
        "sequence": 1637951505578,
        "clock": "15:00",
        "home_points": 0,
        "away_points": 0,
        "play_type": "kickoff",
        "wall_clock": "2021-11-26T18:31:40+00:00",
        "description": "C.Shudak kicks 65 yards from IOW 35 to the NEB End Zone. Touchback.",
        "fake_punt": false,
        "fake_field_goal": false,
        "screen_pass": false,
        "play_action": false,
        "run_pass_option": false,
        "created_at": "2021-11-26T18:31:45+00:00",
        "updated_at": "2021-11-26T18:31:46+00:00",
        "start_situation": {
          "clock": "15:00",
          "down": 0,
          "yfd": 0,
          "possession": {
            "id": "a2ee495d-37c7-45ac-ac3d-d3a492a219c1",
            "name": "Hawkeyes",
            "market": "Iowa",
            "alias": "IOW"
          },
          "location": {
            "id": "a2ee495d-37c7-45ac-ac3d-d3a492a219c1",
            "name": "Hawkeyes",
            "market": "Iowa",
            "alias": "IOW",
            "yardline": 35
          }
        },
        "end_situation": {
          "clock": "15:00",
          "down": 1,
          "yfd": 10,
          "possession": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB"
          },
          "location": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB",
            "yardline": 25
          }
        },
        "statistics": [
          {
            "stat_type": "kick",
            "attempt": 1,
            "yards": 65,
            "net_yards": 40,
            "touchback": 1,
            "player": {
              "id": "e8bb8783-1c87-4b28-a1d8-44cf31a3fbe1",
              "name": "Caleb Shudak",
              "jersey": "10",
              "position": "K"
            },
            "team": {
              "id": "a2ee495d-37c7-45ac-ac3d-d3a492a219c1",
              "name": "Hawkeyes",
              "market": "Iowa",
              "alias": "IOW"
            }
          },
          {
            "stat_type": "return",
            "touchback": 1,
            "category": "kick_return",
            "player": {
              "id": "team",
              "name": "(Team)"
            },
            "team": {
              "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
              "name": "Cornhuskers",
              "market": "Nebraska",
              "alias": "NEB"
            }
          }
        ],
        "details": [
          {
            "category": "kick_off",
            "description": "C.Shudak kicks 65 yards from IOW 35 to the NEB End Zone.",
            "sequence": 0,
            "yards": 65,
            "result": "touchback",
            "start_location": {
              "alias": "IOW",
              "yardline": 35
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 0
            },
            "players": [
              {
                "id": "e8bb8783-1c87-4b28-a1d8-44cf31a3fbe1",
                "name": "Caleb Shudak",
                "jersey": "10",
                "position": "K",
                "role": "kick"
              }
            ]
          },
          {
            "category": "touchback",
            "description": "Touchback.",
            "sequence": 1,
            "result": "touchback",
            "start_location": {
              "alias": "NEB",
              "yardline": 0
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 25
            },
            "players": [
              {
                "id": "e8bb8783-1c87-4b28-a1d8-44cf31a3fbe1",
                "name": "Caleb Shudak",
                "jersey": "10",
                "position": "K",
                "role": "kick"
              },
              {
                "id": "team",
                "name": "(Team)",
                "role": "touchback"
              }
            ]
          }
        ]
      },
      {
        "type": "play",
        "id": "1cad15c0-4ee7-11ec-ae55-bb2ca00a4d17",
        "sequence": 1637951570591,
        "clock": "15:00",
        "home_points": 0,
        "away_points": 0,
        "play_type": "penalty",
        "wall_clock": "2021-11-26T18:32:44+00:00",
        "description": "PENALTY on NEB-NEB, Delay of Game, 5 yards, accepted. No Play.",
        "fake_punt": false,
        "fake_field_goal": false,
        "screen_pass": false,
        "play_action": false,
        "run_pass_option": false,
        "created_at": "2021-11-26T18:32:50+00:00",
        "updated_at": "2021-11-26T18:32:51+00:00",
        "start_situation": {
          "clock": "15:00",
          "down": 1,
          "yfd": 10,
          "possession": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB"
          },
          "location": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB",
            "yardline": 25
          }
        },
        "end_situation": {
          "clock": "15:00",
          "down": 1,
          "yfd": 15,
          "possession": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB"
          },
          "location": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB",
            "yardline": 20
          }
        },
        "statistics": [
          {
            "stat_type": "penalty",
            "penalty": 1,
            "yards": 5,
            "player": {
              "id": "team",
              "name": "(Team)"
            },
            "team": {
              "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
              "name": "Cornhuskers",
              "market": "Nebraska",
              "alias": "NEB"
            }
          }
        ],
        "details": [
          {
            "category": "penalty",
            "description": "PENALTY on NEB-NEB, Delay of Game, 5 yards, accepted.",
            "sequence": 0,
            "start_location": {
              "alias": "NEB",
              "yardline": 25
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 20
            },
            "penalty": {
              "description": "Delay of Game",
              "result": "accepted",
              "yards": 5,
              "team": {
                "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
                "name": "Cornhuskers",
                "market": "Nebraska",
                "alias": "NEB"
              }
            },
            "players": [
              {
                "id": "team",
                "name": "(Team)",
                "role": "penalty"
              }
            ]
          },
          {
            "category": "no_play",
            "description": "No Play.",
            "sequence": 1,
            "start_location": {
              "alias": "NEB",
              "yardline": 20
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 20
            },
            "players": []
          }
        ]
      },
      {
        "type": "play",
        "id": "434af300-4ee7-11ec-ae55-bb2ca00a4d17",
        "sequence": 1637951599172,
        "clock": "15:00",
        "home_points": 0,
        "away_points": 0,
        "play_type": "pass",
        "wall_clock": "2021-11-26T18:33:06+00:00",
        "description": "L.Smothers pass short middle complete to NEB 20. Catch made by S.Toure at NEB 20. Gain of 19 yards. Tackled by J.Koerner at NEB 39.",
        "fake_punt": false,
        "fake_field_goal": false,
        "screen_pass": false,
        "play_action": false,
        "run_pass_option": false,
        "created_at": "2021-11-26T18:33:19+00:00",
        "updated_at": "2021-11-26T18:33:56+00:00",
        "start_situation": {
          "clock": "15:00",
          "down": 1,
          "yfd": 15,
          "possession": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB"
          },
          "location": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB",
            "yardline": 20
          }
        },
        "end_situation": {
          "clock": "14:38",
          "down": 1,
          "yfd": 10,
          "possession": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB"
          },
          "location": {
            "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
            "name": "Cornhuskers",
            "market": "Nebraska",
            "alias": "NEB",
            "yardline": 39
          }
        },
        "statistics": [
          {
            "stat_type": "pass",
            "attempt": 1,
            "complete": 1,
            "yards": 19,
            "att_yards": 0,
            "firstdown": 1,
            "inside_20": 0,
            "goaltogo": 0,
            "player": {
              "id": "a239721c-71b4-40c7-b65b-aaae8755b17c",
              "name": "Logan Smothers",
              "jersey": "08",
              "position": "QB"
            },
            "team": {
              "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
              "name": "Cornhuskers",
              "market": "Nebraska",
              "alias": "NEB"
            }
          },
          {
            "stat_type": "receive",
            "firstdown": 1,
            "target": 1,
            "reception": 1,
            "yards": 19,
            "yards_after_catch": 19,
            "inside_20": 0,
            "goaltogo": 0,
            "player": {
              "id": "ecc7422b-e053-4ace-afec-ae1320e7ab64",
              "name": "Samori Toure",
              "jersey": "03",
              "position": "WR"
            },
            "team": {
              "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
              "name": "Cornhuskers",
              "market": "Nebraska",
              "alias": "NEB"
            }
          },
          {
            "stat_type": "defense",
            "tackle": 1,
            "category": "defense",
            "player": {
              "id": "c736b98a-678e-467d-8a8b-86e447856fd9",
              "name": "Jack Koerner",
              "jersey": "28",
              "position": "DB"
            },
            "team": {
              "id": "a2ee495d-37c7-45ac-ac3d-d3a492a219c1",
              "name": "Hawkeyes",
              "market": "Iowa",
              "alias": "IOW"
            }
          },
          {
            "stat_type": "first_down",
            "category": "pass",
            "player": {
              "id": "team",
              "name": "(Team)"
            },
            "team": {
              "id": "98833e65-ab72-482d-b3c0-13f8656629c0",
              "name": "Cornhuskers",
              "market": "Nebraska",
              "alias": "NEB"
            }
          }
        ],
        "details": [
          {
            "category": "pass_completion",
            "description": "L.Smothers pass short middle complete to NEB 20.",
            "sequence": 0,
            "direction": "short middle",
            "yards": 19,
            "start_location": {
              "alias": "NEB",
              "yardline": 20
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 20
            },
            "players": [
              {
                "id": "a239721c-71b4-40c7-b65b-aaae8755b17c",
                "name": "Logan Smothers",
                "jersey": "08",
                "position": "QB",
                "role": "pass"
              }
            ]
          },
          {
            "category": "pass_reception",
            "description": "Catch made by S.Toure at NEB 20. Gain of 19 yards.",
            "sequence": 1,
            "yards": 19,
            "result": "tackled",
            "start_location": {
              "alias": "NEB",
              "yardline": 20
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 39
            },
            "players": [
              {
                "id": "ecc7422b-e053-4ace-afec-ae1320e7ab64",
                "name": "Samori Toure",
                "jersey": "03",
                "position": "WR",
                "role": "catch"
              }
            ]
          },
          {
            "category": "tackle",
            "description": "Tackled by J.Koerner at NEB 39.",
            "sequence": 2,
            "start_location": {
              "alias": "NEB",
              "yardline": 39
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 39
            },
            "players": [
              {
                "id": "c736b98a-678e-467d-8a8b-86e447856fd9",
                "name": "Jack Koerner",
                "jersey": "28",
                "position": "DB",
                "role": "tackle"
              }
            ]
          },
          {
            "category": "first_down",
            "sequence": 3,
            "result": "pass",
            "start_location": {
              "alias": "NEB",
              "yardline": 39
            },
            "end_location": {
              "alias": "NEB",
              "yardline": 39
            },
            "players": [
              {
                "id": "team",
                "name": "(Team)",
                "role": "first_down"
              }
            ]
          }
        ]
      }
    ]
  }
],

"_comment": "Generation started @ 2024-08-07 14:02:16 UTC ended @ 2024-08-07 14:02:17 UTC"
}

In this play-by-play example, the drive begins with a kickoff by the Hawkeyes' Caleb Shudak from their 35-yard line, resulting in a touchback as the ball reaches the end zone. The Cornhuskers then start their drive from their 25-yard line but immediately incur a penalty for delay of game, pushing them back 5 yards to their 20-yard line. This penalty does not result in a play being run. Following this, Logan Smothers completes a 19-yard pass to Samori Toure, advancing the ball to the Nebraska 39-yard line and achieving a first down. The sequence includes a kickoff, a penalty, and a successful pass play, capturing the drive's initial challenges and subsequent progress. This detailed play-by-play data captures the dynamics of each play, including starting and ending situations, which are crucial for in-depth game analysis and stats tracking.

You could visualize this play in your application by creating a graphic similar to the one shown. The graphic illustrates a kickoff by Iowa's Caleb Shudak from their 35-yard line, resulting in a touchback as the ball reaches the end zone. The subsequent drive by Nebraska starts at their 25-yard line but is initially pushed back due to a delay of game penalty. This is followed by a successful short middle pass from L. Smothers to S. Toure, resulting in a 19-yard gain to the Nebraska 39-yard line.

Use Case:

In your sports analytics application, you could track and display detailed play-by-play data like the kickoff by Caleb Shudak of the Iowa Hawkeyes. For instance, you can analyze his kick that traveled 65 yards resulting in a touchback and note the subsequent drive details. This includes Nebraska's penalty for delay of game, followed by a 19-yard pass completion.


Option 2 - Using the Push Events and Game Play-by-Play Feeds

The Push Events feed delivers live play-by-play data with a single API call, optimizing real-time updates and reducing API calls. However, it may lack the detailed boxscore information and broader league statistics found in the Game Play-by-Play feed.

👍

Tip - Compare Data Points

Compare the data points returned by the Game Play-by-Play feed with those from the Push Events feed to understand the specific information each provides.

Streamline your access to live game updates by combining the Push Events and Game Play-by-Play feeds:

  1. Open a connection with a single call to the Push Events feed to receive real-time updates.
  2. Push feeds automatically deliver JSON payloads through a push service, minimizing the number of calls required.
  3. Supplement this with the RESTful Game Play-by-Play feed to obtain detailed statistics and comprehensive game data when needed.

Note: You need to be a Realtime customer to make use of the Push feature.

How to Pull the Push Events Feed:

  • Add the match parameter with the specific game id. Without the match parameter the feed will return data for all live NCAAFB games.
  • The Push Events Feed should not be used exclusively; supplement it with the Game Play-by-Play feed for comprehensive data coverage.
  • Certain statistics are only available through the RESTful API and not included in the Push Events Feed.
  • In the event of a disconnection from the Push Events Feed, it's not possible to resume where you left off. To ensure continuous coverage, use multiple Push Feeds and supplement with RESTful feeds as a fallback to retrieve any missed timeline information during live games.

👍

Tip - Open Simultaneous Push Connections

Opening multiple connections to the push events feed boosts your application's reliability and flexibility. It enables simultaneous monitoring of various games or data types and ensures continuous data flow, even if one connection fails. This method also enhances scalability and data management, vital for applications needing real-time updates.

Play-by-Play vs. Push Scenario:

In a live sports tracking app, you might use the Push Events feed to receive real-time notifications of major events like touchdowns and penalties. However, for a user-requested feature that provides a detailed timeline of each drive, including minor plays and player statistics, you may supplement with the Game Play-by-Play feed to fetch comprehensive game details not covered by the push notifications. This ensures the app delivers both quick updates and in-depth game analysis.

🏈

Game Status Workflows

For more on what feeds look like throughout the duration of a game, see the Game Status Workflow page.



Scoring Updates

If your main interest is scoring data, use the Game Boxscore feed. While the Game Play-by-Play and Push Events feeds also include scoring data, the Game Boxscore feed offers more detailed scoring information for each team, complete with play-by-play breakdowns of all scoring drives in NCAAFB games.

How to Pull the Game Boxscore Feed:

  1. Ensure you have your game IDs and schedules.
  2. Call the Game Boxscore feed: Use your game ID to request the Game Boxscore feed for real-time scoring updates throughout the live game.

Recommended Pull Frequency:

  • Request this feed no sooner than 10 minutes before the scheduled start of the game (status = scheduled) based on your specific needs.
  • Once the game is in progress (status = inprogress), you may query the feed as necessary.
  • The endpoint offers real-time data updates and maintains a two-second TTL once the game status changes to inprogress.
  • Utilize the Daily Change Log to capture data changes after a game has ended.

Game Boxscore Example:

{
  
  "scoring_plays": [
    {
      "type": "play",
      "id": "db27f980-54e8-11ee-83fb-d98409305972",
      "sequence": 1694906986380,
      "clock": "5:39",
      "home_points": 0,
      "away_points": 6,
      "play_type": "pass",
      "scoring_play": true,
      "wall_clock": "2023-09-16T23:29:28+00:00",
      "description": "J.Milton pass complete to FLA 11. Catch made by R.Keyton at FLA 11. Gain of 11 yards. R.Keyton for 11 yards, TOUCHDOWN.",
      "scoring_description": "J.Milton pass complete to FLA 11. Catch made by R.Keyton at FLA 11. Gain of 11 yards. R.Keyton for 11 yards, TOUCHDOWN.",
      "fake_punt": false,
      "fake_field_goal": false,
      "screen_pass": false,
      "play_action": false,
      "run_pass_option": false,
      "created_at": "2023-09-16T23:29:46+00:00",
      "updated_at": "2023-09-16T23:34:13+00:00",
      "start_situation": {
        "clock": "5:39",
        "down": 1,
        "yfd": 10,
        "possession": {
          "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
          "name": "Volunteers",
          "market": "Tennessee",
          "alias": "TEN"
        },
        "location": {
          "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
          "name": "Gators",
          "market": "Florida",
          "alias": "FLA",
          "yardline": 11
        }
      },
      "end_situation": {
        "clock": "5:33",
        "down": 0,
        "yfd": 0,
        "possession": {
          "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
          "name": "Volunteers",
          "market": "Tennessee",
          "alias": "TEN"
        },
        "location": {
          "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
          "name": "Gators",
          "market": "Florida",
          "alias": "FLA",
          "yardline": 3
        }
      },
      "score": {
        "sequence": 2,
        "clock": "5:33",
        "points": 7,
        "home_points": 0,
        "away_points": 7,
        "points-after-play": {
          "id": "ecd286f0-54e8-11ee-83fb-d98409305972",
          "sequence": 1694906994664,
          "type": "extra_point"
        }
      },
      "statistics": [
        {
          "stat_type": "pass",
          "attempt": 1,
          "complete": 1,
          "yards": 11,
          "att_yards": 0,
          "firstdown": 1,
          "touchdown": 1,
          "inside_20": 1,
          "goaltogo": 0,
          "player": {
            "id": "e4510cb9-b31b-404e-976f-f443b621cadb",
            "name": "Joe Milton III",
            "jersey": "07",
            "position": "QB"
          },
          "team": {
            "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
            "name": "Volunteers",
            "market": "Tennessee",
            "alias": "TEN"
          }
        },
        {
          "stat_type": "receive",
          "firstdown": 1,
          "touchdown": 1,
          "target": 1,
          "reception": 1,
          "yards": 11,
          "yards_after_catch": 11,
          "inside_20": 1,
          "goaltogo": 0,
          "player": {
            "id": "4c686e3a-7e8e-46f2-86d3-dd8fa5281f97",
            "name": "Ramel Keyton",
            "jersey": "09",
            "position": "WR"
          },
          "team": {
            "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
            "name": "Volunteers",
            "market": "Tennessee",
            "alias": "TEN"
          }
        },
        {
          "stat_type": "first_down",
          "category": "pass",
          "player": {
            "id": "4c686e3a-7e8e-46f2-86d3-dd8fa5281f97",
            "name": "Ramel Keyton",
            "jersey": "09",
            "position": "WR"
          },
          "team": {
            "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
            "name": "Volunteers",
            "market": "Tennessee",
            "alias": "TEN"
          }
        }
      ],
      "details": [
        {
          "category": "pass_completion",
          "description": "J.Milton pass complete to FLA 11.",
          "sequence": 0,
          "yards": 11,
          "start_location": {
            "alias": "FLA",
            "yardline": 11
          },
          "end_location": {
            "alias": "FLA",
            "yardline": 11
          },
          "players": [
            {
              "id": "e4510cb9-b31b-404e-976f-f443b621cadb",
              "name": "Joe Milton III",
              "jersey": "07",
              "position": "QB",
              "role": "pass"
            }
          ]
        },
        {
          "category": "pass_reception",
          "description": "Catch made by R.Keyton at FLA 11. Gain of 11 yards.",
          "sequence": 1,
          "yards": 11,
          "result": "touchdown",
          "start_location": {
            "alias": "FLA",
            "yardline": 11
          },
          "end_location": {
            "alias": "FLA",
            "yardline": 0
          },
          "players": [
            {
              "id": "4c686e3a-7e8e-46f2-86d3-dd8fa5281f97",
              "name": "Ramel Keyton",
              "jersey": "09",
              "position": "WR",
              "role": "catch"
            }
          ]
        },
        {
          "category": "touchdown",
          "description": "R.Keyton for 11 yards, TOUCHDOWN.",
          "sequence": 2,
          "yards": 11,
          "result": "touchdown",
          "start_location": {
            "alias": "FLA",
            "yardline": 0
          },
          "end_location": {
            "alias": "FLA",
            "yardline": 0
          },
          "players": [
            {
              "id": "4c686e3a-7e8e-46f2-86d3-dd8fa5281f97",
              "name": "Ramel Keyton",
              "jersey": "09",
              "position": "WR",
              "role": "catch"
            }
          ]
        }
      ],
      "quarter": {
        "id": "106446b2-97b8-4780-aac5-637670093d24",
        "number": 1,
        "sequence": 1
      }
    },
    {
      "type": "play",
      "id": "ecd286f0-54e8-11ee-83fb-d98409305972",
      "sequence": 1694906994664,
      "clock": "5:33",
      "home_points": 0,
      "away_points": 7,
      "play_type": "extra_point",
      "scoring_play": true,
      "wall_clock": "2023-09-16T23:29:52+00:00",
      "description": "C.Campbell extra point is good.",
      "scoring_description": "J.Milton pass complete to FLA 11. Catch made by R.Keyton at FLA 11. Gain of 11 yards. R.Keyton for 11 yards, TOUCHDOWN.",
      "fake_punt": false,
      "fake_field_goal": false,
      "screen_pass": false,
      "play_action": false,
      "run_pass_option": false,
      "created_at": "2023-09-16T23:29:54+00:00",
      "updated_at": "2023-09-16T23:34:13+00:00",
      "start_situation": {
        "clock": "5:33",
        "down": 0,
        "yfd": 0,
        "possession": {
          "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
          "name": "Volunteers",
          "market": "Tennessee",
          "alias": "TEN"
        },
        "location": {
          "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
          "name": "Gators",
          "market": "Florida",
          "alias": "FLA",
          "yardline": 3
        }
      },
      "end_situation": {
        "clock": "5:33",
        "down": 0,
        "yfd": 0,
        "possession": {
          "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
          "name": "Volunteers",
          "market": "Tennessee",
          "alias": "TEN"
        },
        "location": {
          "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
          "name": "Volunteers",
          "market": "Tennessee",
          "alias": "TEN",
          "yardline": 35
        }
      },
      "statistics": [
        {
          "stat_type": "extra_point",
          "attempt": 1,
          "made": 1,
          "player": {
            "id": "6534c72c-eefb-49fb-a16b-63e293f21a7c",
            "name": "Charles Campbell",
            "jersey": "19",
            "position": "K"
          },
          "team": {
            "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
            "name": "Volunteers",
            "market": "Tennessee",
            "alias": "TEN"
          }
        }
      ],
      "details": [
        {
          "category": "extra_point_attempt",
          "description": "C.Campbell extra point is good.",
          "sequence": 0,
          "result": "good",
          "start_location": {
            "alias": "FLA",
            "yardline": 3
          },
          "end_location": {
            "alias": "FLA",
            "yardline": 3
          },
          "players": [
            {
              "id": "6534c72c-eefb-49fb-a16b-63e293f21a7c",
              "name": "Charles Campbell",
              "jersey": "19",
              "position": "K",
              "role": "kick"
            }
          ]
        }
      ],
      "quarter": {
        "id": "106446b2-97b8-4780-aac5-637670093d24",
        "number": 1,
        "sequence": 1
      }
    },
    {
      "type": "play",
      "id": "ee1300c0-54e9-11ee-83fb-d98409305972",
      "sequence": 1694907460070,
      "clock": "4:22",
      "home_points": 6,
      "away_points": 7,
      "play_type": "rush",
      "scoring_play": true,
      "wall_clock": "2023-09-16T23:37:12+00:00",
      "description": "T.Etienne rushed to TEN End Zone for 62 yards. T.Etienne for 62 yards, TOUCHDOWN.",
      "scoring_description": "T.Etienne rushed to TEN End Zone for 62 yards. T.Etienne for 62 yards, TOUCHDOWN.",
      "fake_punt": false,
      "fake_field_goal": false,
      "screen_pass": false,
      "play_action": false,
      "run_pass_option": false,
      "created_at": "2023-09-16T23:37:40+00:00",
      "updated_at": "2023-09-16T23:37:41+00:00",
      "start_situation": {
        "clock": "4:22",
        "down": 1,
        "yfd": 10,
        "possession": {
          "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
          "name": "Gators",
          "market": "Florida",
          "alias": "FLA"
        },
        "location": {
          "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
          "name": "Gators",
          "market": "Florida",
          "alias": "FLA",
          "yardline": 38
        }
      },
      "end_situation": {
        "clock": "4:10",
        "down": 0,
        "yfd": 0,
        "possession": {
          "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
          "name": "Gators",
          "market": "Florida",
          "alias": "FLA"
        },
        "location": {
          "id": "9ecb9f6b-df4a-4a92-aaa4-5d50a5286bdd",
          "name": "Volunteers",
          "market": "Tennessee",
          "alias": "TEN",
          "yardline": 3
        }
      },
      "score": {
        "sequence": 4,
        "clock": "4:10",
        "points": 6,
        "home_points": 6,
        "away_points": 7,
        "points-after-play": {
          "id": "0711edc0-54ea-11ee-83fb-d98409305972",
          "sequence": 1694907509568,
          "type": "extra_point"
        }
      },
      "statistics": [
        {
          "stat_type": "rush",
          "attempt": 1,
          "yards": 62,
          "touchdown": 1,
          "firstdown": 1,
          "inside_20": 0,
          "goaltogo": 0,
          "player": {
            "id": "668de070-8e98-11ec-8d02-85ead82574a9",
            "name": "Trevor Etienne",
            "jersey": "07",
            "position": "RB"
          },
          "team": {
            "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
            "name": "Gators",
            "market": "Florida",
            "alias": "FLA"
          }
        },
        {
          "stat_type": "first_down",
          "category": "rush",
          "player": {
            "id": "668de070-8e98-11ec-8d02-85ead82574a9",
            "name": "Trevor Etienne",
            "jersey": "07",
            "position": "RB"
          },
          "team": {
            "id": "c765cbff-99d8-4c43-8f6b-e49577ca18fa",
            "name": "Gators",
            "market": "Florida",
            "alias": "FLA"
          }
        }
      ],
      "details": [
        {
          "category": "rush",
          "description": "T.Etienne rushed to TEN End Zone for 62 yards.",
          "sequence": 0,
          "yards": 62,
          "result": "touchdown",
          "start_location": {
            "alias": "FLA",
            "yardline": 38
          },
          "end_location": {
            "alias": "TEN",
            "yardline": 0
          },
          "players": [
            {
              "id": "668de070-8e98-11ec-8d02-85ead82574a9",
              "name": "Trevor Etienne",
              "jersey": "07",
              "position": "RB",
              "role": "rush"
            }
          ]
        },
        {
          "category": "touchdown",
          "description": "T.Etienne for 62 yards, TOUCHDOWN.",
          "sequence": 1,
          "yards": 62,
          "result": "touchdown",
          "start_location": {
            "alias": "TEN",
            "yardline": 0
          },
          "end_location": {
            "alias": "TEN",
            "yardline": 0
          },
          "players": [
            {
              "id": "668de070-8e98-11ec-8d02-85ead82574a9",
              "name": "Trevor Etienne",
              "jersey": "07",
              "position": "RB",
              "role": "rush"
            }
          ]
        }
      ],
      "quarter": {
        "id": "106446b2-97b8-4780-aac5-637670093d24",
        "number": 1,
        "sequence": 1
      }
    }
  ]
}

The example from the Gamebox Score feed illustrates its focus on detailed scoring plays, such as the play-by-play data for specific scoring drives. The first play shown in the example is a pass from Joe Milton III of the Tennessee Volunteers to Ramel Keyton that resulted in an 11-yard touchdown against the Florida Gators. The detail provided includes game context like the clock time, points scored by both home and away teams, and a brief description of the action on the field.

The visual shows a summary from the Gamebox Score feed for a game between the Tennessee Volunteers and the Florida Gators, detailing key game statistics such as points scored, total yardage, and first downs.


📸

Accessing Headshots and Team Logos

To access team logos and player headshots, use the Images API.

Use Case:

A sports analyst uses this data to enhance a broadcast or article, providing viewers or readers with a detailed breakdown of key plays that influenced the game's outcome.



Game Statistics

Game statistics encompass quantifiable data points collected from a sports event, detailing metrics such as scores, player performance stats (like yards gained, tackles, assists), and team comparisons. These statistics are essential for evaluating overall team effectiveness, player contributions, and strategic outcomes.


Option 1 - Using the Game Statistics Feed

The Game Statistics feed provides comprehensive game-level statistics, including detailed team and player performance metrics for each team in an NCAAFB game.

How to Pull the Game Statistics Feed:

  • Request this feed no sooner than 10 minutes before the scheduled start of the game (status = scheduled) based on your specific needs.
  • Once the game is in progress (status = inprogress), you may query the feed as necessary.
  • The endpoint offers real-time data updates and maintains a two-second TTL once the game status changes to inprogress.
  • Utilize the Daily Change Log to capture data changes after a game has ended.

Game Statistics Example:

{
  "statistics": {
    "home": {
      "id": "19775492-f1eb-4bc5-9e15-078ebd689c0f",
      "name": "Crimson Tide",
      "market": "Alabama",
      "alias": "BAMA",
      "summary": {
        "possession_time": "31:31",
        "avg_gain": 4.7,
        "safeties": 0,
        "turnovers": 2,
        "play_count": 85,
        "rush_plays": 28,
        "total_yards": 399,
        "fumbles": 1,
        "lost_fumbles": 0,
        "penalties": 7,
        "penalty_yards": 57,
        "return_yards": -2
      },
      "rushing": {
        "totals": {
          "avg_yards": 1.071,
          "attempts": 28,
          "touchdowns": 0,
          "tlost": 2,
          "tlost_yards": -3,
          "yards": 30,
          "longest": 16,
          "redzone_attempts": 5,
          "first_downs": 5
        },
        "players": [
          {
            "id": "7128ba84-b998-4a58-a95a-486480df7cb0",
            "name": "Bryce Young",
            "jersey": "09",
            "position": "QB",
            "first_downs": 0,
            "avg_yards": -10.75,
            "attempts": 4,
            "touchdowns": 0,
            "yards": -43,
            "longest": -6,
            "redzone_attempts": 1,
            "tlost": 0,
            "tlost_yards": 0
          }
        ]
      }
    },
    "away": {
      "id": "2eef738d-c637-4b12-b8df-4b79efcce71e",
      "name": "Bulldogs",
      "market": "Georgia",
      "alias": "UGA",
      "summary": {
        "possession_time": "28:29",
        "avg_gain": 6.5,
        "safeties": 0,
        "turnovers": 1,
        "play_count": 56,
        "rush_plays": 30,
        "total_yards": 364,
        "fumbles": 2,
        "lost_fumbles": 1,
        "penalties": 10,
        "penalty_yards": 70,
        "return_yards": 79
      },
      "rushing": {
        "totals": {
          "avg_yards": 4.667,
          "attempts": 30,
          "touchdowns": 1,
          "tlost": 2,
          "tlost_yards": -4,
          "yards": 140,
          "longest": 67,
          "longest_touchdown": 1,
          "redzone_attempts": 6,
          "first_downs": 7
        },
        "players": [
          {
            "id": "204fc0ef-7f9f-4e4c-974e-2c153603a379",
            "name": "Ladd McConkey",
            "jersey": "84",
            "position": "WR",
            "first_downs": 0,
            "avg_yards": -3,
            "attempts": 1,
            "touchdowns": 0,
            "yards": -3,
            "longest": -3,
            "redzone_attempts": 0,
            "tlost": 1,
            "tlost_yards": -3
          }
        ]
      }
    }
  }
}

In this example, the Alabama Crimson Tide's statistics include 31:31 minutes of possession, 4.7 yards per play, 2 turnovers, and 28 rushing attempts averaging 1.071 yards. The Georgia Bulldogs had 28:29 minutes of possession, 6.5 yards per play, 1 turnover, and 30 rushing attempts averaging 4.667 yards with 1 touchdown. These stats provide a concise overview of each team's offensive performance and effectiveness.

This visual showcases how you can display team and player game stats using the game statistics feed. It shows a detailed breakdown of play-by-play actions, scoring progression, and player comparisons between Georgia and Alabama. Key elements include possession time, rushing and passing yards, and individual player performance metrics like completions and attempts, providing a comprehensive overview of the game dynamics and individual contributions.

Use Case

Coaches and sports analysts can use these statistics to evaluate player performance and team efficiency during specific game situations. This data helps in making informed decisions on player rotations and game strategies, particularly by analyzing areas like rushing effectiveness, turnover margins, and penalty impacts on game outcomes. This is crucial for adjusting training focuses and preparing for upcoming opponents, ensuring a tactical advantage in future matchups.


Option 2 - Using the Push Statistics Feed

The Push Statistics feed offers the same live stat data as the Game Statistics feed, with its main advantage being continuous real-time updates through a single API call, thereby reducing the total number of API calls required.

Streamline your access to live game updates by combining the Push Statistics feed:

  1. Open a connection with a single call to the Push Statistics feed to receive real-time updates.
  2. Push feeds automatically deliver JSON payloads through a push service, minimizing the number of calls required.

Note: To utilize the Push feature, you must be a Realtime customer. Additionally, using the Game Statistics feed as a backup is recommended for uninterrupted coverage.

How to Pull the Push Statistics Feed:

  • Add the match parameter with the specific game id. Without the match parameter the feed will return data for all live NCAAFB games.
  • In the event of a disconnection from the Push Events Feed, it's not possible to resume where you left off.
    • To ensure continuous coverage, use multiple Push Feeds and supplement with RESTful feeds like Game Statistics as a fallback to retrieve any missed timeline information during live games.

Supplementing Stats Feeds with the Game Play-by-Play Feed

If you choose to use the Game Statistics or Push Statistics feeds and need detailed play-related statistics such as attempted field goals, out of bounds fumbles, and passes inside the 20-yard line, consider supplementing with the Game Play-by-Play feed. This integration will enrich your solution with comprehensive game data.

👍

Tip - Compare Data Points

Compare the data points returned by the Game Play-by-Play feed with those from the Game Statistics or Push Statistics feed to understand the specific information each provides.



Daily Change Log

The Daily Change Log endpoint allows for efficient tracking of daily changes to the NCAAFB API without depleting your API call limits. It updates you on significant changes like schedule adjustments, game results, player updates (such as name or number changes), and team modifications.

The table below outlines scenarios and use cases for utilizing the Daily Change Log based on live game updates and stats.

DataUse Case
Play-by-PlayTrack changes in play details such as new plays added or corrections to existing play records.
Game StatisticsMonitor updates in player statistics and team performance metrics post-game corrections.
Game BoxscoreMonitor adjustments in game summary data, including final scores or statistical errors being rectified.

To use Daily Change Log feed for monitoring changes to recent games:

  1. Identify Change Types: First, review the Daily Change Log to identify the types of changes reported. These could be related to games, players, or teams. Each entry in the log will list relevant IDs (game, player, or team ID), depending on the type of change.

  2. Use IDs to Retrieve Specifics:

    • Game Changes: If the ID is found within the "results" node, it typically indicates a change in game results. This ID is a game ID.
    • Player and Team Changes: Similarly, IDs associated with players or teams indicate changes relevant to these entities, such as updates to player information or team rosters.
  3. Pull Detailed Data: Use the identified IDs to pull detailed information from the relevant feed. For example:

    • Play-by-Play Feed: If a game ID is mentioned, you can pull this feed to check for any new plays added or modifications to existing plays.
    • Game Statistics Feed: Use the game ID to retrieve updated player statistics and team performance metrics to see what specific data was altered.
    • Game Boxscore Feed: Pull this feed using the game ID to review any updates to the game summary, including scores and other significant game statistics.
  4. Verify Changes: After pulling the detailed data from the relevant feeds, compare the newly retrieved data against previously stored data to verify the changes and update your records accordingly.


⏱️

Update Frequency

TTL / Cache: 300 seconds

Data Updates:

  • Entries populate live for changes to teams, players, game statistics, schedules, and standings.
  • Start time of the log is 05:00:00 UTC; end time is 04:59:59 UTC

For optimal results, set a regular schedule to pull every 10 minutes or less (depending on your use case) to access the feed.