API Reference
Tournaments & Draws
The Tournaments module provides tournament metadata, season history, past champions, results, and a full year calendar for men's and women's events.
A tournament edition ID identifies one edition of an event, such as Wimbledon 2025. Find it in tournament calendar or match responses. Use an edition ID to select the exact draw; names can match more than one edition in a year. Each endpoint lists the identifiers it accepts.
Core past champions is /tournament/past-champions/{season_id}. The original misspelled path /tournament/past-champtions/{season_id} keeps working.
rankId is the integer from GET /ranking. Grand Slam is 4. Challenger/ITF > $10K is 1. ATP 250 and ATP 500 both use rankId 2 (Main tour); the calendar tier string is the marketing label. Use filter=TourRank:4 for slams — not TourRank:1.
The year tournament calendar is documented under Tours Calendar (Men & Women). This page covers draws, info, seasons, past champions, and results for a season ID.
Endpoint Summary
|
|
|
|
|
|
|
Tournament Details by Season ID
/tennis/v2/{atp|wta}/tournament/info/{season_id}atp. Use wta for the women's dataset.Returns details for one tournament season ID (the selected tournament edition). Prize-money breakdown is added with include=singlesPrize.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
season_id | Yes | number | Tournament season ID (≥ 1). Non-numeric or zero IDs return 400 Bad Request. An ID that does not exist returns 200 with an empty result. |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extras to load. court, rank, and country are always included by default. Additional available options:
include=rating,singlesPrize |
Response Properties
| Field | Type | Description |
|---|---|---|
id | integer | Season ID for the selected tournament edition. Use it on /tournament/info/{season_id}. |
name | string | Tournament name. URL-encode this exact string on advanced draw/seed routes. |
date | string | Start date as ISO-8601. |
tier / rankId | string | tier is the display label (e.g. ATP 250). rankId is the integer from GET /ranking — Grand Slam is 4, not 1. |
court / courtId | object | Surface object (id, name) and its ID. |
round | object | Tournament level object (id, name), e.g. Grand Slam, Masters 1000. |
country | object | Host country: acronym (3-letter code) and name. |
link | integer | Tournament link ID shared across editions (the event, not the season). |
singlesPrize | object | USD prize money per round when include=singlesPrize (ATP). |
data | object | Response payload: the list or object documented in the rows below. |
data.id | number | Numeric ID of this item (see the parent object: match, player, tournament, live event, …). |
data.name | string | Display name. |
data.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, … |
data.date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
data.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, … |
data.tier | string | Tournament tier/series label, or null. |
data.link | number | ID of the previous edition of the same tournament (used to chain seasons), or null. |
data.court | object | Court surface: { id, name }. |
data.court.id | number | Court-surface ID. |
data.court.name | string | Court-surface name, e.g. Hard, Clay, Grass, I.hard. |
data.round | object | Round: { id, name }. |
data.round.id | number | Round ID. |
data.round.name | string | Round label, e.g. "1/4", "Final". |
data.country | object | Country: { name, acronym }. |
data.country.acronym | string | Three-letter country code. |
data.country.name | string | Country name. |
data.singlesPrize | object | Singles prize money per finishing round, in the tournament's currency (numbers; null when unknown). |
data.singlesPrize.winner | number | Prize (or points) for the champion. |
data.singlesPrize.finalist | number | Prize (or points) for the runner-up. |
data.singlesPrize.semiFinalist | number | Prize (or points) for losing in the semifinal. |
data.singlesPrize.quarterFinalist | number | Prize (or points) for losing in the quarterfinal. |
data.singlesPrize.fourth | number | Prize (or points) for losing in the fourth round. |
data.singlesPrize.third | number | Prize (or points) for losing in the third round. |
data.singlesPrize.second | number | Prize (or points) for losing in the second round. |
data.singlesPrize.first | number | Prize (or points) for losing in the first round. |
data.singlesPrize.qualifying | number | Points and prize for qualifying into the main draw. |
data.singlesPrize.qualifyingSecond | number | Prize (or points) for losing in the second qualifying round. |
data.singlesPrize.preQualifying | number | Prize (or points) for losing in pre-qualifying. |
Tournament Seasons
/tennis/v2/{atp|wta}/tournament/seasons/{season_id}atp. Use wta for the women's dataset.Returns all yearly editions (seasons) of the same tournament event.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
season_id | Yes | number | Tournament season ID (≥ 1). Non-numeric or zero IDs return 400 Bad Request. An ID that does not exist returns 200 with an empty result. |
Response Properties
| Field | Type | Description |
|---|---|---|
data | array | Response payload: the list or object documented in the rows below. |
data[] | object | One item of `data`; its fields are listed below. |
data[].id | number | Numeric ID of this item (see the parent object: match, player, tournament, live event, …). |
data[].name | string | Display name. |
data[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
Past Champions by Season ID
/tennis/v2/{atp|wta}/tournament/past-champions/{season_id}atp. Use wta for the women's dataset.Returns a list of past winners (champions) for a recurring tournament.The original misspelled path /tournament/past-champtions/{season_id} keeps working for existing integrations; both return the same response.
Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
season_id | Yes | number | Tournament season ID (≥ 1). Non-numeric or zero IDs return 400 Bad Request. An ID that does not exist returns 200 with an empty result. |
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player · Tournament.
| Field | Type | Description |
|---|---|---|
data | object | Response payload: the list or object documented in the rows below. |
data.singles | array | Singles main-draw result rows. |
data.singles[] | object | One item of `data.singles`; its fields are listed below. |
data.singles[].id | string | Numeric ID of this item (see the parent object: match, player, tournament, live event, …). |
data.singles[].matchId | string | Match ID (same value as id on core match rows). |
data.singles[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
data.singles[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0–3 are qualifying rounds. |
data.singles[].player1Id | number | Numeric ID of player 1. |
data.singles[].player2Id | number | Numeric ID of player 2. |
data.singles[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
data.singles[].match_winner | number | Player ID of the match winner. |
data.singles[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
data.singles[].result_type | string | How the match ended: completed, retired, walkover or default. |
data.singles[].best_of | string | Best-of sets: "3" or "5". Stored for older matches, otherwise read from the score; null when the score does not show it (retirement, default, walkover). |
data.singles[].odd1 | string | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
data.singles[].odd2 | string | Pre-match/closing odds retained for player 2, or null when not available. |
data.singles[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
data.singles[].player1.id | number | Player 1 ID. |
data.singles[].player1.name | string | Player 1 name. |
data.singles[].player1.countryAcr | string | Player 1 country code. |
data.singles[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
data.singles[].player2.id | number | Player 2 ID. |
data.singles[].player2.name | string | Player 2 name. |
data.singles[].player2.countryAcr | string | Player 2 country code. |
data.singles[].tournament | object | Tournament object (id, name, date, level, surface, country, …). |
data.singles[].tournament.id | number | Tournament season ID. |
data.singles[].tournament.name | string | Tournament name. |
data.singles[].tournament.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, … |
data.singles[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
data.singles[].tournament.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, … |
data.singles[].tournament.countryAcr | string | Three-letter country code of the tournament. |
data.singles[].tournament.prize | string | Prize money as shown by the source, e.g. "$48.9M" (string), or null. |
data.doubles | array | Doubles main-draw result rows. |
data.doubles[] | object | One item of `data.doubles`; its fields are listed below. |
data.doubles[].id | string | Numeric ID of this item (see the parent object: match, player, tournament, live event, …). |
data.doubles[].matchId | string | Match ID (same value as id on core match rows). |
data.doubles[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
data.doubles[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0–3 are qualifying rounds. |
data.doubles[].player1Id | number | Numeric ID of player 1. |
data.doubles[].player2Id | number | Numeric ID of player 2. |
data.doubles[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
data.doubles[].match_winner | number | Player ID of the match winner. |
data.doubles[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
data.doubles[].result_type | string | How the match ended: completed, retired, walkover or default. |
data.doubles[].best_of | string | Best-of sets: "3" or "5". Stored for older matches, otherwise read from the score; null when the score does not show it (retirement, default, walkover). |
data.doubles[].odd1 | string | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
data.doubles[].odd2 | string | Pre-match/closing odds retained for player 2, or null when not available. |
data.doubles[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
data.doubles[].player1.id | number | Player 1 ID. |
data.doubles[].player1.name | string | Player 1 name. |
data.doubles[].player1.countryAcr | string | Player 1 country code. |
data.doubles[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
data.doubles[].player2.id | number | Player 2 ID. |
data.doubles[].player2.name | string | Player 2 name. |
data.doubles[].player2.countryAcr | string | Player 2 country code. |
data.doubles[].tournament | object | Tournament object (id, name, date, level, surface, country, …). |
data.doubles[].tournament.id | number | Tournament season ID. |
data.doubles[].tournament.name | string | Tournament name. |
data.doubles[].tournament.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, … |
data.doubles[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
data.doubles[].tournament.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, … |
data.doubles[].tournament.countryAcr | string | Three-letter country code of the tournament. |
data.doubles[].tournament.prize | string | Prize money as shown by the source, e.g. "$48.9M" (string), or null. |
Tournament Results
/tennis/v2/{atp|wta}/tournament/results/{season_id}atp. Use wta for the women's dataset.Returns the full match results draw for a tournament season.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
season_id | Yes | number | Tournament season ID (≥ 1). Non-numeric or zero IDs return 400 Bad Request. An ID that does not exist returns 200 with an empty result. |
Results are from the historical Game archive — player1 is always the winner, player2 is the loser. The result field contains the score string (set scores, e.g. "6-3 6-2 6-4"). For ITF $10K and Challenger/ITF > $10K editions from 2005–2015, every match carries the tournament start date in date (no per-match date is available); order those by roundId.
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player · Tournament.
| Field | Type | Description |
|---|---|---|
data | object | Response payload: the list or object documented in the rows below. |
data.singles | array | Singles main-draw result rows. |
data.singles[] | object | One item of `data.singles`; its fields are listed below. |
data.singles[].id | string | Numeric ID of this item (see the parent object: match, player, tournament, live event, …). |
data.singles[].matchId | string | Match ID (same value as id on core match rows). |
data.singles[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
data.singles[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0–3 are qualifying rounds. |
data.singles[].player1Id | number | Numeric ID of player 1. |
data.singles[].player2Id | number | Numeric ID of player 2. |
data.singles[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
data.singles[].match_winner | number | Player ID of the match winner. |
data.singles[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
data.singles[].result_type | string | How the match ended: completed, retired, walkover or default. |
data.singles[].best_of | string | Best-of sets: "3" or "5". Stored for older matches, otherwise read from the score; null when the score does not show it (retirement, default, walkover). |
data.singles[].odd1 | string | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
data.singles[].odd2 | string | Pre-match/closing odds retained for player 2, or null when not available. |
data.singles[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
data.singles[].player1.id | number | Player 1 ID. |
data.singles[].player1.name | string | Player 1 name. |
data.singles[].player1.countryAcr | string | Player 1 country code. |
data.singles[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
data.singles[].player2.id | number | Player 2 ID. |
data.singles[].player2.name | string | Player 2 name. |
data.singles[].player2.countryAcr | string | Player 2 country code. |
data.singles[].tournament | object | Tournament object (id, name, date, level, surface, country, …). |
data.singles[].tournament.id | number | Tournament season ID. |
data.singles[].tournament.name | string | Tournament name. |
data.singles[].tournament.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, … |
data.singles[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
data.singles[].tournament.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, … |
data.singles[].tournament.countryAcr | string | Three-letter country code of the tournament. |
data.doubles | array | Doubles main-draw result rows. |
data.doubles[] | object | One item of `data.doubles`; its fields are listed below. |
data.doubles[].id | string | Numeric ID of this item (see the parent object: match, player, tournament, live event, …). |
data.doubles[].matchId | string | Match ID (same value as id on core match rows). |
data.doubles[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
data.doubles[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0–3 are qualifying rounds. |
data.doubles[].player1Id | number | Numeric ID of player 1. |
data.doubles[].player2Id | number | Numeric ID of player 2. |
data.doubles[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
data.doubles[].match_winner | number | Player ID of the match winner. |
data.doubles[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
data.doubles[].result_type | string | How the match ended: completed, retired, walkover or default. |
data.doubles[].best_of | string | Best-of sets: "3" or "5". Stored for older matches, otherwise read from the score; null when the score does not show it (retirement, default, walkover). |
data.doubles[].odd1 | string | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
data.doubles[].odd2 | string | Pre-match/closing odds retained for player 2, or null when not available. |
data.doubles[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
data.doubles[].player1.id | number | Player 1 ID. |
data.doubles[].player1.name | string | Player 1 name. |
data.doubles[].player1.countryAcr | string | Player 1 country code. |
data.doubles[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
data.doubles[].player2.id | number | Player 2 ID. |
data.doubles[].player2.name | string | Player 2 name. |
data.doubles[].player2.countryAcr | string | Player 2 country code. |
data.doubles[].tournament | object | Tournament object (id, name, date, level, surface, country, …). |
data.doubles[].tournament.id | number | Tournament season ID. |
data.doubles[].tournament.name | string | Tournament name. |
data.doubles[].tournament.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, … |
data.doubles[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
data.doubles[].tournament.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, … |
data.doubles[].tournament.countryAcr | string | Three-letter country code of the tournament. |
data.qualifying | array | Singles qualifying result rows. |
data.qualifying[] | object | One item of `data.qualifying`; its fields are listed below. |
data.qualifying[].id | string | Numeric ID of this item (see the parent object: match, player, tournament, live event, …). |
data.qualifying[].matchId | string | Match ID (same value as id on core match rows). |
data.qualifying[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
data.qualifying[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0–3 are qualifying rounds. |
data.qualifying[].player1Id | number | Numeric ID of player 1. |
data.qualifying[].player2Id | number | Numeric ID of player 2. |
data.qualifying[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
data.qualifying[].match_winner | number | Player ID of the match winner. |
data.qualifying[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
data.qualifying[].result_type | string | How the match ended: completed, retired, walkover or default. |
data.qualifying[].best_of | string | Best-of sets: "3" or "5". Stored for older matches, otherwise read from the score; null when the score does not show it (retirement, default, walkover). |
data.qualifying[].odd1 | string | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
data.qualifying[].odd2 | string | Pre-match/closing odds retained for player 2, or null when not available. |
data.qualifying[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
data.qualifying[].player1.id | number | Player 1 ID. |
data.qualifying[].player1.name | string | Player 1 name. |
data.qualifying[].player1.countryAcr | string | Player 1 country code. |
data.qualifying[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
data.qualifying[].player2.id | number | Player 2 ID. |
data.qualifying[].player2.name | string | Player 2 name. |
data.qualifying[].player2.countryAcr | string | Player 2 country code. |
data.qualifying[].tournament | object | Tournament object (id, name, date, level, surface, country, …). |
data.qualifying[].tournament.id | number | Tournament season ID. |
data.qualifying[].tournament.name | string | Tournament name. |
data.qualifying[].tournament.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, … |
data.qualifying[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
data.qualifying[].tournament.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, … |
data.qualifying[].tournament.countryAcr | string | Three-letter country code of the tournament. |
data.doublesQualifying | array | Doubles qualifying result rows. |
More tournament endpoints
These add data the core tournament routes above do not have, such as draws, seeds and ranking points.
Tournament Available Years
/tennis/v2/tournament/{atp|wta}/{tournament}atp. Use wta for the women's dataset.Returns all available years for which historical data exists for a specific tournament.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
tournament | Yes | string | Tournament name ("Monte-Carlo Rolex Masters - Monte-Carlo") |
Response Properties
| Field | Type | Description |
|---|---|---|
[] | object | One item of the response; its fields are listed below. |
[].year | number | Season year. |
[].tournamentName | string | Tournament display name. |
Tournament Draw
/tennis/v2/tournament/{atp|wta}/{tournament}/{year}/drawsatp. Use wta for the women's dataset.Returns the complete tournament draw for the selected event, including all rounds, matchups, player information, seeds, scores, and match status. This endpoint can be used to display the tournament bracket from the opening round through the final. Groups: singles, doubles, qualifying (singles) and doublesQualifying. Each match row has matchId and links.match (the /matches detail route); every row has its draw position (for seasons before 2023, when the feed has none, positions are rebuilt from the bracket: top seed at the top), and every first-round bye row has isBye: true: a seed who skips round 1 appears as a built row (player2 null, bye: true, no matchId), and a feed bye (result bye) keeps its matchId with bye: true on the empty side. Add fullBracket=true to get every draw (singles, doubles, qualifying) as a full bracket: every round has a row for every position; slots the feed has no row for yet come back with matchId null and fromBracket: true, a finished earlier match sending its winner. Undecided players are named TBA (tbd: true, awaitingParticipants: true on the row), the empty side of a bye is BYE (bye: true), finished rows carry winnerId and players stay in the provider order. For ITF $10K and Challenger/ITF > $10K editions from 2005–2015, match dates in the draw are the tournament start date (no per-match date is available). The tournament can be a name or a numeric edition id; an id returns exactly that edition (a name can match two editions in one year).Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
tournament | Yes | string | Tournament name ("Monte-Carlo Rolex Masters - Monte-Carlo") |
year | Yes | integer | Year Value(2026) |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
includeAll | No | boolean | Include Challenger/ITF and full history where supported. Example: includeAll=true |
fullBracket | No | boolean | Default false. true returns every draw (singles, doubles, qualifying) as a full bracket: every round has a row for every position (round of 32: 16, 8, 4, 2, 1; qualifying: each round half the one before), undecided players are TBA (tbd: true), the empty side of a bye is BYE (bye: true) and finished rows carry winnerId. Built rows have fromBracket: true and matchId: null. Without it the response is unchanged. |
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player · Tournament.
| Field | Type | Description |
|---|---|---|
singles | array | Singles main-draw rows. |
singles[] | object | One item of `singles`; its fields are listed below. |
singles[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0–3 are qualifying rounds. |
singles[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
singles[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
singles[].seed1 | string | Seed of player 1, or null. |
singles[].seed2 | string | Seed of player 2, or null. |
singles[].odd1 | string | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
singles[].odd2 | string | Pre-match/closing odds retained for player 2, or null when not available. |
singles[].player1Id | number | Numeric ID of player 1. |
singles[].player2Id | number | Numeric ID of player 2. |
singles[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
singles[].draw | number | Draw position (slot) of the match within its round. |
singles[].winner_entry | string | Entry status of the winner from the draw (Q = qualifier, WC = wild card, LL = lucky loser, SE = special exempt…); "" for a direct entry. |
singles[].winner_hand | string | Playing hand of the winner: R or L (from the player profile; null when unknown). |
singles[].winner_ht | string | Height of the winner in cm, e.g. "191" (null when unknown). |
singles[].winner_ioc | string | Three-letter country code of the winner, e.g. "ITA". |
singles[].winner_age | number | Age of the winner in whole years on the match date (null when the birthday is unknown). |
singles[].loser_entry | string | Entry status of the loser from the draw (Q, WC, LL, SE…); "" for a direct entry. |
singles[].loser_hand | string | Playing hand of the loser: R or L (from the player profile; null when unknown). |
singles[].loser_ht | string | Height of the loser in cm, e.g. "183" (null when unknown). |
singles[].loser_ioc | string | Three-letter country code of the loser, e.g. "ESP". |
singles[].loser_age | number | Age of the loser in whole years on the match date (null when the birthday is unknown). |
singles[].best_of | string | Best-of sets: "3" or "5". Stored for older matches, otherwise read from the score; null when the score does not show it (retirement, default, walkover). |
singles[].poll_vote | string | Fan poll vote count for the match (string). |
singles[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
singles[].player1.id | number | Player 1 ID. |
singles[].player1.name | string | Player 1 name. |
singles[].player1.countryAcr | string | Player 1 country code. |
singles[].player1.seed | string | Tournament seed as a string, or null when unseeded. |
singles[].player1.odd | number | Pre-match match-winner odds for this player (decimal), as a string; null when not available. |
singles[].player1.image | string | Player photo path on this API (append to the base URL). |
singles[].player1.image_p_name | string | Player photo path keyed by player name (alternative to image). |
singles[].player1.stats | object | Per-match statistics of player 1 in this draw match (null when not recorded). |
singles[].player1.stats.firstServe | number | First serves landed in. Counted over the matches in this selection. |
singles[].player1.stats.firstServeOf | number | First-serve attempts (total service points). Counted over the matches in this selection. |
singles[].player1.stats.aces | number | Aces served (count). |
singles[].player1.stats.doubleFaults | number | Double faults. Counted over the matches in this selection. |
singles[].player1.stats.unforcedErrors | number | Unforced errors (where tracked). Counted over the matches in this selection. |
singles[].player1.stats.winningOnFirstServe | number | Points won on first serve. Counted over the matches in this selection. |
singles[].player1.stats.winningOnFirstServeOf | number | Points played on first serve (first serves in). Counted over the matches in this selection. |
singles[].player1.stats.winningOnSecondServe | number | Points won on second serve. Counted over the matches in this selection. |
singles[].player1.stats.winningOnSecondServeOf | number | Points played on second serve. Counted over the matches in this selection. |
singles[].player1.stats.winners | number | Winners (where tracked). Counted over the matches in this selection. |
singles[].player1.stats.breakPointsConverted | number | Break points converted as returner. Counted over the matches in this selection. |
singles[].player1.stats.breakPointsConvertedOf | number | Break-point chances as returner. Counted over the matches in this selection. |
singles[].player1.stats.netApproaches | number | Net approaches won (where tracked). Counted over the matches in this selection. |
singles[].player1.stats.netApproachesOf | number | Net approaches made (where tracked). Counted over the matches in this selection. |
singles[].player1.stats.totalPointsWon | number | Total points won. Counted over the matches in this selection. |
singles[].player1.stats.fastestServe | number | Fastest serve in km/h (where tracked). |
singles[].player1.stats.averageFirstServeSpeed | number | Average first-serve speed in km/h (where tracked). |
singles[].player1.stats.averageSecondServeSpeed | number | Average second-serve speed in km/h (where tracked). |
singles[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
singles[].player2.id | number | Player 2 ID. |
singles[].player2.name | string | Player 2 name. |
singles[].player2.countryAcr | string | Player 2 country code. |
singles[].player2.seed | string | Tournament seed as a string, or null when unseeded. |
singles[].player2.odd | string | Pre-match match-winner odds for this player (decimal), as a string; null when not available. |
singles[].player2.image | string | Player photo path on this API (append to the base URL). |
singles[].player2.image_p_name | string | Player photo path keyed by player name (alternative to image). |
singles[].player2.stats | object | Per-match statistics of player 2 in this draw match (null when not recorded). |
singles[].player2.stats.firstServe | number | First serves landed in. Counted over the matches in this selection. |
singles[].player2.stats.firstServeOf | number | First-serve attempts (total service points). Counted over the matches in this selection. |
singles[].player2.stats.aces | number | Aces served (count). |
singles[].player2.stats.doubleFaults | number | Double faults. Counted over the matches in this selection. |
singles[].player2.stats.unforcedErrors | number | Unforced errors (where tracked). Counted over the matches in this selection. |
singles[].player2.stats.winningOnFirstServe | number | Points won on first serve. Counted over the matches in this selection. |
singles[].player2.stats.winningOnFirstServeOf | number | Points played on first serve (first serves in). Counted over the matches in this selection. |
singles[].player2.stats.winningOnSecondServe | number | Points won on second serve. Counted over the matches in this selection. |
singles[].player2.stats.winningOnSecondServeOf | number | Points played on second serve. Counted over the matches in this selection. |
singles[].player2.stats.winners | number | Winners (where tracked). Counted over the matches in this selection. |
singles[].player2.stats.breakPointsConverted | number | Break points converted as returner. Counted over the matches in this selection. |
singles[].player2.stats.breakPointsConvertedOf | number | Break-point chances as returner. Counted over the matches in this selection. |
singles[].player2.stats.netApproaches | number | Net approaches won (where tracked). Counted over the matches in this selection. |
singles[].player2.stats.netApproachesOf | number | Net approaches made (where tracked). Counted over the matches in this selection. |
singles[].player2.stats.totalPointsWon | number | Total points won. Counted over the matches in this selection. |
singles[].player2.stats.fastestServe | number | Fastest serve in km/h (where tracked). |
singles[].player2.stats.averageFirstServeSpeed | number | Average first-serve speed in km/h (where tracked). |
singles[].player2.stats.averageSecondServeSpeed | number | Average second-serve speed in km/h (where tracked). |
singles[].tournament | object | Tournament object (id, name, date, level, surface, country, …). |
singles[].tournament.id | number | Tournament season ID. |
singles[].tournament.name | string | Tournament name. |
singles[].h2h | string | Career head-to-head as "player1Wins-player2Wins", e.g. "4-1". |
singles[].matchId | number | Match ID (same value as id on core match rows). |
singles[].links | object | Ready-made URLs for this match's detail routes. |
singles[].links.match | string | URL of the match detail route (/tennis/v2/matches/{matchId}); source=game marks a completed match. |
qualifying | array | Points and prize for qualifying into the main draw. |
qualifying[] | object | One item of `qualifying`; its fields are listed below. |
qualifying[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0–3 are qualifying rounds. |
qualifying[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
qualifying[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
qualifying[].seed1 | string | Seed of player 1, or null. |
qualifying[].seed2 | null | Seed of player 2, or null. |
qualifying[].odd1 | string | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
qualifying[].odd2 | string | Pre-match/closing odds retained for player 2, or null when not available. |
qualifying[].player1Id | number | Numeric ID of player 1. |
qualifying[].player2Id | number | Numeric ID of player 2. |
qualifying[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
qualifying[].draw | number | Draw position (slot) of the match within its round. |
qualifying[].winner_entry | string | Entry status of the winner from the draw (Q = qualifier, WC = wild card, LL = lucky loser, SE = special exempt…); "" for a direct entry. |
qualifying[].winner_hand | string | Playing hand of the winner: R or L (from the player profile; null when unknown). |
qualifying[].winner_ht | string | Height of the winner in cm, e.g. "191" (null when unknown). |
qualifying[].winner_ioc | string | Three-letter country code of the winner, e.g. "ITA". |
qualifying[].winner_age | number | Age of the winner in whole years on the match date (null when the birthday is unknown). |
qualifying[].loser_entry | string | Entry status of the loser from the draw (Q, WC, LL, SE…); "" for a direct entry. |
qualifying[].loser_hand | string | Playing hand of the loser: R or L (from the player profile; null when unknown). |
qualifying[].loser_ht | string | Height of the loser in cm, e.g. "183" (null when unknown). |
qualifying[].loser_ioc | string | Three-letter country code of the loser, e.g. "ESP". |
qualifying[].loser_age | number | Age of the loser in whole years on the match date (null when the birthday is unknown). |
qualifying[].best_of | string | Best-of sets: "3" or "5". Stored for older matches, otherwise read from the score; null when the score does not show it (retirement, default, walkover). |
qualifying[].poll_vote | string | Fan poll vote count for the match (string). |
qualifying[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
qualifying[].player1.id | number | Player 1 ID. |
qualifying[].player1.name | string | Player 1 name. |
qualifying[].player1.countryAcr | string | Player 1 country code. |
qualifying[].player1.seed | string | Tournament seed as a string, or null when unseeded. |
qualifying[].player1.odd | number | Pre-match match-winner odds for this player (decimal), as a string; null when not available. |
qualifying[].player1.image | string | Player photo path on this API (append to the base URL). |
qualifying[].player1.image_p_name | string | Player photo path keyed by player name (alternative to image). |
qualifying[].player1.stats | object | Per-match statistics of player 1 in this draw match (null when not recorded). |
qualifying[].player1.stats.firstServe | number | First serves landed in. Counted over the matches in this selection. |
qualifying[].player1.stats.firstServeOf | number | First-serve attempts (total service points). Counted over the matches in this selection. |
qualifying[].player1.stats.aces | number | Aces served (count). |
qualifying[].player1.stats.doubleFaults | number | Double faults. Counted over the matches in this selection. |
qualifying[].player1.stats.unforcedErrors | number | Unforced errors (where tracked). Counted over the matches in this selection. |
qualifying[].player1.stats.winningOnFirstServe | number | Points won on first serve. Counted over the matches in this selection. |
qualifying[].player1.stats.winningOnFirstServeOf | number | Points played on first serve (first serves in). Counted over the matches in this selection. |
qualifying[].player1.stats.winningOnSecondServe | number | Points won on second serve. Counted over the matches in this selection. |
qualifying[].player1.stats.winningOnSecondServeOf | number | Points played on second serve. Counted over the matches in this selection. |
qualifying[].player1.stats.winners | number | Winners (where tracked). Counted over the matches in this selection. |
qualifying[].player1.stats.breakPointsConverted | number | Break points converted as returner. Counted over the matches in this selection. |
qualifying[].player1.stats.breakPointsConvertedOf | number | Break-point chances as returner. Counted over the matches in this selection. |
qualifying[].player1.stats.netApproaches | number | Net approaches won (where tracked). Counted over the matches in this selection. |
qualifying[].player1.stats.netApproachesOf | number | Net approaches made (where tracked). Counted over the matches in this selection. |
qualifying[].player1.stats.totalPointsWon | number | Total points won. Counted over the matches in this selection. |
qualifying[].player1.stats.fastestServe | number | Fastest serve in km/h (where tracked). |
qualifying[].player1.stats.averageFirstServeSpeed | number | Average first-serve speed in km/h (where tracked). |
qualifying[].player1.stats.averageSecondServeSpeed | number | Average second-serve speed in km/h (where tracked). |
qualifying[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
qualifying[].player2.id | number | Player 2 ID. |
qualifying[].player2.name | string | Player 2 name. |
qualifying[].player2.countryAcr | string | Player 2 country code. |
qualifying[].player2.seed | null | Tournament seed as a string, or null when unseeded. |
qualifying[].player2.odd | string | Pre-match match-winner odds for this player (decimal), as a string; null when not available. |
qualifying[].player2.image | string | Player photo path on this API (append to the base URL). |
qualifying[].player2.image_p_name | string | Player photo path keyed by player name (alternative to image). |
qualifying[].player2.stats | object | Per-match statistics of player 2 in this draw match (null when not recorded). |
qualifying[].player2.stats.firstServe | number | First serves landed in. Counted over the matches in this selection. |
qualifying[].player2.stats.firstServeOf | number | First-serve attempts (total service points). Counted over the matches in this selection. |
qualifying[].player2.stats.aces | number | Aces served (count). |
qualifying[].player2.stats.doubleFaults | number | Double faults. Counted over the matches in this selection. |
qualifying[].player2.stats.unforcedErrors | number | Unforced errors (where tracked). Counted over the matches in this selection. |
qualifying[].player2.stats.winningOnFirstServe | number | Points won on first serve. Counted over the matches in this selection. |
qualifying[].player2.stats.winningOnFirstServeOf | number | Points played on first serve (first serves in). Counted over the matches in this selection. |
qualifying[].player2.stats.winningOnSecondServe | number | Points won on second serve. Counted over the matches in this selection. |
qualifying[].player2.stats.winningOnSecondServeOf | number | Points played on second serve. Counted over the matches in this selection. |
qualifying[].player2.stats.winners | number | Winners (where tracked). Counted over the matches in this selection. |
qualifying[].player2.stats.breakPointsConverted | number | Break points converted as returner. Counted over the matches in this selection. |
qualifying[].player2.stats.breakPointsConvertedOf | number | Break-point chances as returner. Counted over the matches in this selection. |
qualifying[].player2.stats.netApproaches | number | Net approaches won (where tracked). Counted over the matches in this selection. |
Tournament Seeds by Name and Year
/tennis/v2/tournament/{atp|wta}/{tournament}/{year}/seedsatp. Use wta for the women's dataset.Returns the list of seeded players for a specific tournament. Each record includes the player's name, player ID and official seed number in the main draw.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
tournament | Yes | string | Tournament name ("Monte-Carlo Rolex Masters - Monte-Carlo") |
year | Yes | integer | Year Value(2026) |
Response Properties
| Field | Type | Description |
|---|---|---|
[].player | string | Player name. |
[].playerId | integer | Player ID (the same ID as in rankings, profiles and match rows). |
[].seed | integer | Seed number in the main draw. |
[] | object | One item of the response; its fields are listed below. |
Tournament Most Victories
/tennis/v2/tournament/{atp|wta}/{tournament}/most-victoriesatp. Use wta for the women's dataset.Returns the list of players with the most wins at a given tournament across all yearsPath Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
tournament | Yes | string | Tournament name ("Monte-Carlo Rolex Masters - Monte-Carlo") |
Response Properties
| Field | Type | Description |
|---|---|---|
[].id | number | Player ID. |
[].name | string | Player name. |
[].countryAcr | string | Three-letter country code. |
[].wins | number | Titles won at this tournament (finals won across all editions), not match wins. |
[].image / image_p_name | string | Player photo paths (by ID / by name). |
[] | object | One item of the response; its fields are listed below. |
Current Tournament Seeds
Returns seeds only for a tournament being played this week; otherwise the list is empty ([]). The example (Almaty Open, 19–25 October 2026) is empty once that week has passed. For a current tournament, call Active Tournaments (/tennis/v2/calendar/active) and take its name. For a past edition use Tournament Seeds by Name and Year.
/tennis/v2/tournament/{atp|wta}/{tournament}/seedsatp. Use wta for the women's dataset.Returns the current seedings for a tournament (omit year for current edition)Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
tournament | Yes | string | Tournament name ("Monte-Carlo Rolex Masters - Monte-Carlo") |
Response Properties
| Field | Type | Description |
|---|---|---|
[].player | string | Player name. |
[].playerId | integer | Player ID (the same ID as in rankings, profiles and match rows). |
[].seed | integer | Seed number in the main draw. |
[] | object | One item of the response; its fields are listed below. |
Tournament Ranking Points
/tennis/v2/tournament/{atp|wta}/{tournament}/{year}/pointsatp. Use wta for the women's dataset.Returns the ranking points awarded per round in a given tournament and year.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
tournament | Yes | string | Tournament name ("Monte-Carlo Rolex Masters - Monte-Carlo") |
year | Yes | integer | Year Value(2026) |
Response Properties
| Field | Type | Description |
|---|---|---|
winner / finalist / semiFinalist / quarterFinalist / fourth / third / second / first | object | points and prize for that round. |
qualifying / qualifyingSecond / qualifyingFirst / preQualifying | object | Qualifying-round points and prize. |
winner.points | number | Ranking points awarded for the champion. |
winner.prize | number | Prize money awarded for the champion, in the tournament currency (null when unknown). |
finalist.points | number | Ranking points awarded for the runner-up. |
finalist.prize | number | Prize money awarded for the runner-up, in the tournament currency (null when unknown). |
semiFinalist.points | number | Ranking points awarded for losing in the semifinal. |
semiFinalist.prize | number | Prize money awarded for losing in the semifinal, in the tournament currency (null when unknown). |
quarterFinalist.points | number | Ranking points awarded for losing in the quarterfinal. |
quarterFinalist.prize | number | Prize money awarded for losing in the quarterfinal, in the tournament currency (null when unknown). |
fourth.points | number | Ranking points awarded for losing in the fourth round. |
fourth.prize | number | Prize money awarded for losing in the fourth round, in the tournament currency (null when unknown). |
third.points | number | Ranking points awarded for losing in the third round. |
third.prize | number | Prize money awarded for losing in the third round, in the tournament currency (null when unknown). |
second.points | number | Ranking points awarded for losing in the second round. |
second.prize | number | Prize money awarded for losing in the second round, in the tournament currency (null when unknown). |
first.points | number | Ranking points awarded for losing in the first round. |
first.prize | number | Prize money awarded for losing in the first round, in the tournament currency (null when unknown). |
qualifying.points | number | Ranking points awarded for qualifying into the main draw. |
qualifying.prize | number | Prize money awarded for qualifying into the main draw, in the tournament currency (null when unknown). |
qualifyingSecond.points | number | Ranking points awarded for losing in the second qualifying round. |
qualifyingSecond.prize | number | Prize money awarded for losing in the second qualifying round, in the tournament currency (null when unknown). |
qualifyingFirst.points | null | Ranking points awarded for losing in the first qualifying round. |
qualifyingFirst.prize | null | Prize money awarded for losing in the first qualifying round, in the tournament currency (null when unknown). |
preQualifying.points | null | Ranking points awarded for losing in pre-qualifying. |
preQualifying.prize | number | Prize money awarded for losing in pre-qualifying, in the tournament currency (null when unknown). |