Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Tracking Standings

This scenario builds and maintains league tables: the overall, conference, and division views for MLB, tables with ties for NPB, and pool standings plus brackets for cup competitions like the World Baseball Classic.

This scenario is commonly used to:

  • Render standings pages with league and division views
  • Track division and playoff races
  • Build group tables and knockout brackets for cup competitions


Relevant Feeds

FeedPurpose
Season StandingsEvery table view a season defines, one group per view
Season InfoThe coverage block stating whether standings recalculate in play
Season LinksBracket structure for cup seasons: cup rounds and their wiring
Sport Events UpdatedThe trigger for off-cycle standings refreshes


High-Level Workflow

Season Info (coverage) → Season Standings → render each group → Season Links for brackets

League Seasons vs Cup SeasonsSame standings feed; the group list is what changes
League season MLB, NPB, KBO
Season Standings→overallper leagueper division
One response, one group per table view: MLB 2026 returns nine groups.
Cup season World Baseball Classic
Season Standings→one group per pool
Season Links→bracket via linked cup_rounds
Pools come from standings; the knockout wiring comes from Season Links when the brackets coverage flag is set.


Integration Steps


1. Pull the season's standings

Season Standings takes a season ID. The response carries one standings entry (type total) whose groups array holds every table view the season defines; MLB 2026 returns nine groups: the full league, both leagues, and all six divisions. The request and the AL Central group, in both formats (the other eight groups are trimmed):

GET https://api.sportradar.com/baseball/trial/v2/en/seasons/sr:season:134469/standings.json
x-api-key: YOUR_API_KEY
{
  "generated_at": "2026-07-21T17:49:37+00:00",
  "standings": [
    {
      "tie_break_rule": "The MLB overall table is sorted by percentage",
      "type": "total",
      "round": 1,
      "groups": [
        {
          "stage": {
            "order": 1,
            "type": "league",
            "phase": "division",
            "start_date": "2026-03-25",
            "end_date": "2026-09-28",
            "year": "2026"
          },
          "id": "sr:league:99741",
          "name": "MLB 2026, American League Central",
          "live": false,
          "standings": [
            {
              "rank": 1,
              "played": 99,
              "win": 53,
              "loss": 46,
              "draw": 0,
              "runs_for": 0,
              "runs_against": 0,
              "runs_diff": 0,
              "competitor": {
                "id": "sr:competitor:3644",
                "name": "Chicago White Sox",
                "country": "USA",
                "country_code": "USA",
                "abbreviation": "CWS",
                "gender": "male"
              },
              "games_behind": 0,
              "winning_percentage": 0.535,
              "win_home": 31,
              "loss_home": 17,
              "win_away": 22,
              "loss_away": 29,
              "win_last_ten": 6,
              "loss_last_ten": 4
            },
            {
              "rank": 2,
              "played": 101,
              "win": 53,
              "loss": 48,
              "draw": 0,
              "runs_for": 0,
              "runs_against": 0,
              "runs_diff": 0,
              "competitor": {
                "id": "sr:competitor:3650",
                "name": "Cleveland Guardians",
                "country": "USA",
                "country_code": "USA",
                "abbreviation": "CLE",
                "gender": "male"
              },
              "games_behind": 1,
              "winning_percentage": 0.525,
              "win_home": 26,
              "loss_home": 24,
              "win_away": 27,
              "loss_away": 24,
              "win_last_ten": 6,
              "loss_last_ten": 4
            },
            {
              "rank": 3,
              "played": 101,
              "win": 49,
              "loss": 52,
              "draw": 0,
              "runs_for": 0,
              "runs_against": 0,
              "runs_diff": 0,
              "competitor": {
                "id": "sr:competitor:3649",
                "name": "Minnesota Twins",
                "country": "USA",
                "country_code": "USA",
                "abbreviation": "MIN",
                "gender": "male"
              },
              "games_behind": 5,
              "winning_percentage": 0.485,
              "win_home": 26,
              "loss_home": 25,
              "win_away": 23,
              "loss_away": 27,
              "win_last_ten": 5,
              "loss_last_ten": 5
            },
            {
              "rank": 4,
              "played": 100,
              "win": 47,
              "loss": 53,
              "draw": 0,
              "runs_for": 0,
              "runs_against": 0,
              "runs_diff": 0,
              "competitor": {
                "id": "sr:competitor:3648",
                "name": "Detroit Tigers",
                "country": "USA",
                "country_code": "USA",
                "abbreviation": "DET",
                "gender": "male"
              },
              "games_behind": 6.5,
              "winning_percentage": 0.47,
              "win_home": 27,
              "loss_home": 23,
              "win_away": 20,
              "loss_away": 30,
              "win_last_ten": 7,
              "loss_last_ten": 3
            },
            {
              "rank": 5,
              "played": 101,
              "win": 41,
              "loss": 60,
              "draw": 0,
              "runs_for": 0,
              "runs_against": 0,
              "runs_diff": 0,
              "competitor": {
                "id": "sr:competitor:3651",
                "name": "Kansas City Royals",
                "country": "USA",
                "country_code": "USA",
                "abbreviation": "KC",
                "gender": "male"
              },
              "games_behind": 13,
              "winning_percentage": 0.406,
              "win_home": 24,
              "loss_home": 27,
              "win_away": 17,
              "loss_away": 33,
              "win_last_ten": 4,
              "loss_last_ten": 6
            }
          ],
          "group_name": "American League Central"
        }
      ]
    }
  ]
}
<?xml version="1.0" ?>
<season_standings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.sportradar.com/sportsapi/baseball/v2" generated_at="2026-07-21T17:30:01+00:00" xsi:schemaLocation="http://schemas.sportradar.com/sportsapi/baseball/v2 https://schemas.sportradar.com/sportsapi/baseball/v2/schemas/season_standings.xsd">
          <standing rank="1" played="100" win="63" loss="37" draw="0" runs_for="510" runs_against="374" runs_diff="136" games_behind="0" winning_percentage="0.63" win_home="33" loss_home="18" win_away="30" loss_away="19" win_last_ten="6" loss_last_ten="4">
    <!-- ... other groups omitted for brevity -->
      <group id="sr:league:99741" name="MLB 2026, American League Central" live="false" group_name="American League Central">
        <stage order="1" type="league" phase="division" start_date="2026-03-25" end_date="2026-09-28" year="2026"/>
        <standings>
          <standing rank="1" played="99" win="53" loss="46" draw="0" runs_for="0" runs_against="0" runs_diff="0" games_behind="0" winning_percentage="0.535" win_home="31" loss_home="17" win_away="22" loss_away="29" win_last_ten="6" loss_last_ten="4">
            <competitor id="sr:competitor:3644" name="Chicago White Sox" country="USA" country_code="USA" abbreviation="CWS" gender="male"/>
          </standing>
          <standing rank="2" played="101" win="53" loss="48" draw="0" runs_for="0" runs_against="0" runs_diff="0" games_behind="1" winning_percentage="0.525" win_home="26" loss_home="24" win_away="27" loss_away="24" win_last_ten="6" loss_last_ten="4">
            <competitor id="sr:competitor:3650" name="Cleveland Guardians" country="USA" country_code="USA" abbreviation="CLE" gender="male"/>
          </standing>
          <standing rank="3" played="101" win="49" loss="52" draw="0" runs_for="0" runs_against="0" runs_diff="0" games_behind="5" winning_percentage="0.485" win_home="26" loss_home="25" win_away="23" loss_away="27" win_last_ten="5" loss_last_ten="5">
            <competitor id="sr:competitor:3649" name="Minnesota Twins" country="USA" country_code="USA" abbreviation="MIN" gender="male"/>
          </standing>
          <standing rank="4" played="100" win="47" loss="53" draw="0" runs_for="0" runs_against="0" runs_diff="0" games_behind="6.5" winning_percentage="0.47" win_home="27" loss_home="23" win_away="20" loss_away="30" win_last_ten="7" loss_last_ten="3">
            <competitor id="sr:competitor:3648" name="Detroit Tigers" country="USA" country_code="USA" abbreviation="DET" gender="male"/>
          </standing>
          <standing rank="5" played="101" win="41" loss="60" draw="0" runs_for="0" runs_against="0" runs_diff="0" games_behind="13" winning_percentage="0.406" win_home="24" loss_home="27" win_away="17" loss_away="33" win_last_ten="4" loss_last_ten="6">
            <competitor id="sr:competitor:3651" name="Kansas City Royals" country="USA" country_code="USA" abbreviation="KC" gender="male"/>
          </standing>
        </standings>
      </group>
  </standing>
</season_standings>

Reading a row:

  • rank orders the group; games_behind is the familiar leader-relative gap, and winning_percentage is the ordering statistic
  • win_home / loss_home and win_away / loss_away are the venue splits; win_last_ten / loss_last_ten is current form
  • runs_for, runs_against, and runs_diff carry run production
  • tie_break_rule, where present, states how equal records are ordered

Because the same team appears in its division, its league, and the overall group, key your storage on the pair of group id and competitor id. Rendered as a front-facing module, the group above maps straight to a table; the values below are the same five rows:

MLB 2026, American League CentralA standings module drawn from one group of the response
#TeamWLPCTGBL10HomeAway
1CWSChicago White Sox5346.535-6-431-1722-29
2CLECleveland Guardians5348.52516-426-2427-24
3MINMinnesota Twins4952.48555-526-2523-27
4DETDetroit Tigers4753.4706.57-327-2320-30
5KCKansas City Royals4160.406134-624-2717-33
Every value comes from the Season Standings rows shown above; the circular crest slots use neutral badges here, filled by your own or licensed assets.

2. Respect the coverage mode

Season Info's coverage block states whether standings recalculate in play (standings: live) or settle after games finish (standings: post); MLB 2026 declares post, while NPB and KBO League seasons declare live. The feed also takes two query parameters: live=false requests the settled table explicitly, and round returns the table as it stood after an earlier round. See Fundamentals for the coverage block itself.

For a live-coverage season, the in-progress game is already counted in the table, and its classification moves with the score. One NPB team's Central League row before their game, and again while they trailed in that game: played has already incremented, the in-progress result is counted against them, and the group carries live: true throughout:

{
  "generated_at": "2026-07-25T04:05:05+00:00",
  "standings": [
    {
      "type": "total",
      "groups": [
        {
          "stage": {
            "order": 1,
            "type": "league",
            "phase": "division",
            "start_date": "2026-03-27",
            "end_date": "2026-09-30",
            "year": "2026"
          },
          "id": "sr:league:103148",
          "name": "NPB 2026, Central League",
          "live": true,
          "group_name": "Central League",
          "standings": [
            {
              "rank": 6,
              "played": 92,
              "win": 37,
              "loss": 54,
              "draw": 1,
              "runs_for": 310,
              "runs_against": 323,
              "runs_diff": -13,
              "competitor": {
                "id": "sr:competitor:67104",
                "name": "Chunichi Dragons",
                "country": "Japan",
                "country_code": "JPN",
                "abbreviation": "CHU",
                "gender": "male"
              },
              "games_behind": 13.5,
              "winning_percentage": 0.407,
              "win_home": 0,
              "loss_home": 0,
              "win_away": 0,
              "loss_away": 0,
              "win_last_ten": 0,
              "loss_last_ten": 0
            }
          ]
        }
      ]
    }
  ]
}
{
  "generated_at": "2026-07-25T05:25:14+00:00",
  "standings": [
    {
      "type": "total",
      "groups": [
        {
          "stage": {
            "order": 1,
            "type": "league",
            "phase": "division",
            "start_date": "2026-03-27",
            "end_date": "2026-09-30",
            "year": "2026"
          },
          "id": "sr:league:103148",
          "name": "NPB 2026, Central League",
          "live": true,
          "group_name": "Central League",
          "standings": [
            {
              "rank": 6,
              "played": 93,
              "win": 37,
              "loss": 55,
              "draw": 1,
              "runs_for": 310,
              "runs_against": 324,
              "runs_diff": -14,
              "competitor": {
                "id": "sr:competitor:67104",
                "name": "Chunichi Dragons",
                "country": "Japan",
                "country_code": "JPN",
                "abbreviation": "CHU",
                "gender": "male"
              },
              "games_behind": 13.5,
              "winning_percentage": 0.402,
              "win_home": 0,
              "loss_home": 0,
              "win_away": 0,
              "loss_away": 0,
              "win_last_ten": 0,
              "loss_last_ten": 0
            }
          ]
        }
      ]
    }
  ]
}

Render live tables directly from the feed rather than adding provisional results yourself; the recalculation is done for you.


3. Handle ties and qualification markers

NPB games can end level, so NPB rows carry a nonzero draw column, and rows in a qualification position carry current_outcome. The Central League top three, with the leader holding one drawn game and a Playoffs marker:

{
  "generated_at": "2026-07-21T14:05:04+00:00",
  "standings": [
    {
      "type": "total",
      "round": 1,
      "groups": [
        {
          "stage": {
            "order": 1,
            "type": "league",
            "phase": "division",
            "start_date": "2026-03-27",
            "end_date": "2026-09-30",
            "year": "2026"
          },
          "id": "sr:league:103148",
          "name": "NPB 2026, Central League",
          "live": false,
          "group_name": "Central League",
          "standings": [
            {
              "rank": 1,
              "played": 87,
              "win": 48,
              "loss": 38,
              "draw": 1,
              "runs_for": 329,
              "runs_against": 273,
              "runs_diff": 56,
              "competitor": {
                "id": "sr:competitor:22108",
                "name": "Hanshin Tigers",
                "country": "Japan",
                "country_code": "JPN",
                "abbreviation": "HAN",
                "gender": "male"
              },
              "current_outcome": "Playoffs",
              "games_behind": 0,
              "winning_percentage": 0.558,
              "win_home": 22,
              "loss_home": 20,
              "win_away": 26,
              "loss_away": 18,
              "win_last_ten": 7,
              "loss_last_ten": 3
            },
            {
              "rank": 1,
              "played": 88,
              "win": 48,
              "loss": 38,
              "draw": 2,
              "runs_for": 286,
              "runs_against": 281,
              "runs_diff": 5,
              "competitor": {
                "id": "sr:competitor:34374",
                "name": "Yomiuri Giants",
                "country": "Japan",
                "country_code": "JPN",
                "abbreviation": "YOM",
                "gender": "male"
              },
              "current_outcome": "Qualification Playoffs",
              "games_behind": 0,
              "winning_percentage": 0.558,
              "win_home": 25,
              "loss_home": 20,
              "win_away": 23,
              "loss_away": 18,
              "win_last_ten": 8,
              "loss_last_ten": 2
            },
            {
              "rank": 3,
              "played": 88,
              "win": 41,
              "loss": 46,
              "draw": 1,
              "runs_for": 271,
              "runs_against": 337,
              "runs_diff": -66,
              "competitor": {
                "id": "sr:competitor:67108",
                "name": "Tokyo Yakult Swallows",
                "country": "Japan",
                "country_code": "JPN",
                "abbreviation": "YAK",
                "gender": "male"
              },
              "current_outcome": "Qualification Playoffs",
              "games_behind": 7.5,
              "winning_percentage": 0.471,
              "win_home": 17,
              "loss_home": 23,
              "win_away": 24,
              "loss_away": 23,
              "win_last_ten": 1,
              "loss_last_ten": 9
            }
          ]
        }
      ]
    }
  ]
}

current_outcome appears only on rows sitting in a defined qualification or elimination zone; treat it as optional and never derive it from rank yourself. MLB rows gain it once a playoff place is decided: at the end of the 2026 regular season, twelve rows carried Playoffs.


4. Cup competitions: pools plus a bracket

A cup season's standings return one group per pool. The World Baseball Classic 2026 returns Pools A through D; Pool A in full:

{
  "generated_at": "2026-07-11T08:05:04+00:00",
  "standings": [
    {
      "tie_break_rule": "If teams are tied the following rules break the tie:\r\n1. Percentage\r\n2. Head-to-head",
      "type": "total",
      "round": 1,
      "groups": [
        {
          "stage": {
            "order": 1,
            "type": "league",
            "phase": "regular season",
            "start_date": "2026-03-06",
            "end_date": "2026-03-11",
            "year": "2026"
          },
          "id": "sr:league:94277",
          "name": "World Baseball Classic 2026, Pool A",
          "live": false,
          "group_name": "A",
          "standings": [
            {
              "rank": 1,
              "played": 4,
              "win": 3,
              "loss": 1,
              "draw": 0,
              "runs_for": 21,
              "runs_against": 10,
              "runs_diff": 11,
              "competitor": {
                "id": "sr:competitor:34384",
                "name": "Canada",
                "country": "Canada",
                "country_code": "CAN",
                "abbreviation": "CAN",
                "gender": "male"
              },
              "current_outcome": "Playoffs",
              "games_behind": 0,
              "winning_percentage": 0.75,
              "win_home": 1,
              "loss_home": 1,
              "win_away": 2,
              "loss_away": 0,
              "win_last_ten": 3,
              "loss_last_ten": 1
            },
            {
              "rank": 2,
              "played": 4,
              "win": 3,
              "loss": 1,
              "draw": 0,
              "runs_for": 15,
              "runs_against": 7,
              "runs_diff": 8,
              "competitor": {
                "id": "sr:competitor:34391",
                "name": "Puerto Rico",
                "country": "Puerto Rico",
                "country_code": "PRI",
                "abbreviation": "PUR",
                "gender": "male"
              },
              "current_outcome": "Playoffs",
              "games_behind": 0,
              "winning_percentage": 0.75,
              "win_home": 2,
              "loss_home": 1,
              "win_away": 1,
              "loss_away": 0,
              "win_last_ten": 3,
              "loss_last_ten": 1
            },
            {
              "rank": 3,
              "played": 4,
              "win": 2,
              "loss": 2,
              "draw": 0,
              "runs_for": 13,
              "runs_against": 16,
              "runs_diff": -3,
              "competitor": {
                "id": "sr:competitor:34418",
                "name": "Cuba",
                "country": "Cuba",
                "country_code": "CUB",
                "abbreviation": "CUB",
                "gender": "male"
              },
              "games_behind": 1,
              "winning_percentage": 0.5,
              "win_home": 1,
              "loss_home": 1,
              "win_away": 1,
              "loss_away": 1,
              "win_last_ten": 2,
              "loss_last_ten": 2
            },
            {
              "rank": 4,
              "played": 4,
              "win": 1,
              "loss": 3,
              "draw": 0,
              "runs_for": 10,
              "runs_against": 23,
              "runs_diff": -13,
              "competitor": {
                "id": "sr:competitor:302286",
                "name": "Colombia",
                "country": "Colombia",
                "country_code": "COL",
                "abbreviation": "COL",
                "gender": "male"
              },
              "games_behind": 2,
              "winning_percentage": 0.25,
              "win_home": 0,
              "loss_home": 1,
              "win_away": 1,
              "loss_away": 2,
              "win_last_ten": 1,
              "loss_last_ten": 3
            },
            {
              "rank": 5,
              "played": 4,
              "win": 1,
              "loss": 3,
              "draw": 0,
              "runs_for": 11,
              "runs_against": 14,
              "runs_diff": -3,
              "competitor": {
                "id": "sr:competitor:34390",
                "name": "Panama",
                "country": "Panama",
                "country_code": "PAN",
                "abbreviation": "PAN",
                "gender": "male"
              },
              "games_behind": 2,
              "winning_percentage": 0.25,
              "win_home": 0,
              "loss_home": 2,
              "win_away": 1,
              "loss_away": 1,
              "win_last_ten": 1,
              "loss_last_ten": 3
            }
          ]
        }
      ]
    }
  ]
}

The knockout phase lives in Season Links, which returns the bracket as cup_rounds whose linked_cup_rounds wire each round to its feeder and successor rounds. Trimmed to the first two rounds:

{
  "generated_at": "2026-07-21T17:20:01+00:00",
  "stages": [
    {
      "order": 1,
      "type": "cup",
      "phase": "playoffs",
      "start_date": "2026-03-13",
      "end_date": "2026-03-18",
      "year": "2026",
      "groups": [
        {
          "id": "sr:cup:181835",
          "group_name": "World Baseball Classic 2026, Playoffs",
          "cup_rounds": [
            {
              "id": "sr:cup_round:2551008",
              "sport_events": [
                {
                  "id": "sr:sport_event:68375564",
                  "start_time": "2026-03-14T19:00:00+00:00",
                  "start_time_confirmed": true,
                  "order": 1
                }
              ],
              "linked_cup_rounds": [
                {
                  "id": "sr:cup_round:2551016",
                  "type": "parent",
                  "name": "semifinal",
                  "order": 2,
                  "state": "winner",
                  "winner_id": "sr:competitor:34394"
                }
              ],
              "name": "quarterfinal",
              "order": 3,
              "state": "winner",
              "winner_id": "sr:competitor:34387"
            },
            {
              "id": "sr:cup_round:2551010",
              "sport_events": [
                {
                  "id": "sr:sport_event:68375606",
                  "start_time": "2026-03-15T01:00:00+00:00",
                  "start_time_confirmed": true,
                  "order": 1
                }
              ],
              "linked_cup_rounds": [
                {
                  "id": "sr:cup_round:2551016",
                  "type": "parent",
                  "name": "semifinal",
                  "order": 2,
                  "state": "winner",
                  "winner_id": "sr:competitor:34394"
                }
              ],
              "name": "quarterfinal",
              "order": 4,
              "state": "winner",
              "winner_id": "sr:competitor:34394"
            }
          ]
        }
      ]
    }
  ]
}

Each cup round lists its sport_events, so bracket cells link straight to game detail. Whether a season carries brackets at all is declared by the brackets coverage flag.



Common Use Cases

Typical builds on this workflow include:

  • A standings page with overall, league, and division tabs
  • A division race tracker with games-behind deltas
  • Wildcard and playoff qualification displays driven by current_outcome
  • A tournament hub with pool tables and a knockout bracket


Best Practices

  • For post-coverage seasons, refresh standings once games start closing and again a few minutes after the last game of the day
  • For live-coverage seasons, refresh during play at scoreboard cadence
  • Drive off-cycle refreshes from Sport Events Updated: a late statistics correction to a closed game can move a table; see Monitoring Data Changes
  • Render from the group the season defines rather than recomputing tables from game results; tie-break ordering is applied for you

Did this page help you?