Integration GuidesReference Docs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Tracking Standings

The Postgame Standings feed carries the league table: conference and division ranks, records, win percentage, points for and against, streaks, strength of schedule and victory, record splits, and clinch markers, updating after games conclude.

This scenario is commonly used to:

  • Render conference and division tables
  • Track the playoff race with division, wildcard, and eliminated markers
  • Show home, road, division, conference, and cross-conference record splits
  • Feed tiebreaker displays with points and strength-of-schedule detail


Relevant Feeds

FeedUse
Postgame StandingsThe table itself, by {season_year}/{season_type}
SeasonsSeason catalog; confirm a season is on file before requesting its table


Reading the Table

Standings nest conferences[] > divisions[] > teams[]: the AFC and the NFC, each with four divisions of four teams, so one response carries every table you render. The season block names the year and type the table belongs to (the 2021 regular season below), and each conference and division carries its own id, name, and alias (AFC North, AFC_NORTH). The AFC North rows:

GET https://api.sportradar.com/nfl/official/trial/v7/en/seasons/2021/REG/standings/season.json
x-api-key: YOUR_API_KEY
{
  "season": {
    "id": "06275f0f-08ff-4787-91fc-5c30464ccfd9",
    "year": 2021,
    "type": "REG",
    "name": "REG"
  },
  "conferences": [
    {
      "id": "1bdefe12-6cb2-4d6a-b208-b04602ae79c3",
      "name": "AFC",
      "alias": "AFC",
      "divisions": [
        {
          "id": "eb60da78-4eb5-4184-971e-2c5cd4ab4988",
          "name": "AFC North",
          "alias": "AFC_NORTH",
          "teams": [
            {
              "id": "ad4ae08f-d808-42d5-a1e6-e9bc4e34d123",
              "name": "Bengals",
              "market": "Cincinnati",
              "alias": "CIN",
              "sr_id": "sr:competitor:4416",
              "rank": {
                "conference": 4,
                "division": 1,
                "clinched": "division"
              },
              "streak": {
                "type": "loss",
                "length": 1,
                "desc": "Lost 1"
              },
              "strength_of_schedule": {
                "sos": 0.472,
                "wins": 135,
                "total": 289
              },
              "strength_of_victory": {
                "sov": 0.462,
                "wins": 77,
                "total": 170
              },
              "wins": 10,
              "losses": 7,
              "ties": 0,
              "win_pct": 0.588,
              "points_for": 460,
              "points_against": 376,
              "records": [
                {
                  "category": "nfc",
                  "wins": 2,
                  "losses": 3,
                  "ties": 0,
                  "win_pct": 0.4,
                  "points_for": 123,
                  "points_against": 106
                },
                {
                  "category": "road",
                  "wins": 5,
                  "losses": 3,
                  "ties": 0,
                  "win_pct": 0.625,
                  "points_for": 210,
                  "points_against": 136
                },
                {
                  "category": "conference",
                  "wins": 8,
                  "losses": 4,
                  "ties": 0,
                  "win_pct": 0.667,
                  "points_for": 337,
                  "points_against": 270
                },
                {
                  "category": "afc",
                  "wins": 8,
                  "losses": 4,
                  "ties": 0,
                  "win_pct": 0.667,
                  "points_for": 337,
                  "points_against": 270
                },
                {
                  "category": "division",
                  "wins": 4,
                  "losses": 2,
                  "ties": 0,
                  "win_pct": 0.667,
                  "points_for": 179,
                  "points_against": 120
                },
                {
                  "category": "home",
                  "wins": 5,
                  "losses": 4,
                  "ties": 0,
                  "win_pct": 0.556,
                  "points_for": 250,
                  "points_against": 240
                }
              ]
            },
            {
              "id": "cb2f9f1f-ac67-424e-9e72-1475cb0ed398",
              "name": "Steelers",
              "market": "Pittsburgh",
              "alias": "PIT",
              "sr_id": "sr:competitor:4345",
              "rank": {
                "conference": 7,
                "division": 2,
                "clinched": "wildcard"
              },
              "streak": {
                "type": "win",
                "length": 2,
                "desc": "Won 2"
              },
              "strength_of_schedule": {
                "sos": 0.521,
                "wins": 150,
                "total": 289
              },
              "strength_of_victory": {
                "sov": 0.49,
                "wins": 75,
                "total": 153
              },
              "wins": 9,
              "losses": 7,
              "ties": 1,
              "win_pct": 0.559,
              "points_for": 343,
              "points_against": 398
            },
            {
              "id": "d5a2eb42-8065-4174-ab79-0a6fa820e35e",
              "name": "Browns",
              "market": "Cleveland",
              "alias": "CLE",
              "sr_id": "sr:competitor:4417",
              "rank": {
                "conference": 11,
                "division": 3,
                "clinched": "eliminated"
              },
              "streak": {
                "type": "win",
                "length": 1,
                "desc": "Won 1"
              },
              "strength_of_schedule": {
                "sos": 0.514,
                "wins": 147,
                "total": 289
              },
              "strength_of_victory": {
                "sov": 0.415,
                "wins": 56,
                "total": 136
              },
              "wins": 8,
              "losses": 9,
              "ties": 0,
              "win_pct": 0.471,
              "points_for": 349,
              "points_against": 371
            }
          ]
        }
      ]
    }
  ]
}

The response is shown trimmed to the top three AFC North rows, with the six record splits kept on the first row. The rows render straight into a division table (wins, losses, ties, win percentage, and points for and against, with home and road splits available from records[]), and rank.clinched surfaces as a badge; club marks are placeholders for your own or licensed assets:

NFC EAST2025 REG · Postgame Standings
TEAMWLTPCTPFPA
PHIPhiladelphia Eagles1160.647379325
DALDallas Cowboys791.441471511
WASWashington Commanders5120.294356451
NYGNew York Giants4130.235381439
Ranks, streaks, strength of schedule, and record splits ride each team entry.


Row Anatomy

  • id, name, market, alias, and sr_id identify the team; key rows on id
  • rank carries conference and division positions, and adds a clinched marker as playoff qualification is decided toward season end: division (the division title), wildcard (a wild-card berth), or eliminated
  • wins / losses / ties are the record, with win_pct calculated from all three; it is the basis for ordering teams within the standings
  • points_for / points_against are season totals: a tiebreaking input and a read on offensive and defensive effectiveness
  • streak carries the kind, the length, and a display string (Won 2): current momentum, a form indicator rather than a standings input, and more often used in rankings
  • strength_of_schedule and strength_of_victory are objects carrying the computed value (sos, sov) plus the wins and total games behind it; they evaluate the quality of a team's opponents and of its wins (higher values mean tougher opponents or more significant wins) and influence subjective rankings more than the binary standings
  • records[] is a list of split records by category, each with its own wins, losses, ties, win_pct, and points for and against, showing how effective the team is in each setting:
    • division: games against the team's own division, the basis for divisional rankings and direct playoff implications (an NFC East team's division record comes from its games against the other NFC East teams, such as the Eagles, Cowboys, and Giants)
    • conference: games against every team in the same conference (AFC or NFC), broader than the division split and the input to conference seeding for the playoffs
    • home and road: results in the team's own stadium (home-field advantage) and away from it
    • afc and nfc: results against opponents from each conference


Integration Steps


1. Confirm the season

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.

The Seasons feed is the catalog, and the standings path takes the same {season_year}/{season_type} pair. The response below is trimmed to the three 2026 entries:

GET https://api.sportradar.com/nfl/official/trial/v7/en/league/seasons.json
x-api-key: YOUR_API_KEY
{
    "league": {
        "id": "3c6d318a-6164-4290-9bbc-bf9bb21cc4b8",
        "name": "National Football League",
        "alias": "NFL"
    },
    "seasons": [
        {
            "id": "c0650ee0-17f9-11f1-92c4-398db1c54270",
            "year": 2026,
            "start_date": "2026-08-06",
            "end_date": "2026-08-30",
            "status": "closed",
            "type": {
                "code": "PRE"
            }
        },
        {
            "id": "c0655d00-17f9-11f1-92c4-398db1c54270",
            "year": 2026,
            "start_date": "2026-09-09",
            "end_date": "2027-01-10",
            "status": "scheduled",
            "type": {
                "code": "REG"
            }
        },
        {
            "id": "c0655d01-17f9-11f1-92c4-398db1c54270",
            "year": 2026,
            "start_date": "2027-01-16",
            "end_date": "2027-02-14",
            "status": "scheduled",
            "type": {
                "code": "PST"
            }
        }
    ]
}

2. Pull the table postgame

Standings are updated on a two-minute timer after each game is moved to complete status, so pull once games reach complete rather than on a fast timer: 2 to 5 minutes after a game moves to complete for the quickest updates, and every hour or less otherwise, depending on your use case. The request and response shape are shown under Reading the Table.


3. Track the race

Watch rank.clinched appear as the season closes: division marks the division title, wildcard a wild-card berth, and eliminated the end of a team's chances. Read rank.conference for seeding order, and pair with the Tracking Playoffs page once seeding settles.


4. Catch off-cycle corrections with the Daily Change Log

Standings typically remain stable once games conclude and results are recorded, but rare changes can occur: an adjustment following a review of play outcomes, a correction of a data error, or a late-reported result. When a game ID appears in the results node of the Daily Change Log, some data associated with that game has changed (not necessarily the final score), so refetch the Postgame Standings for that game's season, compare the rows against what you have stored, and update your records accordingly. Polling cadence, the league-day window, and change-log samples are on Monitoring Data Changes.



Best Practices

  • Order rows by the rank.division and rank.conference values in the payload rather than re-sorting on win percentage, so tied records display in the order the feed resolves them
  • Key rows by team id and treat name, market, and alias as display data
  • Refresh standings after each game day completes, and again whenever the Daily Change Log lists a game from the season you display
  • Cache values and pull cadence for every feed on this page are on Update Frequencies

Did this page help you?