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.
Core tournament routes take a seasonid — one year-edition of an event (Wimbledon 2025 is a different ID from Wimbledon 2024). Discover IDs from the Tours Calendar (Men & Women) endpoint. Draw and seed routes take the exact tournament name from the calendar (URL-encoded) and a year, or the numeric season ID in place of the name: an ID returns exactly that edition (a name can match two editions in one year).
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 wtafor the women's dataset.Returns details for one tournament season ID (this year’s 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 this year’s 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.qualifyingFirst | null | Prize (or points) for losing in the first 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 wtafor 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 wtafor 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 | null | Best-of sets (3 or 5) when known, otherwise null. |
data.singles[].odd1 | null | 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 | null | 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.singles[].tournament.court | null | Court surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }. |
data.singles[].tournament.rank | null | Tournament level: { id, name }. |
data.singles[].tournament.country | null | Country of the tournament: three-letter code, or { name, acronym }. |
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 | null | Best-of sets (3 or 5) when known, otherwise null. |
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. |
data.doubles[].tournament.court | null | Court surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }. |
data.doubles[].tournament.rank | null | Tournament level: { id, name }. |
data.doubles[].tournament.country | null | Country of the tournament: three-letter code, or { name, acronym }. |
Tournament Results
/tennis/v2/{atp|wta}/tournament/results/{season_id}atp. Use wtafor 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 | null | Best-of sets (3 or 5) when known, otherwise null. |
data.singles[].odd1 | null | 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 | null | 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.court | null | Court surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }. |
data.singles[].tournament.rank | null | Tournament level: { id, name }. |
data.singles[].tournament.country | null | Country of the tournament: three-letter code, or { name, acronym }. |
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 | null | Best-of sets (3 or 5) when known, otherwise null. |
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.court | null | Court surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }. |
data.doubles[].tournament.rank | null | Tournament level: { id, name }. |
data.doubles[].tournament.country | null | Country of the tournament: three-letter code, or { name, acronym }. |
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 | null | Best-of sets (3 or 5) when known, otherwise null. |
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.qualifying[].tournament.court | null | Court surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }. |
data.qualifying[].tournament.rank | null | Tournament level: { id, name }. |
data.qualifying[].tournament.country | null | Country of the tournament: three-letter code, or { name, acronym }. |
data.doublesQualifying | array | Doubles qualifying result rows. |
Extra tournament endpoints
These are not replacements for core calendar, info, seasons, past champions, or results.
Tournament Available Years
/tennis/v2/tournament/{atp|wta}/{tournament}atp. Use wtafor 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 wtafor 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 | null | Entry status of the winner (e.g. Q = qualifier, WC = wild card, LL = lucky loser), or null. |
singles[].winner_hand | null | Playing hand of the winner (R/L), or null. |
singles[].winner_ht | null | Height of the winner in cm, or null. |
singles[].winner_ioc | null | Country code of the winner, or null. |
singles[].winner_age | null | Age of the winner at the match date, or null. |
singles[].loser_entry | null | Entry status of the loser (Q, WC, LL, …), or null. |
singles[].loser_hand | null | Playing hand of the loser (R/L), or null. |
singles[].loser_ht | null | Height of the loser in cm, or null. |
singles[].loser_ioc | null | Country code of the loser, or null. |
singles[].loser_age | null | Age of the loser at the match date, or null. |
singles[].best_of | null | Best-of sets (3 or 5) when known, otherwise null. |
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 | null | 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 | null | 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 | null | Net approaches won (where tracked). Counted over the matches in this selection. |
singles[].player1.stats.netApproachesOf | null | 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 | null | Fastest serve in km/h (where tracked). |
singles[].player1.stats.averageFirstServeSpeed | null | Average first-serve speed in km/h (where tracked). |
singles[].player1.stats.averageSecondServeSpeed | null | 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 | null | 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 | null | 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 | null | Net approaches won (where tracked). Counted over the matches in this selection. |
singles[].player2.stats.netApproachesOf | null | 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 | null | Fastest serve in km/h (where tracked). |
singles[].player2.stats.averageFirstServeSpeed | null | Average first-serve speed in km/h (where tracked). |
singles[].player2.stats.averageSecondServeSpeed | null | 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 | string | Seed of player 2, or null. |
qualifying[].odd1 | null | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
qualifying[].odd2 | null | 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 | null | Entry status of the winner (e.g. Q = qualifier, WC = wild card, LL = lucky loser), or null. |
qualifying[].winner_hand | null | Playing hand of the winner (R/L), or null. |
qualifying[].winner_ht | null | Height of the winner in cm, or null. |
qualifying[].winner_ioc | null | Country code of the winner, or null. |
qualifying[].winner_age | null | Age of the winner at the match date, or null. |
qualifying[].loser_entry | null | Entry status of the loser (Q, WC, LL, …), or null. |
qualifying[].loser_hand | null | Playing hand of the loser (R/L), or null. |
qualifying[].loser_ht | null | Height of the loser in cm, or null. |
qualifying[].loser_ioc | null | Country code of the loser, or null. |
qualifying[].loser_age | null | Age of the loser at the match date, or null. |
qualifying[].best_of | null | Best-of sets (3 or 5) when known, otherwise null. |
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 | null | 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 | null | 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 | null | 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 | null | Net approaches won (where tracked). Counted over the matches in this selection. |
qualifying[].player1.stats.netApproachesOf | null | 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 | null | Fastest serve in km/h (where tracked). |
qualifying[].player1.stats.averageFirstServeSpeed | null | Average first-serve speed in km/h (where tracked). |
qualifying[].player1.stats.averageSecondServeSpeed | null | 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 | string | Tournament seed as a string, or null when unseeded. |
qualifying[].player2.odd | null | 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 | null | 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 | null | 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 | null | 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 wtafor 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 wtafor 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 wtafor 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 wtafor 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). |