v2

API Reference

Players

The Players module exposes player profile data, match statistics, surface performance, titles, finals history, past matches, and performance breakdowns for every ATP and WTA player in the database.

Endpoint Summary

MethodPathDescription
GET/tennis/v2/{type}/playerList all players
GET/tennis/v2/{type}/player/profile/{id}Player profile
GET/tennis/v2/{type}/player/titles/{id}Player titles
GET/tennis/v2/{type}/player/filter/{id}Player filter categories
GET/tennis/v2/{type}/player/match-stats/{id}Match statistics
GET/tennis/v2/{type}/player/past-matches/{id}Past match results
GET/tennis/v2/{type}/player/surface-summary/{id}Surface performance summary
GET/tennis/v2/{type}/player/perf-breakdown/{id}Performance breakdown
GET/tennis/v2/{type}/player/finals/{id}Finals results
GET/tennis/v2/{type}/player/intersting-h2h/{id}Interesting H2H matchups

List All Players

GET /tennis/v2/{type}/player Returns a list of all players in the selected tour

The Player entity serves a dual purpose — it is both a profile record and a live ranking snapshot. Fields are updated whenever ATP/WTA publish their official weekly ranking lists.

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta

Query Parameters

ParameterTypeDescription
include Optional string Comma-separated relations to load. Available: country — adds full country object to each player.
Example: include=country
filter Optional string Semicolon-separated filters in Key:value format. Available filters:
  • PlayerGroup:singles | doubles | both
  • PlayerCountry:{ESP,ITA} — filter by 3-letter country acronym
Example: filter=PlayerGroup:singles;PlayerCountry:ESP,ITA
pageSize Optional integer Results per page. Default: 10.
pageNo Optional integer Page number, 1-indexed. Default: 1.

Example Request

cURL
curl --request GET \
  --url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player' \
  --header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  --header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
[
  {
    "id": 104925,
    "name": "Carlos Alcaraz",
    "countryAcr": "ESP",
    "currentRank": 3,
    "points": 8855,
    "progress": 0
  },
  {
    "id": 106421,
    "name": "Jannik Sinner",
    "countryAcr": "ITA",
    "currentRank": 1,
    "points": 11330,
    "progress": 0
  }
]

Response Properties

PropertyTypeDescription
idintegerUnique player identifier. Stable across all endpoints — use this to join fixtures, H2H, and stats.
namestringFull player name as used in official ATP/WTA records.
countryAcrstring | null3-letter nationality code (e.g. ESP, ITA). Represents the player's nationality for ranking purposes.
currentRankinteger | nullCurrent singles world ranking position. null for unranked players.
pointsinteger | nullTotal ATP/WTA ranking points — the aggregate used to determine currentRank.
progressinteger | nullRanking change since the last official weekly update. Positive = moved up, negative = dropped, 0 = unchanged.

Player Profile

GET /tennis/v2/{type}/player/profile/{id} Returns full profile details for a single player including ranking, surface breakdown, and extended biographical data

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Query Parameters

ParameterTypeDescription
include Optional string Comma-separated extras to load. Available:
  • form — appends recent form as a form array (e.g. ["w","l","w"])
  • ranking — appends curRank and bestRank objects with ranking history data
  • country — appends a full country object (name, acronym, flag) to the player
Example: include=form,ranking,country

Example Request

cURL
curl --request GET \
  --url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/profile/104925' \
  --header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  --header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
{
  "id": 104925,
  "name": "Carlos Alcaraz",
  "birthday": "2003-05-05T00:00:00.000Z",
  "countryAcr": "ESP",
  "height": 185,
  "wikidata_id": "Q105513",
  "currentRank": 3,
  "progress": 0,
  "points": 8855,
  "ch": 1,
  "hardPoints": 4500,
  "hardTournament": 12,
  "ihardPoints": null,
  "ihardTournament": null,
  "clayPoints": 3200,
  "clayTournament": 8,
  "grassPoints": 1155,
  "grassTournament": 3,
  "carpetPoints": null,
  "carterTournament": null,
  "doublesPosition": null,
  "doublesPoints": null,
  "doublesProgress": null,
  "prize": 35200000,
  "itf": null,
  "ep": {
    "turnedPro": "2018",
    "plays": "Right-Handed, Two-Handed Backhand",
    "coach": "Juan Carlos Ferrero",
    "birthplace": "El Palmar, Spain",
    "residence": "Murcia, Spain",
    "weight": "185 lbs. (84 kg)",
    "playerStatus": "Active",
    "twitter": "carlitosalcaraz",
    "instagram": "carlosalcaraz",
    "facebook": null,
    "site": null,
    "page": "https://www.atptour.com/en/players/carlos-alcaraz/a0e2/overview",
    "last_revised": "2025-01-15"
  }
}

Response Properties — Core Player Fields

PropertyTypeDescription
idintegerUnique player ID. Stable across all endpoints.
namestringFull name as used in official ATP/WTA records.
birthdaydatetime | nullDate of birth as ISO 8601 timestamp (time part is always midnight UTC — treat as date-only).
countryAcrstring | null3-letter nationality code for ranking purposes (e.g. ESP, ITA).
heightinteger | nullPlayer height in centimetres (e.g. 185 = 6'1").
wikidata_idstring | nullWikidata entity ID (e.g. Q105513). Use to enrich data from wikidata.org — player photos, multi-language Wikipedia links, biographical data.
currentRankinteger | nullCurrent singles ranking position. null for unranked players.
progressinteger | nullSingles ranking change since last weekly update. Positive = moved up, negative = dropped.
pointsinteger | nullTotal singles ranking points.
chinteger | nullCareer High — the best singles ranking this player has ever achieved.
hardPoints / hardTournamentinteger | nullRanking points earned on outdoor hard court / number of hard-court tournaments played this cycle.
ihardPoints / ihardTournamentinteger | nullPoints and events on indoor hard court. Tracked separately (e.g. Australian Open = outdoor hard; ATP Finals = indoor hard).
clayPoints / clayTournamentinteger | nullPoints and events on clay.
grassPoints / grassTournamentinteger | nullPoints and events on grass.
carpetPoints / carterTournamentinteger | nullPoints and events on carpet. Note: carterTournament is a spelling inconsistency in the database (should be carpetTournament).
doublesPositioninteger | nullCurrent doubles ranking position.
doublesPointsinteger | nullTotal doubles ranking points.
doublesProgressinteger | nullDoubles ranking movement since last update.
prizeinteger | nullCumulative career prize money in USD as an integer (e.g. 35200000 = $35.2M).
itfinteger | nullITF world ranking. Primarily relevant for junior or lower-tier players before achieving an ATP/WTA ranking.

Response Properties — Extended Profile (ep object)

The ep field contains biographical and social media data from the Extended Profile table. It may be null if no extended data exists for the player.

PropertyTypeDescription
turnedProstringYear the player turned professional (e.g. "2018").
playsstringPlaying hand — e.g. "Right-Handed", "Left-Handed", "Right-Handed, Two-Handed Backhand".
coachstringName of the player's current coach.
birthplacestringCity and country of birth (e.g. "El Palmar, Spain").
residencestringCurrent city of residence.
weightstringPlayer weight as a formatted string (e.g. "185 lbs. (84 kg)").
playerStatusstringCareer status — "Active" for active players, "Inactive" for retired.
twitterstring | nullTwitter/X handle without the @ prefix. null if unavailable.
instagramstring | nullInstagram handle without the @ prefix.
facebookstring | nullFacebook page identifier.
sitestring | nullOfficial personal website URL.
pagestring | nullLink to the player's official ATP or WTA profile page.
last_revisedstringDate this extended profile record was last updated.

Player Titles

GET /tennis/v2/{type}/player/titles/{id} Returns all tournament titles won by a player

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/titles/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
{
  "data": [
    { "tourRankId": "1", "tourRank": "Grand Slam", "titlesWon": "3", "titlesLost": "1" },
    { "tourRankId": "3", "tourRank": "Masters 1000", "titlesWon": "8", "titlesLost": "4" }
  ]
}

Response Properties

PropertyTypeDescription
tourRankIdstringTournament tier ID (as a string). Cross-reference with Ranking Tiers.
tourRankstringName of the tournament tier (e.g. "Grand Slam", "Masters 1000").
titlesWonstringNumber of finals won (titles) at this tier level.
titlesLoststringNumber of finals lost (runner-up appearances) at this tier level.

Match Statistics

GET /tennis/v2/{type}/player/match-stats/{id} Returns aggregated match statistics for a player (win/loss records, ace counts, break point stats, etc.)

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/match-stats/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
{
  "data": {
    "serviceStats": {
      "acesGm": 823,
      "doubleFaultsGm": 245,
      "firstServeGm": 4521,
      "firstServeOfGm": 6102,
      "winningOnFirstServeGm": 3218,
      "winningOnFirstServeOfGm": 4521,
      "winningOnSecondServeGm": 1055,
      "winningOnSecondServeOfGm": 1581
    },
    "rtnStats": {
      "acesGm": 312,
      "doubleFaultsGm": 198,
      "firstServeGm": 3410,
      "firstServeOfGm": 5018,
      "winningOnFirstServeGm": 1820,
      "winningOnFirstServeOfGm": 3410,
      "winningOnSecondServeGm": 780,
      "winningOnSecondServeOfGm": 1250
    },
    "breakPointsServeStats": {
      "breakPointFacedGm": 310,
      "breakPointSavedGm": 187
    },
    "breakPointsRtnStats": {
      "breakPointChanceGm": 298,
      "breakPointWonGm": 142
    }
  }
}

Response Properties

Aggregated career serve/return statistics across all matches with stat records. All Gm-suffixed fields are raw totals (not percentages) — divide firstServeGm / firstServeOfGm × 100 to compute the career first-serve percentage.

PropertyTypeDescription
serviceStats.acesGminteger | nullCareer total aces served.
serviceStats.doubleFaultsGminteger | nullCareer total double faults served.
serviceStats.firstServeGm / firstServeOfGminteger | nullFirst serves in / total first serve attempts. Divide for first-serve % (e.g. 4521/6102 = 74%).
serviceStats.winningOnFirstServeGm / winningOnFirstServeOfGminteger | nullPoints won on first serve / first-serve points played.
serviceStats.winningOnSecondServeGm / winningOnSecondServeOfGminteger | nullPoints won on second serve / second-serve points played.
rtnStats.*integer | nullSame fields as serviceStats but computed from the player's perspective when returning (opponent serving).
breakPointsServeStats.breakPointFacedGminteger | nullTotal break points faced on serve across all matches.
breakPointsServeStats.breakPointSavedGminteger | nullBreak points saved — i.e. breakPointFacedGm minus breaks conceded.
breakPointsRtnStats.breakPointChanceGminteger | nullTotal break point opportunities earned while returning.
breakPointsRtnStats.breakPointWonGminteger | nullBreak points converted. Divide by breakPointChanceGm for conversion rate.

Past Matches

GET /tennis/v2/{type}/player/past-matches/{id} Returns completed match results for a player, most recent first

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Query Parameters

ParameterTypeDescription
include Optional string Comma-separated relations to load. Available: round, tournament, tournament.court, tournament.rank, tournament.country, stat (per-match serve & return stats).
Example: include=round,tournament.court,stat
filter Optional string Semicolon-separated filters in Key:value format. Available filters:
  • GameYear:{2024,2025} — filter by year(s)
  • GameRound:{1,2} — filter by round ID(s)
  • GameCourt:{1,2} — filter by court ID(s), requires tournament in include
  • TourRank:{1,2} — filter by tournament rank ID(s), requires tournament in include
  • GameTour:{8871} — filter by tournament ID(s)
Example: filter=GameYear:2025;GameRound:1,2
pageSize Optional integer Results per page. Default: 10.
pageNo Optional integer Page number, 1-indexed. Default: 1. Use hasNextPage in the response to check for more pages.

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/past-matches/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
{
  "data": [
    {
      "id": 390145,
      "date": "2025-06-08T00:00:00.000Z",
      "result": "6-3 6-2 6-4",
      "player1Id": 104925,
      "player2Id": 106421,
      "tournamentId": 8871,
      "roundId": 1,
      "player1": { "id": 104925, "name": "Carlos Alcaraz", "countryAcr": "ESP" },
      "player2": { "id": 106421, "name": "Jannik Sinner", "countryAcr": "ITA" },
      "tournament": { "id": 8871, "name": "Roland Garros", "courtId": 2, "rankId": 1 }
    }
  ],
  "hasNextPage": false
}

Response Properties

PropertyTypeDescription
dataarrayPaginated list of past match records for this player, most recent first.
hasNextPagebooleantrue if more results exist. Use pageNo query parameter to paginate.
idintegerMatch record ID.
datedatetimeMatch date as ISO 8601 UTC.
resultstringScore string (e.g. "6-3 6-2 6-4"). Space-separated set scores.
player1Id / player2Idintegerplayer1 is always the winner in historical archive data.
player1 / player2object{ id, name, countryAcr }.
tournamentIdintegerForeign key to Tournament table.
tournamentobject | nullEmbedded tournament: { id, name, courtId, rankId, date, countryAcr, court, rank }.
roundIdintegerRound ID (1 = Final, 2 = SF, 3 = QF, etc.).

Surface Summary

GET /tennis/v2/{type}/player/surface-summary/{id} Returns win/loss records broken down by court surface (hard, clay, grass, carpet, indoor hard)

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/surface-summary/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
{
  "data": [
    {
      "year": "2025",
      "surfaces": [
        { "courtId": 1, "court": "Hard", "courtWins": "21", "courtLosses": "4" },
        { "courtId": 2, "court": "Clay", "courtWins": "12", "courtLosses": "2" }
      ]
    },
    {
      "year": "2024",
      "surfaces": [ "..." ]
    }
  ]
}

Response Properties

PropertyTypeDescription
yearstringCalendar year (as a string, e.g. "2025"). Results sorted most recent year first.
surfacesarrayWin/loss breakdown by surface for that year. One entry per surface type the player competed on.
surfaces[].courtIdintegerSurface type ID. Cross-reference with Courts lookup.
surfaces[].courtstringSurface name: "Hard", "Clay", "Grass", "Indoor Hard", "Carpet".
surfaces[].courtWinsstringMatches won on this surface in this year.
surfaces[].courtLossesstringMatches lost on this surface in this year.

Performance Breakdown

GET /tennis/v2/{type}/player/perf-breakdown/{id} Returns granular performance metrics including serve, return, and pressure statistics

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/perf-breakdown/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Response Properties

Returns { data: {...} } where data is a parsed JSON blob stored in the PlayerStat table. The exact field set varies by player and data source. The object typically contains detailed serve/return performance metrics, pressure statistics, and situational win rates — similar in structure to the H2H Stats response. Returns { data: null } if no performance data is available for the player.

Finals

GET /tennis/v2/{type}/player/finals/{id} Returns all finals appearances (won and lost) for a player

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Query Parameters

ParameterTypeDescription
filter Optional string Semicolon-separated filters in Key:value format. Available filters:
  • GameYear:{2024,2025} — filter by year(s)
  • GameRound:{1,2} — filter by round ID(s)
  • GameCourt:{1,2} — requires tournament in include
  • TourRank:{1,2} — requires tournament in include
  • GameTour:{8871} — filter by tournament ID(s)
Example: filter=GameYear:2024,2025;TourRank:1

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/finals/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Response Properties

Returns { data: [...] } — same match record structure as Past Matches. Only final-round matches are included (roundId = 12 for standard events, roundId = 16 for Tour Finals round-robin). Includes tournament prize field and optional country object for the host nation.

Interesting H2H

GET /tennis/v2/{type}/player/intersting-h2h/{id} Returns notable head-to-head records for a player (most wins, biggest rivals, etc.)

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/intersting-h2h/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
{
  "data": [
    {
      "id": 8802,
      "player1Wins": 5,
      "player2Wins": 8,
      "player1AllWins": 5,
      "player2AllWins": 8,
      "player1Id": 104925,
      "player2Id": 106421,
      "player1": { "id": 104925, "name": "Carlos Alcaraz", "countryAcr": "ESP", "wins": 5 },
      "player2": { "id": 106421, "name": "Jannik Sinner", "countryAcr": "ITA", "wins": 8 }
    }
  ]
}

Response Properties

Returns up to 12 H2H records ranked by total matches played (most contested rivalries first). The requested player always appears as either player1 or player2.

PropertyTypeDescription
idintegerH2H record ID in the database.
player1AllWinsintegerAll-time career wins for player1 against player2.
player2AllWinsintegerAll-time career wins for player2 against player1.
player1WinsintegerRecent-subset wins for player1 (last 5–10 matches).
player2WinsintegerRecent-subset wins for player2.
player1Id / player2IdintegerPlayer IDs for each side of the rivalry.
player1 / player2objectEmbedded player summary: { id, name, countryAcr, wins }. The wins field shows that player's all-time win count against the other.

Player Filter

GET /tennis/v2/{type}/player/filter/{id} Returns available filter categories and metadata for a player (used to build UI filter panels)

Path Parameters

ParameterTypeDescription
type Requiredstringatp or wta
id RequiredintegerPlayer ID (≥ 1)

Example Request

cURL
curl -G 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/player/filter/104925' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'

Example Response

JSON
{
  "data": {
    "rounds": [
      { "roundId": 1, "round": "Final" },
      { "roundId": 2, "round": "Semi-Final" }
    ],
    "courts": [
      { "courtId": 1, "court": "Hard" },
      { "courtId": 2, "court": "Clay" }
    ],
    "tournaments": [
      { "tournamentId": 8871, "tournament": "Roland Garros", "tournamentDate": "2025-05-26T00:00:00.000Z" }
    ],
    "tournamentRanks": [
      { "rankId": 1, "rank": "Grand Slam" }
    ],
    "gameYears": [ 2025, 2024, 2023 ]
  }
}

Response Properties

Returns the distinct filter values available in this player's match history — typically used to populate filter UI dropdowns.

PropertyTypeDescription
roundsarrayDistinct rounds reached. Each item: { roundId, round }.
courtsarrayDistinct court surfaces played on. Each item: { courtId, court }.
tournamentsarrayAll tournaments this player has competed in. Each item: { tournamentId, tournament, tournamentDate }.
tournamentRanksarrayDistinct tournament tier levels. Each item: { rankId, rank }.
gameYearsarray<number>All years in which this player has match records, sorted descending.