Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Leaderboards (Rankings and Standings)

Generate leaderboard views with rankings and standings.

Introduction

Leaderboards are tables that rank players or teams based on performance, making it easy to track who is leading, who is moving up, and how competitors compare over time. In tennis, leaderboards typically appear in two forms:

  • Rankings — global ATP/WTA-style player or team rankings (singles/doubles).
  • Standings — table positions within a specific season/competition (e.g., UTR groups, team events, round-robin stages).
🎾

Understanding Competitions and Seasons

  • A Competition in tennis refers to a professional tournament or tour event, such as the Australian Open, Wimbledon, or ATP 1000 – Indian Wells. Each competition has a unique competition_id.
  • A Season represents a specific edition of a competition, usually aligned with a calendar year or event date (e.g., Wimbledon 2025). Each season has a unique season_id and includes all matches, players, and results for that instance of the competition.

Prerequisite: Confirm Season Availability and Coverage

Understanding which seasons are available—and what level of data coverage is provided—is essential for making reliable and accurate API calls.

  • Use the Seasons feed to view all available seasons for each competition in the API.
  • Reference the Coverage Matrix to determine the depth of coverage by competition tier.

You can also use the following feeds to see coverage information ahead of matches, including whether serve outcomes, extended stats, and play-by-play data are available, as well as whether scores are delivered live or only after the match:


When Rankings and Standings are Updated

Rankings and standings follow different update cycles:

  • Rankings (ATP/WTA world and race lists) are updated weekly on Mondays, except during multi-week tournaments such as Grand Slams, when updates are delayed until the event concludes.
  • Standings (event-based tables) update in line with match results for a specific tournament. This means standings can shift daily during active play as matches are completed.
TypeUpdate FrequencyScope
RankingsWeekly (Mondays, delayed for multi-week events)Global player/team position (ATP/WTA or Race)
StandingsAs matches finish (daily during active play)Specific tournament tables (e.g., group stage, round-robin)

Accessing Rankings

You can access rankings using the following feeds:

  • Doubles Competitor Rankings — Provides the top 500 ATP and WTA doubles competitors in the official world rankings. Use this to display overall doubles standings or compare long-term player positioning.

  • Doubles Race Rankings — Tracks the year-to-date points race for ATP/WTA doubles teams aiming to qualify for the season-ending finals. Use this when your focus is on current-season performance, not career ranking.

  • Race Rankings — Returns the year-to-date singles rankings in ascending order for the ATP/WTA finals. Similar to the doubles race, this is used to show progress toward finals qualification rather than overall career status.

  • Rankings — Returns the official ATP/WTA singles world rankings, updated weekly, reflecting a player’s rolling 52-week performance. Use this when you want to display the global benchmark ranking that fans and media most often reference.

Note: The same player may appear in both Rankings and Race Rankings, but their positions may differ because Rankings use a rolling 52-week system, while Race Rankings track only year-to-date performance.


Building a Rankings Leaderboard

The Rankings and Race Rankings endpoints provide all the data you need to build leaderboards for ATP/WTA singles or doubles. Each competitor entry includes their rank, points, recent movement, and participation stats, along with full competitor details (ID, name, country, and abbreviation).

Here’s an example response from the Rankings endpoint
<ranking type_id="1" name="WTA" year="2025" week="35" gender="women">
		<competitor_rankings>
			<competitor_ranking rank="1" movement="0" points="11225" competitions_played="18">
				<competitor id="sr:competitor:157754" name="Sabalenka, Aryna" country="Neutral" abbreviation="SAB"/>
			</competitor_ranking>
			<competitor_ranking rank="2" movement="0" points="7933" competitions_played="16">
				<competitor id="sr:competitor:274013" name="Swiatek, Iga" country="Poland" country_code="POL" abbreviation="SWI"/>
			</competitor_ranking>
			<competitor_ranking rank="3" movement="0" points="7874" competitions_played="19">
				<competitor id="sr:competitor:373352" name="Gauff, Coco" country="USA" country_code="USA" abbreviation="GAU"/>
			</competitor_ranking>
    {
      "type_id": 1,
      "name": "WTA",
      "year": 2025,
      "week": 35,
      "gender": "women",
      "competitor_rankings": [
        {
          "rank": 1,
          "movement": 0,
          "points": 11225,
          "competitions_played": 18,
          "competitor": {
            "id": "sr:competitor:157754",
            "name": "Sabalenka, Aryna",
            "country": "Neutral",
            "abbreviation": "SAB"
          }
        },
        {
          "rank": 2,
          "movement": 0,
          "points": 7933,
          "competitions_played": 16,
          "competitor": {
            "id": "sr:competitor:274013",
            "name": "Swiatek, Iga",
            "country": "Poland",
            "country_code": "POL",
            "abbreviation": "SWI"
          }
        },
        {
          "rank": 3,
          "movement": 0,
          "points": 7874,
          "competitions_played": 19,
          "competitor": {
            "id": "sr:competitor:373352",
            "name": "Gauff, Coco",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "GAU"
          }
        }
      ]
    }

Map the rank field for each competitor into a table to sort them in ranking order. You can also display their total points, number of competitions_played, and country to provide more context for users.

On your platform, you can render this data in a leaderboard table like the example below showcasing women's rankings. The rankings endpoints return both male and female competitors in one response, simplifying toggles for gender.

You can implement filters that let users sort the table by competition type (singles or doubles) and toggle between world rankings and race rankings.

The Doubles Race Rankings endpoint returns team rankings for doubles finals by nesting two competitor IDs within a players array. Each entry includes the team’s combined ranking details (rank, movement, points, competitions played) while still exposing individual player information.

Doubles Race Rankings Response Snippet
	<ranking type_id="5" name="WTA" year="2025" week="36" gender="women">
		<competitor_rankings>
			<competitor_ranking rank="1" movement="0" points="5346" competitions_played="12">
				<competitor id="sr:competitor:315497" name="Errani S / Paolini J" country="Italy" country_code="ITA" abbreviation="ERP">
					<players>
						<player id="sr:competitor:19202" name="Errani, Sara" country="Italy" country_code="ITA" abbreviation="ERR"/>
						<player id="sr:competitor:69208" name="Paolini, Jasmine" country="Italy" country_code="ITA" abbreviation="PAO"/>
					</players>
				</competitor>
			</competitor_ranking>
			<competitor_ranking rank="2" movement="0" points="4990" competitions_played="6">
				<competitor id="sr:competitor:1131157" name="Siniakova K / Townsend T" abbreviation="SIT">
					<players>
						<player id="sr:competitor:72376" name="Siniakova, Katerina" country="Czechia" country_code="CZE" abbreviation="SIN"/>
						<player id="sr:competitor:51387" name="Townsend, Taylor" country="USA" country_code="USA" abbreviation="TOW"/>
					</players>
				</competitor>
			</competitor_ranking>
			<competitor_ranking rank="3" movement="0" points="4221" competitions_played="11">
				<competitor id="sr:competitor:1166451" name="Andreeva M / Shnaider D" abbreviation="ANS">
					<players>
						<player id="sr:competitor:871583" name="Andreeva, Mirra" country="Neutral" abbreviation="AND"/>
						<player id="sr:competitor:588071" name="Shnaider, Diana" country="Neutral" abbreviation="SHN"/>
					</players>
				</competitor>
  {
      "type_id": 5,
      "name": "WTA",
      "year": 2025,
      "week": 36,
      "gender": "women",
      "competitor_rankings": [
        {
          "rank": 1,
          "movement": 0,
          "points": 5346,
          "competitions_played": 12,
          "competitor": {
            "id": "sr:competitor:315497",
            "name": "Errani S / Paolini J",
            "country": "Italy",
            "country_code": "ITA",
            "abbreviation": "ERP",
            "players": [
              {
                "id": "sr:competitor:19202",
                "name": "Errani, Sara",
                "country": "Italy",
                "country_code": "ITA",
                "abbreviation": "ERR"
              },
              {
                "id": "sr:competitor:69208",
                "name": "Paolini, Jasmine",
                "country": "Italy",
                "country_code": "ITA",
                "abbreviation": "PAO"
              }
            ]
          }
        },
        {
          "rank": 2,
          "movement": 0,
          "points": 4990,
          "competitions_played": 6,
          "competitor": {
            "id": "sr:competitor:1131157",
            "name": "Siniakova K / Townsend T",
            "abbreviation": "SIT",
            "players": [
              {
                "id": "sr:competitor:72376",
                "name": "Siniakova, Katerina",
                "country": "Czechia",
                "country_code": "CZE",
                "abbreviation": "SIN"
              },
              {
                "id": "sr:competitor:51387",
                "name": "Townsend, Taylor",
                "country": "USA",
                "country_code": "USA",
                "abbreviation": "TOW"
              }
            ]
          }
        },
        {
          "rank": 3,
          "movement": 0,
          "points": 4221,
          "competitions_played": 11,
          "competitor": {
            "id": "sr:competitor:1166451",
            "name": "Andreeva M / Shnaider D",
            "abbreviation": "ANS",
            "players": [
              {
                "id": "sr:competitor:871583",
                "name": "Andreeva, Mirra",
                "country": "Neutral",
                "abbreviation": "AND"
              },
              {
                "id": "sr:competitor:588071",
                "name": "Shnaider, Diana",
                "country": "Neutral",
                "abbreviation": "SHN"
              }
            ]
          }
        }
      ]
    }

This structure makes it easy to cleanly map and display doubles teams in your leaderboard. You can render both players together on a single row while still showing their shared ranking points and country details.

🎾

Using Doubles Team IDs

Each doubles team has its own competitor.id, which you can use to pull team profiles and rankings directly from the Competitor Profile endpoint. This allows you to manage doubles as a single unit while still accessing individual player details when needed.


Generating a Rankings Profile

You can combine data from the Rankings and Race Rankings endpoints to generate a player profile that highlights both singles and doubles performance. A rankings profile provides users with a quick snapshot of where an individual competitor stands globally, including their rank, points earned, and progression across competition types.

For example, the profile below shows Adam Walton, who holds positions in both singles and doubles. Presenting this information side by side gives your users a complete view of a player’s overall performance.

🎾

Linking Data Across Endpoints

Use the player’s competitor.id to fetch and merge data across multiple endpoints, such as Rankings, Race Rankings, and Competitor Profile, to create a complete and dynamic profile view.


Accessing Standings

You can access tournament standings using the Season Standings feed. This feed provide standings info for relevant tournaments using the season ID.

Season Standings Response Example
<?xml version="1.0" encoding="UTF-8"?>
<season_standings
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated_at="2025-09-02T20:59:51+00:00"
	xmlns="http://schemas.sportradar.com/sportsapi/tennis/v3" xsi:schemaLocation="http://schemas.sportradar.com/sportsapi/tennis/v3 https://schemas.sportradar.com/sportsapi/tennis/v3/schemas/season_standings.xsd">
	<season_standing type="total" round="3">
		<groups>
			<group id="sr:league:79548" name="Group A" live="false" group_name="A">
				<stage order="2" type="league" phase="regular season" start_date="2024-09-10" end_date="2024-09-15" year="2024"/>
				<standings>
					<standing rank="1" played="3" win="3" loss="0" current_outcome="Playoffs" sets_won="3" sets_lost="0">
						<competitor id="sr:competitor:15459" name="Italy" country="Italy" country_code="ITA" abbreviation="ITA"/>
					</standing>
					<standing rank="2" played="3" win="1" loss="2" current_outcome="Playoffs" sets_won="1" sets_lost="1">
						<competitor id="sr:competitor:14438" name="Netherlands" country="Netherlands" country_code="NLD" abbreviation="NED"/>
					</standing>
					<standing rank="3" played="3" win="1" loss="2" sets_won="0" sets_lost="1">
						<competitor id="sr:competitor:15460" name="Belgium" country="Belgium" country_code="BEL" abbreviation="BEL"/>
					</standing>
					<standing rank="4" played="3" win="1" loss="2" sets_won="0" sets_lost="0">
						<competitor id="sr:competitor:16280" name="Brazil" country="Brazil" country_code="BRA" abbreviation="BRA"/>
					</standing>
				</standings>
			</group>
			<group id="sr:league:79550" name="Group B" live="false" group_name="B">
				<stage order="2" type="league" phase="regular season" start_date="2024-09-10" end_date="2024-09-15" year="2024"/>
				<standings>
					<standing rank="1" played="3" win="2" loss="1" current_outcome="Playoffs" sets_won="2" sets_lost="1">
						<competitor id="sr:competitor:14436" name="Australia" country="Australia" country_code="AUS" abbreviation="AUS"/>
					</standing>
					<standing rank="2" played="3" win="3" loss="0" current_outcome="Playoffs" sets_won="0" sets_lost="0">
						<competitor id="sr:competitor:14437" name="Spain" country="Spain" country_code="ESP" abbreviation="SPA"/>
					</standing>
					<standing rank="3" played="3" win="1" loss="2" sets_won="0" sets_lost="1">
						<competitor id="sr:competitor:14352" name="France" country="France" country_code="FRA" abbreviation="FRA"/>
					</standing>
					<standing rank="4" played="3" win="0" loss="3" sets_won="0" sets_lost="2">
						<competitor id="sr:competitor:14440" name="Czechia" country="Czechia" country_code="CZE" abbreviation="CZE"/>
					</standing>
				</standings>
			</group>
			<group id="sr:league:79552" name="Group C" live="false" group_name="C">
				<stage order="2" type="league" phase="regular season" start_date="2024-09-10" end_date="2024-09-15" year="2024"/>
				<standings>
					<standing rank="1" played="3" win="3" loss="0" current_outcome="Playoffs" sets_won="2" sets_lost="0">
						<competitor id="sr:competitor:14657" name="USA" country="USA" country_code="USA" abbreviation="USA"/>
					</standing>
					<standing rank="2" played="3" win="2" loss="1" current_outcome="Playoffs" sets_won="2" sets_lost="1">
						<competitor id="sr:competitor:14576" name="Germany" country="Germany" country_code="DEU" abbreviation="GER"/>
					</standing>
					<standing rank="3" played="3" win="1" loss="2" sets_won="0" sets_lost="0">
						<competitor id="sr:competitor:14825" name="Chile" country="Chile" country_code="CHL" abbreviation="CHI"/>
					</standing>
					<standing rank="4" played="3" win="0" loss="3" sets_won="0" sets_lost="1">
						<competitor id="sr:competitor:14578" name="Slovakia" country="Slovakia" country_code="SVK" abbreviation="SVK"/>
					</standing>
				</standings>
			</group>
			<group id="sr:league:79554" name="Group D" live="false" group_name="D">
				<stage order="2" type="league" phase="regular season" start_date="2024-09-10" end_date="2024-09-15" year="2024"/>
				<standings>
					<standing rank="1" played="3" win="3" loss="0" current_outcome="Playoffs" sets_won="3" sets_lost="0">
						<competitor id="sr:competitor:14577" name="Canada" country="Canada" country_code="CAN" abbreviation="CAN"/>
					</standing>
					<standing rank="2" played="3" win="2" loss="1" current_outcome="Playoffs" sets_won="0" sets_lost="0">
						<competitor id="sr:competitor:14441" name="Argentina" country="Argentina" country_code="ARG" abbreviation="ARG"/>
					</standing>
					<standing rank="3" played="3" win="1" loss="2" sets_won="0" sets_lost="1">
						<competitor id="sr:competitor:15766" name="Great Britain" country="Great Britain" country_code="GBR" abbreviation="GBR"/>
					</standing>
					<standing rank="4" played="3" win="0" loss="3" sets_won="0" sets_lost="2">
						<competitor id="sr:competitor:115785" name="Finland" country="Finland" country_code="FIN" abbreviation="FIN"/>
					</standing>
				</standings>
			</group>
		</groups>
	</season_standing>
</season_standings>
{
  "generated_at": "2025-09-02T16:59:24+00:00",
  "standings": [
    {
      "type": "total",
      "groups": [
        {
          "stage": {
            "order": 2,
            "type": "league",
            "phase": "regular season",
            "start_date": "2024-09-10",
            "end_date": "2024-09-15",
            "year": "2024"
          },
          "id": "sr:league:79548",
          "name": "Group A",
          "live": false,
          "standings": [
            {
              "rank": 1,
              "played": 3,
              "win": 3,
              "loss": 0,
              "competitor": {
                "id": "sr:competitor:15459",
                "name": "Italy",
                "country": "Italy",
                "country_code": "ITA",
                "abbreviation": "ITA"
              },
              "current_outcome": "Playoffs",
              "sets_won": 3,
              "sets_lost": 0
            },
            {
              "rank": 2,
              "played": 3,
              "win": 1,
              "loss": 2,
              "competitor": {
                "id": "sr:competitor:14438",
                "name": "Netherlands",
                "country": "Netherlands",
                "country_code": "NLD",
                "abbreviation": "NED"
              },
              "current_outcome": "Playoffs",
              "sets_won": 1,
              "sets_lost": 1
            },
            {
              "rank": 3,
              "played": 3,
              "win": 1,
              "loss": 2,
              "competitor": {
                "id": "sr:competitor:15460",
                "name": "Belgium",
                "country": "Belgium",
                "country_code": "BEL",
                "abbreviation": "BEL"
              },
              "sets_won": 0,
              "sets_lost": 1
            },
            {
              "rank": 4,
              "played": 3,
              "win": 1,
              "loss": 2,
              "competitor": {
                "id": "sr:competitor:16280",
                "name": "Brazil",
                "country": "Brazil",
                "country_code": "BRA",
                "abbreviation": "BRA"
              },
              "sets_won": 0,
              "sets_lost": 0
            }
          ],
          "group_name": "A"
        },
        {
          "stage": {
            "order": 2,
            "type": "league",
            "phase": "regular season",
            "start_date": "2024-09-10",
            "end_date": "2024-09-15",
            "year": "2024"
          },
          "id": "sr:league:79550",
          "name": "Group B",
          "live": false,
          "standings": [
            {
              "rank": 1,
              "played": 3,
              "win": 2,
              "loss": 1,
              "competitor": {
                "id": "sr:competitor:14436",
                "name": "Australia",
                "country": "Australia",
                "country_code": "AUS",
                "abbreviation": "AUS"
              },
              "current_outcome": "Playoffs",
              "sets_won": 2,
              "sets_lost": 1
            },
            {
              "rank": 2,
              "played": 3,
              "win": 3,
              "loss": 0,
              "competitor": {
                "id": "sr:competitor:14437",
                "name": "Spain",
                "country": "Spain",
                "country_code": "ESP",
                "abbreviation": "SPA"
              },
              "current_outcome": "Playoffs",
              "sets_won": 0,
              "sets_lost": 0
            },
            {
              "rank": 3,
              "played": 3,
              "win": 1,
              "loss": 2,
              "competitor": {
                "id": "sr:competitor:14352",
                "name": "France",
                "country": "France",
                "country_code": "FRA",
                "abbreviation": "FRA"
              },
              "sets_won": 0,
              "sets_lost": 1
            },
            {
              "rank": 4,
              "played": 3,
              "win": 0,
              "loss": 3,
              "competitor": {
                "id": "sr:competitor:14440",
                "name": "Czechia",
                "country": "Czechia",
                "country_code": "CZE",
                "abbreviation": "CZE"
              },
              "sets_won": 0,
              "sets_lost": 2
            }
          ],
          "group_name": "B"
        },
        {
          "stage": {
            "order": 2,
            "type": "league",
            "phase": "regular season",
            "start_date": "2024-09-10",
            "end_date": "2024-09-15",
            "year": "2024"
          },
          "id": "sr:league:79552",
          "name": "Group C",
          "live": false,
          "standings": [
            {
              "rank": 1,
              "played": 3,
              "win": 3,
              "loss": 0,
              "competitor": {
                "id": "sr:competitor:14657",
                "name": "USA",
                "country": "USA",
                "country_code": "USA",
                "abbreviation": "USA"
              },
              "current_outcome": "Playoffs",
              "sets_won": 2,
              "sets_lost": 0
            },
            {
              "rank": 2,
              "played": 3,
              "win": 2,
              "loss": 1,
              "competitor": {
                "id": "sr:competitor:14576",
                "name": "Germany",
                "country": "Germany",
                "country_code": "DEU",
                "abbreviation": "GER"
              },
              "current_outcome": "Playoffs",
              "sets_won": 2,
              "sets_lost": 1
            },
            {
              "rank": 3,
              "played": 3,
              "win": 1,
              "loss": 2,
              "competitor": {
                "id": "sr:competitor:14825",
                "name": "Chile",
                "country": "Chile",
                "country_code": "CHL",
                "abbreviation": "CHI"
              },
              "sets_won": 0,
              "sets_lost": 0
            },
            {
              "rank": 4,
              "played": 3,
              "win": 0,
              "loss": 3,
              "competitor": {
                "id": "sr:competitor:14578",
                "name": "Slovakia",
                "country": "Slovakia",
                "country_code": "SVK",
                "abbreviation": "SVK"
              },
              "sets_won": 0,
              "sets_lost": 1
            }
          ],
          "group_name": "C"
        },
        {
          "stage": {
            "order": 2,
            "type": "league",
            "phase": "regular season",
            "start_date": "2024-09-10",
            "end_date": "2024-09-15",
            "year": "2024"
          },
          "id": "sr:league:79554",
          "name": "Group D",
          "live": false,
          "standings": [
            {
              "rank": 1,
              "played": 3,
              "win": 3,
              "loss": 0,
              "competitor": {
                "id": "sr:competitor:14577",
                "name": "Canada",
                "country": "Canada",
                "country_code": "CAN",
                "abbreviation": "CAN"
              },
              "current_outcome": "Playoffs",
              "sets_won": 3,
              "sets_lost": 0
            },
            {
              "rank": 2,
              "played": 3,
              "win": 2,
              "loss": 1,
              "competitor": {
                "id": "sr:competitor:14441",
                "name": "Argentina",
                "country": "Argentina",
                "country_code": "ARG",
                "abbreviation": "ARG"
              },
              "current_outcome": "Playoffs",
              "sets_won": 0,
              "sets_lost": 0
            },
            {
              "rank": 3,
              "played": 3,
              "win": 1,
              "loss": 2,
              "competitor": {
                "id": "sr:competitor:15766",
                "name": "Great Britain",
                "country": "Great Britain",
                "country_code": "GBR",
                "abbreviation": "GBR"
              },
              "sets_won": 0,
              "sets_lost": 1
            },
            {
              "rank": 4,
              "played": 3,
              "win": 0,
              "loss": 3,
              "competitor": {
                "id": "sr:competitor:115785",
                "name": "Finland",
                "country": "Finland",
                "country_code": "FIN",
                "abbreviation": "FIN"
              },
              "sets_won": 0,
              "sets_lost": 2
            }
          ],
          "group_name": "D"
        }
      ],
      "round": 3
    }
  ]
}

The Season Standings endpoint gives you structured data to generate tournament-specific leaderboards.

  1. Iterate over each groups[] object to access competitor tables.
  2. Render core stats from each row: rank, played, win, loss.
  3. Apply tiebreak rules with sets_won and sets_lost when records are identical.
  4. Check current_outcome to flag teams qualified for playoffs.
  5. Reference the competitor object for stable IDs and display values.
  6. Label tables with group_name, stage details, and round for context.
  7. Aggregate per-group standings into a tournament leaderboard that stays in sync as results update.