Integration GuidesReference Docs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Retrieving Seasonal Statistics

The Seasonal Statistics feed returns a team's complete season statistics: a team-level record object and a players[] array, both organized by stat category. One call per team per season type covers a stats page.

This scenario is commonly used to:

  • Build team and player season stat pages
  • Rank players within a team by category
  • Surface the UFL-specific scoring categories


Relevant Feeds

FeedScopeUse
Seasonal Statisticsseason + team GUIDTeam and player season statistics
Player Profileplayer GUIDThe same player across seasons and teams
Game Statisticsgame GUIDSingle-game breakdowns


High-Level Workflow

Season Statistics WorkflowOne call per team per season type
Addressseason year + typeteam GUIDseason and team from Seasons and Teams
Team viewSeasonal Statisticsrecord object: category blocks incl. extra_points, conversions, efficiency
Player viewplayers[]the same categories per player; rank within the team
Across seasonsPlayer Profilethe same player's seasons and teams
Season statistics update about 5 minutes after each game closes; refresh after game days rather than on a timer.


Integration Steps


1. Pull the team's season

The team-level record object carries a category block per stat family: passing, rushing, receiving, defense, kicking and returns, penalties, efficiency, touchdowns, and the point-after families. The UFL-specific structure is visible in extra_points (point-after kicks) and its conversions block, which splits one, two, and three-point attempt types alongside defensive conversion returns, and in efficiency, which includes the onside-scrimmage alternative to the kickoff:

{
  "id": "ff1f47e0-b8ef-11f0-9440-2f32b8d49d12",
  "name": "Kings",
  "market": "Louisville",
  "alias": "LOU",
  "sr_id": "sr:competitor:1320808",
  "season": {
    "id": "4ee5ece0-6f0b-11f0-b1e6-2dad3ff60df1",
    "year": 2026,
    "type": "REG"
  },
  "record": {
    "games_played": 10,
    "touchdowns": {
      "pass": 10,
      "rush": 13,
      "total_return": 4,
      "total": 27,
      "fumble_return": 0,
      "int_return": 3,
      "kick_return": 1,
      "punt_return": 0,
      "other": 0
    },
    "extra_points": {
      "kicks": {
        "attempts": 25,
        "blocked": 1,
        "made": 23,
        "pct": 92.0
      },
      "conversions": {
        "pass_attempts": 8,
        "pass_successes": 2,
        "rush_attempts": 0,
        "rush_successes": 0,
        "defense_attempts": 1,
        "defense_successes": 0,
        "turnover_successes": 0
      },
      "special_conversions": {
        "pass_three_point_attempts": 0,
        "pass_three_point_successes": 0,
        "rush_three_point_attempts": 0,
        "rush_three_point_successes": 0,
        "defense_three_point_attempts": 0,
        "defense_three_point_successes": 0,
        "pass_one_point_attempts": 0,
        "pass_one_point_successes": 0,
        "rush_one_point_attempts": 0,
        "rush_one_point_successes": 0,
        "defense_one_point_attempts": 0,
        "defense_one_point_successes": 0
      }
    },
    "efficiency": {
      "goaltogo": {
        "attempts": 22,
        "successes": 13,
        "pct": 59.091
      },
      "redzone": {
        "attempts": 35,
        "successes": 19,
        "pct": 54.286
      },
      "thirddown": {
        "attempts": 118,
        "successes": 44,
        "pct": 37.288
      },
      "fourthdown": {
        "attempts": 19,
        "successes": 5,
        "pct": 26.316
      },
      "onside_scrimmage": {
        "attempts": 0,
        "successes": 0,
        "pct": 0.0
      }
    }
  }
}

The record is shown trimmed to four category blocks.


2. Read the player list

Each entry in players[] carries the same category structure, populated for the categories that player accumulated:

{
  "id": "3e01cc30-10bb-11f1-bbb5-bd3764a5f47a",
  "name": "Ian Wheeler",
  "jersey": "33",
  "position": "RB",
  "games_played": 9,
  "games_started": 1,
  "rushing": {
    "avg_yards": 5.441,
    "attempts": 68,
    "touchdowns": 6,
    "yards": 370,
    "longest": 61,
    "longest_touchdown": 12,
    "redzone_attempts": 21,
    "tlost": 11,
    "tlost_yards": -16,
    "first_downs": 22,
    "broken_tackles": 0,
    "kneel_downs": 0,
    "scrambles": 0,
    "yards_after_contact": 0
  }
}

The player entry is shown trimmed to the rushing category.


3. Follow a player across seasons

Team-scoped season stats answer "this team's season"; the Player Profile's seasons[] array answers "this player's career", with one entry per season, season type, and team. Use the profile when a player has moved between teams.



Common Use Cases

  • Team stats page: one Seasonal Statistics pull per team, refreshed after game days
  • League leaders: pull all eight teams and rank client-side; the full player lists arrive in one response per team
  • Player career view: Player Profile seasons[]


Best Practices

  • Address teams by GUID from the current League Hierarchy
  • Refresh after game days complete and when the Daily Change Log lists statistics changes; season aggregates settle once the day's games are closed
  • Zero-valued fields are meaningful: a category block with zeros records participation without production, and absent players did not accumulate stats in that category

Did this page help you?