Integration GuidesReference Docs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

UFL API Basics

This page covers the practical basics of the UFL API: authentication, URL structure, seasons and season types, formats, errors, cache behavior, and time values. The payloads themselves are covered in the scenario pages.



Authentication

Every request is authenticated with your API key in the x-api-key header:

GET https://api.sportradar.com/ufl/trial/v7/en/league/hierarchy.json
x-api-key: YOUR_API_KEY

Keep the key server-side; do not embed it in client applications.



Base URL and URL Structure

All requests follow one URL shape:

GET https://api.sportradar.com/ufl/{access_level}/v7/{language_code}/{feed}.{format}
  • access_level: trial or production, matching your key.
  • language_code: en (English).
  • format: json or xml. Both carry the same data on every feed.

Feeds are scoped five ways:

  • League-wide feeds live under /league/ (Hierarchy, Seasons, Teams)
  • Date-scoped feeds take a {year}/{month}/{day} trio (Daily Change Log, Daily Transactions)
  • Season-scoped feeds take a {season_year}/{season_type} pair (Season Schedule, Postgame Standings, Seasonal Statistics), with the weekly feeds adding a {week_number} (Weekly Schedule, Weekly Injuries, Weekly Depth Charts)
  • Entity-scoped feeds take a GUID (Game Boxscore, Play-by-Play, Roster, and Statistics by game ID; Team Roster by team ID; Player Profile by player ID; Tournament Schedule and Summary by tournament ID)
  • Convenience feeds need no parameters at all (Current Season Schedule, Current Week Schedule)

{week_number} is a zero-padded string (01 through 12): week one is 01, not 1.



UFL API Map

To make the most of the UFL API you will need a handful of parameters to build your calls. The map below shows which identifier each feed takes and where it comes from; every pill links to that feed's reference page.

NO ID NEEDEDDATESEASON / WEEKGAME IDTEAM IDPLAYER IDTOURNAMENT IDGetting OrientedSTART HERE · SCHEDULES PROVIDE GAME AND TEAM IDS Seasons League Hierarchy Teams Current Season Schedule Current Week Schedule Season Schedule Weekly ScheduleTrack Games LiveGAME IDS COME FROM THE SCHEDULE FEEDS Game Boxscore Game Statistics Game Play-by-Play Game RosterMonitor Data Changes Daily Change Log Daily TransactionsFollow the SeasonTAKE A SEASON YEAR AND TYPE · STATS ADD A TEAM ID Postgame Standings Seasonal StatisticsTeams and PlayersIDS COME FROM TEAMS, ROSTERS, AND SCHEDULES Team Roster Player Profile Weekly Depth Charts Weekly InjuriesTournamentsTOURNAMENT LIST PROVIDES TOURNAMENT IDS Tournament List Tournament Schedule Tournament SummaryLive PushREALTIME ADD-ON · SUBSCRIBE, NO ID REQUIRED Push Events Push Statistics


Seasons and Season Types

{season_year} is the calendar year of the season. {season_type} selects the phase: REG (regular season) or PST (postseason). A PRE season type exists in the format but is never populated; the UFL does not play a preseason. Seasons lists every season on file; the 2026 entries:

{
  "league": {
    "id": "d441365f-cfab-49d6-9976-6c95d91fdef7",
    "name": "United Football League",
    "alias": "UFL"
  },
  "seasons": [
    {
      "id": "4123d3de-ea19-4e5a-9320-d29026eb3df6",
      "year": 2026,
      "start_date": "2026-06-06",
      "end_date": "2026-06-13",
      "status": "closed",
      "type": {
        "code": "PST"
      }
    },
    {
      "id": "4ee5ece0-6f0b-11f0-b1e6-2dad3ff60df1",
      "year": 2026,
      "start_date": "2026-03-27",
      "end_date": "2026-05-31",
      "status": "closed",
      "type": {
        "code": "REG"
      }
    }
  ]
}
<?xml version="1.0" ?>
<!-- Generation started @ 2026-06-14 10:13:45 +0000 -->
<league xmlns="http://feed.elasticstats.com/schema/football/seasons-v7.0.xsd" id="d441365f-cfab-49d6-9976-6c95d91fdef7" name="United Football League" alias="UFL">
  
  
  <!-- ... omitted for brevity -->
  <season id="4123d3de-ea19-4e5a-9320-d29026eb3df6" year="2026" start_date="2026-06-06" end_date="2026-06-13" status="closed">
    
    
    <type code="PST"/>
    
  
  </season>
  <season id="4ee5ece0-6f0b-11f0-b1e6-2dad3ff60df1" year="2026" start_date="2026-03-27" end_date="2026-05-31" status="closed">
    
    
    <type code="REG"/>
    
  
  </season>
  

</league>

The XML response is shown with earlier seasons omitted for brevity.

The regular season runs from late March through May; the postseason plays two playoff games and the United Bowl across two June weekends. Each season entry carries its own id, dates, and status.



Complete Responses

Feeds return the complete data set for their scope in a single response; there is no pagination. A full Season Schedule returns every game of the season (40 for the 2026 regular season), and Seasonal Statistics returns every player on the team in one payload.



Errors

  • Authentication failures return 403 with an HTML page, not a JSON or XML error object; branch on the status code:
<!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="utf-8">
          <title>Authentication Error</title>
        </head>
        <body>
          <p>Authentication Error</p>
        </body>
      </html>
  • Rate-limit errors return 429 Too Many Requests; slow your request rate and retry, increasing the wait between attempts
  • 404 indicates an unknown ID or path
  • Other statuses follow the Response Codes page


Cache Behavior

Each response carries a cache-control header stating how long the payload may be served from cache. TTLs are tiered by feed family and by game activity: 10 minutes on schedules with active games and on standings, 4 hours on the league catalog, statistics, profiles, and weekly report feeds, and status-tiered on the game feeds (down to 3 seconds while a game is in play). The per-feed chart is on the Update Frequencies page.

⚠️

A TTL Is Not a Polling Recommendation

A short TTL means the payload can change that often, not that you should request it that often. Check the header on each response you receive, and match your polling cadence to the freshness your product actually needs. Recommended cadences are on the Update Frequencies page and in each scenario's Best Practices.



Time Values

Timestamps are UTC ISO 8601 (scheduled values carry an explicit offset). Date-only fields such as season dates and birth dates follow local league convention and are not UTC-adjusted. The date-scoped feeds (Daily Change Log, Daily Transactions) use the league-defined day, which runs 04:00:00Z to 03:59:59Z: a transaction entered on a US evening belongs to that US date's feed even when its UTC timestamp has rolled past midnight. Plan date math accordingly.



Delivery Options

The feeds in this guide are RESTful pull feeds. Real-time push delivery is available through the Push Events and Push Statistics feeds; the Push Feeds page covers the connection workflow, and your Sportradar representative can add Push to your package.



Integration Resources


Did this page help you?