API Reference

Head-to-Head Stats & Analysis

Use the core routes for H2H wins, match lists, aggregated stats, and filters. Paths accept a numeric ID or a URL-encoded display name.

Endpoint Summary

GET/tennis/v2/{atp|wta}/h2h/info/{player1_id}/{player2_id}
GET/tennis/v2/{atp|wta}/h2h/filter/{player1_id}/{player2_id}
GET/tennis/v2/{atp|wta}/h2h/matches/{player1_id}/{player2_id}
GET/tennis/v2/{atp|wta}/h2h/stats/{player1_id}/{player2_id}
GET/tennis/v2/{atp|wta}/h2h/vs-all-stats/{player_id}
GET/tennis/v2/{atp|wta}/h2h/match-stats/{tournamentId}/{player1_id}/{player2_id}

H2H Summary by Player IDs

GET/tennis/v2/{atp|wta}/h2h/info/{player1_id}/{player2_id}
This example uses atp. Use wtafor the women's dataset.Returns how many times each player has beaten the other, split by court surface. Path accepts numeric IDs or URL-encoded display names. Counts official H2H matches only by default; add includeAll=true to include Challenger, ITF and qualifying matches.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_idYesstring
First player: numeric ID or display name. Example: 68074 or Carlos Alcaraz.
player2_idYesstring
Second player: numeric ID or display name. Example: 47275 or Jannik Sinner.

Query Parameter

ParameterRequiredTypeDescription
includeAllNoboolean
Default false: only official H2H matches count (tour level: Grand Slams, Masters, ATP/WTA Tour, Tour Finals, Davis Cup / BJK Cup, Olympics). Challenger, Futures/ITF and qualifying-round matches are left out, matching the official ATP/WTA head-to-head. Set includeAll=true to include them. Example: includeAll=true
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/h2h/info/68074/47275' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
dataarrayOne object per court surface where these two players have met.
courtIdintegerSurface ID. Resolve names with GET /tennis/v2/court.
courtstringSurface label, e.g. Hard, Clay, I.hard, Grass.
player1winsstringWins on this surface for the first path player.
player2winsstringWins on this surface for the second path player.

H2H Matches by Player IDs

GET/tennis/v2/{atp|wta}/h2h/matches/{player1_id}/{player2_id}
This example uses atp. Use wtafor the women's dataset.Returns the full list of past matches between two players. On these rows player1 is the winner. Path accepts numeric IDs or URL-encoded names. Counts official H2H matches only by default; add includeAll=true to include Challenger, ITF and qualifying matches. odd1 / odd2 are Marathonbetโ€™s pre-match prices for player1 / player2; when the stored values were null they are filled from the Marathonbet odds archive by player ID. Doubles sides also carry members: [{id, name}] for the two players (id null when the name is not unique).

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_idYesstring
First player: numeric ID or display name. Example: 68074 or Carlos Alcaraz.
player2_idYesstring
Second player: numeric ID or display name. Example: 47275 or Jannik Sinner.

Query Parameter

ParameterRequiredTypeDescription
includeAllNoboolean
Default false: only official H2H matches count (tour level: Grand Slams, Masters, ATP/WTA Tour, Tour Finals, Davis Cup / BJK Cup, Olympics). Challenger, Futures/ITF and qualifying-round matches are left out, matching the official ATP/WTA head-to-head. Set includeAll=true to include them. Example: includeAll=true
includeNostring
Comma-separated extra objects to add. round returns the human-readable tournament round associated with roundId, for example Quarter-Final, Semi-Final or Final (full lookup: GET /tennis/v2/round). Also tournament, tournament.court, tournament.rank, tournament.country, stat (per-match serve & return statistics).
Example: include=round,tournament.court
filterNostring
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 โ€” court ID(s) from GET /court (1 Hard, 2 Clay, 3 I.hard, 4 Carpet, 5 Grass)
  • TourRank:4 โ€” rank_id from GET /ranking (Grand Slam is 4)
  • PlayerGroup:singles โ€” singles, doubles or both
  • GameTour:20340 โ€” filter by specific tournament ID(s)
Example: filter=GameYear:2024,2025;TourRank:4. Unknown filter names return 400 listing the supported ones.
surfaceNostring
Only hard, clay, grass, or carpet on this core route. Same as filter=GameCourt:<id> with the GET /court IDs: hard 1, clay 2, carpet 4, grass 5 (indoor hard, 3, has no surface value; use filter=GameCourt:3). Other values return 400. Example: surface=clay.
pageSizeNointeger
Results per page. When omitted, the endpoint's own default applies (100 on most list endpoints; some use 50 or 500), and the response's pageSize shows the value used. Core maximum: 500 (larger values are reduced). Example: pageSize=10.
pageNoNointeger
Page number, 1-indexed. Default: 1. Example: pageNo=1. Use hasNextPage in the response to check for more pages.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/h2h/matches/68074/47275' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

Shared objects in this response (defined once in Reusable response schemas): Player ยท Tournament.

FieldTypeDescription
dataarrayThe page of results. An empty array with HTTP 200 means the request was valid and nothing matched that date, filter, or page.
pageNointegerCurrent page, starting at 1. Also returned as page.
pageSizeintegerItems requested for this page. Also returned as limit. Core maximum is 500.
hasNextPagebooleantrue if another page exists. Stop when this is false or data is empty.
idintegerCompleted-match archive ID (not a live event id). Not permanent: completed matches are renumbered when the results archive is reloaded. A recent result's id usually changes within about a day, and an old id can later belong to a different match. To store or link a match, keep its liveMatchId instead (player1Id-player2Id-tournamentId-roundId, built from this row), which /tennis/v2/matches/{matchId} accepts with the players in either order.
datestringMatch date/time as ISO-8601. Exception: for lower-level events (TourRank 0 ITF $10K and TourRank 1 Challenger/ITF > $10K) from 2005โ€“2015, only the tournament start date is available, so every match of that draw carries the tournament start date; order those matches by roundId.
resultstringScore string from the winner's (player1's) side, e.g. 6-4 6-3. Retirements and walkovers carry ret. / w/o in the score.
player1Id / player2IdintegerOn completed matches, player1 is always the winner and player2 the loser.
tournamentId / roundIdintegerEvent edition and round.
odd1 / odd2string | nullMarathonbet pre-match match-winner prices: odd1 is player1's price, odd2 player2's. When the stored values were null (the archive lists the pair the other way round, e.g. winner first), they are filled from the Marathonbet odds archive, matched by player ID. null when Marathonbet has no price; other bookmakers and markets: links.odds (/matches/{matchId}/odds). Often null on older matches.
player1 / player2objectid, name, countryAcr. Doubles sides (name A/B) also carry members: [{ id, name }, { id, name }], the two players resolved by exact name; id is null when no player, or more than one, has that name.
data[].matchIdstringMatch ID (same value as id on core match rows).
data[].match_winnernumberPlayer ID of the match winner.
data[].result_typestringHow the match ended: completed, retired, walkover or default.
data[].best_ofnullBest-of sets (3 or 5) when known, otherwise null.
data[].player1.idnumberPlayer 1 ID.
data[].player1.namestringPlayer 1 name.
data[].player1.countryAcrstringPlayer 1 country code.
data[].player2.idnumberPlayer 2 ID.
data[].player2.namestringPlayer 2 name.
data[].player2.countryAcrstringPlayer 2 country code.
data[].tournamentobjectTournament object (id, name, date, level, surface, country, โ€ฆ).
data[].tournament.idnumberTournament season ID.
data[].tournament.namestringTournament name.
data[].tournament.courtIdnumberNumeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, โ€ฆ
data[].tournament.datestringTournament start date (ISO-8601 UTC).
data[].tournament.rankIdnumberTournament 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[].tournament.countryAcrstringThree-letter country code of the tournament.
data[].tournament.courtnullCourt surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }.
data[].tournament.ranknullTournament level: { id, name }.
data[].tournament.countrynullCountry of the tournament: three-letter code, or { name, acronym }.
data[].oddsAvailablebooleantrue when the odds archive has pre-match prices for this match; links.odds then returns them (both bookmakers).
data[].linksobjectReady-made URLs for this match's detail routes.
data[].links.oddsstringURL of the archived pre-match odds for this match (both bookmakers); present when oddsAvailable is true.
pagenumberCurrent page number (1-based).
limitnumberItems per page.

H2H Aggregate Stats by Player IDs

GET/tennis/v2/{atp|wta}/h2h/stats/{player1_id}/{player2_id}
This example uses atp. Use wtafor the women's dataset.Returns aggregated serve and return statistics comparing the two players over all their meetings. player1Stats is the first path player. Counts official H2H matches only by default; add includeAll=true to include Challenger, ITF and qualifying matches.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_idYesstring
First player: numeric ID or display name. Example: 68074 or Carlos Alcaraz.
player2_idYesstring
Second player: numeric ID or display name. Example: 47275 or Jannik Sinner.

Query Parameter

ParameterRequiredTypeDescription
includeAllNoboolean
Default false: only official H2H matches count (tour level: Grand Slams, Masters, ATP/WTA Tour, Tour Finals, Davis Cup / BJK Cup, Olympics). Challenger, Futures/ITF and qualifying-round matches are left out, matching the official ATP/WTA head-to-head. Set includeAll=true to include them. Example: includeAll=true
surfaceNostring
Only hard, clay, grass, or carpet on this core route. Same as filter=GameCourt:<id> with the GET /court IDs: hard 1, clay 2, carpet 4, grass 5 (indoor hard, 3, has no surface value; use filter=GameCourt:3). Other values return 400. Example: surface=clay.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/h2h/stats/68074/47275' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
data.matchesCountintegerMeetings included in this aggregate.
data.player1StatsobjectTotals for the first path player (wins, aces, surface wins, โ€ฆ).
data.player2StatsobjectTotals for the second path player, same shape.
dataobjectResponse payload: the list or object documented in the rows below.
data.player1Stats.idnumberNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
data.player1Stats.statMatchesPlayednumberMatches with statistics in this selection.
data.player1Stats.matchesWonnumberMatches won. Counted over the matches in this selection.
data.player1Stats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
data.player1Stats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
data.player1Stats.acesnumberAces served. Counted over the matches in this selection.
data.player1Stats.doubleFaultsnumberDouble faults. Counted over the matches in this selection.
data.player1Stats.unforcedErrorsnumberUnforced errors (where tracked). Counted over the matches in this selection.
data.player1Stats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
data.player1Stats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
data.player1Stats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
data.player1Stats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
data.player1Stats.winnersnumberWinners (where tracked). Counted over the matches in this selection.
data.player1Stats.breakPointsConvertednumberBreak points converted as returner. Counted over the matches in this selection.
data.player1Stats.breakPointsConvertedOfnumberBreak-point chances as returner. Counted over the matches in this selection.
data.player1Stats.netApproachesnumberNet approaches won (where tracked). Counted over the matches in this selection.
data.player1Stats.netApproachesOfnumberNet approaches made (where tracked). Counted over the matches in this selection.
data.player1Stats.returnPtsWinnumberReturn points won. Counted over the matches in this selection.
data.player1Stats.returnPtsWinOfnumberReturn points played. Counted over the matches in this selection.
data.player1Stats.totalPointsWonnumberTotal points won. Counted over the matches in this selection.
data.player1Stats.fastestServenumberFastest serve in km/h (where tracked).
data.player1Stats.averageFastestServenumberAverage of the per-match fastest serves in km/h (where tracked).
data.player1Stats.averageFirstServeSpeednumberAverage first-serve speed in km/h (where tracked).
data.player1Stats.averageSecondServeSpeednumberAverage second-serve speed in km/h (where tracked).
data.player1Stats.avgTimestringAverage match duration (H:MM:SS).
data.player1Stats.firstServePercentagenumberFirst serves in as % of first-serve attempts.
data.player1Stats.winningOnFirstServePercentagenumberFirst-serve points won %.
data.player1Stats.winningOnSecondServePercentagenumberSecond-serve points won %.
data.player1Stats.returnPtsWinPercentagenumberReturn points won %.
data.player1Stats.breakpointsWonPercentagenumberBreak points converted %.
data.player1Stats.bestOfThreeWonnumberBest-of-three matches won.
data.player1Stats.bestOfThreeWonPercentagenumberBest-of-three matches won %.
data.player1Stats.bestOfThreeCountnumberBest-of-three matches played.
data.player1Stats.bestOfFiveWonnumberBest-of-five matches won.
data.player1Stats.bestOfFiveWonPercentagenumberBest-of-five matches won %.
data.player1Stats.bestOfFiveCountnumberBest-of-five matches played.
data.player1Stats.firstSetWinMatchWinnumberMatches won after winning the first set.
data.player1Stats.firstSetWinMatchWinPercentagenumber% of matches won after winning the first set.
data.player1Stats.firstSetWinMatchLosenumberMatches lost after winning the first set.
data.player1Stats.firstSetWinMatchLosePercentagenumber% of matches lost after winning the first set.
data.player1Stats.firstSetLoseMatchWinnumberMatches won after losing the first set.
data.player1Stats.firstSetLoseMatchWinPercentagenumber% of matches won after losing the first set.
data.player1Stats.firstSetWinCountnumberMatches in which the player won the first set.
data.player1Stats.firstSetLoseCountnumberMatches in which the player lost the first set.
data.player1Stats.decidingSetWinnumberDeciding sets won.
data.player1Stats.decidingSetCountnumberDeciding sets played.
data.player1Stats.decidingSetWinPercentagenumberDeciding sets won %.
data.player1Stats.tiebreakWonnumberTiebreaks won.
data.player1Stats.tiebreakCountnumberTiebreaks played.
data.player1Stats.totalTBWinPercentagenumberTiebreaks won %.
data.player1Stats.setsWonnumberSets won.
data.player1Stats.gamesWonnumberGames won.
data.player1Stats.titlenumberTitles won.
data.player1Stats.grandSlamnumberGrand Slam record.
data.player1Stats.mastersnumberMasters record.
data.player1Stats.mainTournumberMain-tour record.
data.player1Stats.tourFinalsnumberTour Finals record.
data.player1Stats.cupsnumberDavis/Fed Cup record.
data.player1Stats.futuresnumberITF/Futures record.
data.player1Stats.challengersnumberChallenger record.
data.player1Stats.hardnumberWins on hard courts.
data.player1Stats.claynumberWins on clay.
data.player1Stats.iHardnumberWins on indoor hard courts.
data.player1Stats.grassnumberWins on grass.
data.player2Stats.idnumberNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
data.player2Stats.statMatchesPlayednumberMatches with statistics in this selection.
data.player2Stats.matchesWonnumberMatches won. Counted over the matches in this selection.
data.player2Stats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
data.player2Stats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
data.player2Stats.acesnumberAces served. Counted over the matches in this selection.
data.player2Stats.doubleFaultsnumberDouble faults. Counted over the matches in this selection.
data.player2Stats.unforcedErrorsnumberUnforced errors (where tracked). Counted over the matches in this selection.
data.player2Stats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
data.player2Stats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
data.player2Stats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
data.player2Stats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
data.player2Stats.winnersnumberWinners (where tracked). Counted over the matches in this selection.
data.player2Stats.breakPointsConvertednumberBreak points converted as returner. Counted over the matches in this selection.
data.player2Stats.breakPointsConvertedOfnumberBreak-point chances as returner. Counted over the matches in this selection.
data.player2Stats.netApproachesnumberNet approaches won (where tracked). Counted over the matches in this selection.
data.player2Stats.netApproachesOfnumberNet approaches made (where tracked). Counted over the matches in this selection.
data.player2Stats.returnPtsWinnumberReturn points won. Counted over the matches in this selection.
data.player2Stats.returnPtsWinOfnumberReturn points played. Counted over the matches in this selection.
data.player2Stats.totalPointsWonnumberTotal points won. Counted over the matches in this selection.
data.player2Stats.fastestServenumberFastest serve in km/h (where tracked).
data.player2Stats.averageFastestServenumberAverage of the per-match fastest serves in km/h (where tracked).
data.player2Stats.averageFirstServeSpeednumberAverage first-serve speed in km/h (where tracked).
data.player2Stats.averageSecondServeSpeednumberAverage second-serve speed in km/h (where tracked).
data.player2Stats.avgTimestringAverage match duration (H:MM:SS).
data.player2Stats.firstServePercentagenumberFirst serves in as % of first-serve attempts.
data.player2Stats.winningOnFirstServePercentagenumberFirst-serve points won %.
data.player2Stats.winningOnSecondServePercentagenumberSecond-serve points won %.
data.player2Stats.returnPtsWinPercentagenumberReturn points won %.
data.player2Stats.breakpointsWonPercentagenumberBreak points converted %.
data.player2Stats.bestOfThreeWonnumberBest-of-three matches won.
data.player2Stats.bestOfThreeWonPercentagenumberBest-of-three matches won %.
data.player2Stats.bestOfThreeCountnumberBest-of-three matches played.
data.player2Stats.bestOfFiveWonnumberBest-of-five matches won.
data.player2Stats.bestOfFiveWonPercentagenumberBest-of-five matches won %.
data.player2Stats.bestOfFiveCountnumberBest-of-five matches played.
data.player2Stats.firstSetWinMatchWinnumberMatches won after winning the first set.
data.player2Stats.firstSetWinMatchWinPercentagenumber% of matches won after winning the first set.
data.player2Stats.firstSetWinMatchLosenumberMatches lost after winning the first set.
data.player2Stats.firstSetWinMatchLosePercentagenumber% of matches lost after winning the first set.
data.player2Stats.firstSetLoseMatchWinnumberMatches won after losing the first set.
data.player2Stats.firstSetLoseMatchWinPercentagenumber% of matches won after losing the first set.
data.player2Stats.firstSetWinCountnumberMatches in which the player won the first set.
data.player2Stats.firstSetLoseCountnumberMatches in which the player lost the first set.
data.player2Stats.decidingSetWinnumberDeciding sets won.
data.player2Stats.decidingSetCountnumberDeciding sets played.
data.player2Stats.decidingSetWinPercentagenumberDeciding sets won %.
data.player2Stats.tiebreakWonnumberTiebreaks won.
data.player2Stats.tiebreakCountnumberTiebreaks played.
data.player2Stats.totalTBWinPercentagenumberTiebreaks won %.
data.player2Stats.setsWonnumberSets won.
data.player2Stats.gamesWonnumberGames won.
data.player2Stats.titlenumberTitles won.
data.player2Stats.grandSlamnumberGrand Slam record.
data.player2Stats.mastersnumberMasters record.
data.player2Stats.mainTournumberMain-tour record.
data.player2Stats.tourFinalsnumberTour Finals record.
data.player2Stats.cupsnumberDavis/Fed Cup record.
data.player2Stats.futuresnumberITF/Futures record.
data.player2Stats.challengersnumberChallenger record.
data.player2Stats.hardnumberWins on hard courts.
data.player2Stats.claynumberWins on clay.
data.player2Stats.iHardnumberWins on indoor hard courts.
data.player2Stats.grassnumberWins on grass.

H2H Filter Options by Player IDs

GET/tennis/v2/{atp|wta}/h2h/filter/{player1_id}/{player2_id}
This example uses atp. Use wtafor the women's dataset.Returns available filter options for an H2H comparison (surfaces, years, rounds, etc.). Counts official H2H matches only by default; add includeAll=true to include Challenger, ITF and qualifying matches.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_idYesstring
First player: numeric ID or display name. Example: 68074 or Carlos Alcaraz.
player2_idYesstring
Second player: numeric ID or display name. Example: 47275 or Jannik Sinner.

Query Parameter

ParameterRequiredTypeDescription
includeAllNoboolean
Default false: only official H2H matches count (tour level: Grand Slams, Masters, ATP/WTA Tour, Tour Finals, Davis Cup / BJK Cup, Olympics). Challenger, Futures/ITF and qualifying-round matches are left out, matching the official ATP/WTA head-to-head. Set includeAll=true to include them. Example: includeAll=true
Example Request: JAVASCRIPT
const response = await fetch("https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/h2h/filter/68074/47275", {
   method: "GET",
   headers: {
      "X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
      "X-RapidAPI-Host": "tennis-api-atp-wta-itf.p.rapidapi.com",
   },
});

const result = await response.json();
console.log(result);

Response Properties

Returns the distinct filter values present in the two players' H2H match history โ€” used to build filter UI panels.

FieldTypeDescription
roundsarrayDistinct rounds played: each item is roundId, round.
courtsarrayDistinct court surfaces: each item is courtId, court.
tournamentsarrayDistinct tournaments where matches were played: each item is tournamentId, tournament, tournamentDate.
tournamentRanksarrayDistinct tournament tiers: each item is rankId, rank.
gameYearsarray<number>Distinct calendar years in which matches occurred, sorted descending.
dataobjectResponse payload: the list or object documented in the rows below.
data.roundsarrayRound filter options.
data.rounds[]objectOne item of `data.rounds`; its fields are listed below.
data.rounds[].roundIdnumberRound ID.
data.rounds[].roundstringRound label.
data.courtsarrayCourt-surface filter options.
data.courts[]objectOne item of `data.courts`; its fields are listed below.
data.courts[].courtIdnumberCourt-surface ID.
data.courts[].courtstringCourt-surface name.
data.tournamentsarrayTournaments.
data.tournaments[]objectOne item of `data.tournaments`; its fields are listed below.
data.tournaments[].tournamentIdnumberTournament season ID.
data.tournaments[].tournamentstringTournament name.
data.tournaments[].tournamentDatestringTournament start date (ISO-8601).
data.tournamentRanksarrayTournament levels the player has played: rankId, rank.
data.tournamentRanks[]objectOne item of `data.tournamentRanks`; its fields are listed below.
data.tournamentRanks[].rankIdnumberTournament level ID.
data.tournamentRanks[].rankstringTournament level name.
data.gameYearsarraySeasons in which the player has matches (newest first).

Player vs All Stats

GET/tennis/v2/{atp|wta}/h2h/vs-all-stats/{player_id}
This example uses atp. Use wtafor the women's dataset.Returns this player's aggregated stats versus the combined field of all opponents (not a list of each rival). Path needs a numeric player ID.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player_idYesstring
Player: numeric ID or display name. Example: 47275 or Jannik Sinner. IDs come from Rankings (player.id), Fixtures (player1Id) or the core player list. A name shared by several players returns 400 listing their IDs.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/h2h/vs-all-stats/68074' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
data.matchesCountstringMatches included in this aggregate.
data.playerStatsobjectThis player's totals (wins, serve, return, points).
data.opponentStatsobjectCombined totals for everyone they faced โ€” not per-opponent rows.
dataobjectResponse payload: the list or object documented in the rows below.
data.playerStats.idnumberNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
data.playerStats.statMatchesPlayednumberMatches with statistics in this selection.
data.playerStats.matchesWonnumberMatches won. Counted over the matches in this selection.
data.playerStats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
data.playerStats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
data.playerStats.acesnumberAces served. Counted over the matches in this selection.
data.playerStats.doubleFaultsnumberDouble faults. Counted over the matches in this selection.
data.playerStats.unforcedErrorsnumberUnforced errors (where tracked). Counted over the matches in this selection.
data.playerStats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
data.playerStats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
data.playerStats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
data.playerStats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
data.playerStats.winnersnumberWinners (where tracked). Counted over the matches in this selection.
data.playerStats.breakPointsConvertednumberBreak points converted as returner. Counted over the matches in this selection.
data.playerStats.breakPointsConvertedOfnumberBreak-point chances as returner. Counted over the matches in this selection.
data.playerStats.netApproachesnumberNet approaches won (where tracked). Counted over the matches in this selection.
data.playerStats.netApproachesOfnumberNet approaches made (where tracked). Counted over the matches in this selection.
data.playerStats.returnPtsWinnumberReturn points won. Counted over the matches in this selection.
data.playerStats.returnPtsWinOfnumberReturn points played. Counted over the matches in this selection.
data.playerStats.totalPointsWonnumberTotal points won. Counted over the matches in this selection.
data.playerStats.fastestServenumberFastest serve in km/h (where tracked).
data.playerStats.averageFastestServenumberAverage of the per-match fastest serves in km/h (where tracked).
data.playerStats.averageFirstServeSpeednumberAverage first-serve speed in km/h (where tracked).
data.playerStats.averageSecondServeSpeednumberAverage second-serve speed in km/h (where tracked).
data.playerStats.avgTimestringAverage match duration (H:MM:SS).
data.playerStats.firstServePercentagenumberFirst serves in as % of first-serve attempts.
data.playerStats.winningOnFirstServePercentagenumberFirst-serve points won %.
data.playerStats.winningOnSecondServePercentagenumberSecond-serve points won %.
data.playerStats.returnPtsWinPercentagenumberReturn points won %.
data.playerStats.breakpointsWonPercentagenumberBreak points converted %.
data.playerStats.bestOfThreeWonnumberBest-of-three matches won.
data.playerStats.bestOfThreeWonPercentagenumberBest-of-three matches won %.
data.playerStats.bestOfThreeCountnumberBest-of-three matches played.
data.playerStats.bestOfFiveWonnumberBest-of-five matches won.
data.playerStats.bestOfFiveWonPercentagenumberBest-of-five matches won %.
data.playerStats.bestOfFiveCountnumberBest-of-five matches played.
data.playerStats.firstSetWinMatchWinnumberMatches won after winning the first set.
data.playerStats.firstSetWinMatchWinPercentagenumber% of matches won after winning the first set.
data.playerStats.firstSetWinMatchLosenumberMatches lost after winning the first set.
data.playerStats.firstSetWinMatchLosePercentagenumber% of matches lost after winning the first set.
data.playerStats.firstSetLoseMatchWinnumberMatches won after losing the first set.
data.playerStats.firstSetLoseMatchWinPercentagenumber% of matches won after losing the first set.
data.playerStats.firstSetWinCountnumberMatches in which the player won the first set.
data.playerStats.firstSetLoseCountnumberMatches in which the player lost the first set.
data.playerStats.decidingSetWinnumberDeciding sets won.
data.playerStats.decidingSetCountnumberDeciding sets played.
data.playerStats.decidingSetWinPercentagenumberDeciding sets won %.
data.playerStats.tiebreakWonnumberTiebreaks won.
data.playerStats.tiebreakCountnumberTiebreaks played.
data.playerStats.totalTBWinPercentagenumberTiebreaks won %.
data.playerStats.setsWonnumberSets won.
data.playerStats.gamesWonnumberGames won.
data.playerStats.titlenumberTitles won.
data.playerStats.grandSlamnumberGrand Slam record.
data.playerStats.mastersnumberMasters record.
data.playerStats.mainTournumberMain-tour record.
data.playerStats.tourFinalsnumberTour Finals record.
data.playerStats.cupsnumberDavis/Fed Cup record.
data.playerStats.futuresnumberITF/Futures record.
data.playerStats.challengersnumberChallenger record.
data.playerStats.hardnumberWins on hard courts.
data.playerStats.claynumberWins on clay.
data.playerStats.iHardnumberWins on indoor hard courts.
data.playerStats.grassnumberWins on grass.
data.opponentStats.statMatchesPlayednumberMatches with statistics in this selection.
data.opponentStats.matchesWonnumberMatches won. Counted over the matches in this selection.
data.opponentStats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
data.opponentStats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
data.opponentStats.acesnumberAces served. Counted over the matches in this selection.
data.opponentStats.doubleFaultsnumberDouble faults. Counted over the matches in this selection.
data.opponentStats.unforcedErrorsnumberUnforced errors (where tracked). Counted over the matches in this selection.
data.opponentStats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
data.opponentStats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
data.opponentStats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
data.opponentStats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
data.opponentStats.winnersnumberWinners (where tracked). Counted over the matches in this selection.
data.opponentStats.breakPointsConvertednumberBreak points converted as returner. Counted over the matches in this selection.
data.opponentStats.breakPointsConvertedOfnumberBreak-point chances as returner. Counted over the matches in this selection.
data.opponentStats.netApproachesnumberNet approaches won (where tracked). Counted over the matches in this selection.
data.opponentStats.netApproachesOfnumberNet approaches made (where tracked). Counted over the matches in this selection.
data.opponentStats.returnPtsWinnumberReturn points won. Counted over the matches in this selection.
data.opponentStats.returnPtsWinOfnumberReturn points played. Counted over the matches in this selection.
data.opponentStats.totalPointsWonnumberTotal points won. Counted over the matches in this selection.
data.opponentStats.fastestServenumberFastest serve in km/h (where tracked).
data.opponentStats.averageFastestServenumberAverage of the per-match fastest serves in km/h (where tracked).
data.opponentStats.averageFirstServeSpeednumberAverage first-serve speed in km/h (where tracked).
data.opponentStats.averageSecondServeSpeednumberAverage second-serve speed in km/h (where tracked).
data.opponentStats.avgTimestringAverage match duration (H:MM:SS).
data.opponentStats.firstServePercentagenumberFirst serves in as % of first-serve attempts.
data.opponentStats.winningOnFirstServePercentagenumberFirst-serve points won %.
data.opponentStats.winningOnSecondServePercentagenumberSecond-serve points won %.
data.opponentStats.returnPtsWinPercentagenumberReturn points won %.
data.opponentStats.breakpointsWonPercentagenumberBreak points converted %.
data.opponentStats.bestOfThreeWonnumberBest-of-three matches won.
data.opponentStats.bestOfThreeWonPercentagenumberBest-of-three matches won %.
data.opponentStats.bestOfThreeCountnumberBest-of-three matches played.
data.opponentStats.bestOfFiveWonnumberBest-of-five matches won.
data.opponentStats.bestOfFiveWonPercentagenumberBest-of-five matches won %.
data.opponentStats.bestOfFiveCountnumberBest-of-five matches played.
data.opponentStats.firstSetWinMatchWinnumberMatches won after winning the first set.
data.opponentStats.firstSetWinMatchWinPercentagenumber% of matches won after winning the first set.
data.opponentStats.firstSetWinMatchLosenumberMatches lost after winning the first set.
data.opponentStats.firstSetWinMatchLosePercentagenumber% of matches lost after winning the first set.
data.opponentStats.firstSetLoseMatchWinnumberMatches won after losing the first set.
data.opponentStats.firstSetLoseMatchWinPercentagenumber% of matches won after losing the first set.
data.opponentStats.firstSetWinCountnumberMatches in which the player won the first set.
data.opponentStats.firstSetLoseCountnumberMatches in which the player lost the first set.
data.opponentStats.decidingSetWinnumberDeciding sets won.
data.opponentStats.decidingSetCountnumberDeciding sets played.
data.opponentStats.decidingSetWinPercentagenumberDeciding sets won %.
data.opponentStats.tiebreakWonnumberTiebreaks won.
data.opponentStats.tiebreakCountnumberTiebreaks played.
data.opponentStats.totalTBWinPercentagenumberTiebreaks won %.
data.opponentStats.setsWonnumberSets won.
data.opponentStats.gamesWonnumberGames won.
data.opponentStats.titlenumberTitles won.
data.opponentStats.grandSlamnumberGrand Slam record.
data.opponentStats.mastersnumberMasters record.
data.opponentStats.mainTournumberMain-tour record.
data.opponentStats.tourFinalsnumberTour Finals record.
data.opponentStats.cupsnumberDavis/Fed Cup record.
data.opponentStats.futuresnumberITF/Futures record.
data.opponentStats.challengersnumberChallenger record.
data.opponentStats.hardnumberWins on hard courts.
data.opponentStats.claynumberWins on clay.
data.opponentStats.iHardnumberWins on indoor hard courts.
data.opponentStats.grassnumberWins on grass.

H2H Match Stats by Tournament

GET/tennis/v2/{atp|wta}/h2h/match-stats/{tournament_id}/{player1_id}/{player2_id}
This example uses atp. Use wtafor the women's dataset.Returns serve/return stats for the completed match between these two players at that tournament season ID. player1Stats is the first path player.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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_idYesinteger
Tournament ID must be numeric value >= 1
player1_idYesstring
First player: numeric ID or display name. Example: 68074 or Carlos Alcaraz.
player2_idYesstring
Second player: numeric ID or display name. Example: 47275 or Jannik Sinner.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/h2h/match-stats/21322/47275/68074' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
data.player1StatsobjectStats for the first path player in that tournament meeting.
data.player2StatsobjectStats for the second path player.
aces / firstServe / winners / โ€ฆintegerPer-match counting stats. Null means that metric is not available for the match.
dataobjectResponse payload: the list or object documented in the rows below.
data.player1Stats.player1IdnumberNumeric ID of player 1.
data.player1Stats.acesnumberAces served. Counted over the matches in this selection.
data.player1Stats.doubleFaultsnumberDouble faults. Counted over the matches in this selection.
data.player1Stats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
data.player1Stats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
data.player1Stats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
data.player1Stats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
data.player1Stats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
data.player1Stats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
data.player1Stats.breakPointFacedGmnumberBreak points faced on serve. Counted over the matches in this selection.
data.player1Stats.breakPointSavedGmnumberBreak points saved on serve. Counted over the matches in this selection.
data.player1Stats.breakPointChanceGmnumberBreak-point chances on return. Counted over the matches in this selection.
data.player1Stats.breakPointWonGmnumberBreak points converted on return. Counted over the matches in this selection.
data.player1Stats.winnersnullWinners (where tracked). Counted over the matches in this selection.
data.player1Stats.unforcedErrorsnullUnforced errors (where tracked). Counted over the matches in this selection.
data.player1Stats.netApproachesnullNet approaches won (where tracked). Counted over the matches in this selection.
data.player1Stats.netApproachesOfnullNet approaches made (where tracked). Counted over the matches in this selection.
data.player1Stats.totalPointsWonnumberTotal points won. Counted over the matches in this selection.
data.player1Stats.fastestServenullFastest serve in km/h (where tracked).
data.player1Stats.averageFirstServeSpeednullAverage first-serve speed in km/h (where tracked).
data.player1Stats.averageSecondServeSpeednullAverage second-serve speed in km/h (where tracked).
data.player2Stats.player2IdnumberNumeric ID of player 2.
data.player2Stats.acesnumberAces served. Counted over the matches in this selection.
data.player2Stats.doubleFaultsnumberDouble faults. Counted over the matches in this selection.
data.player2Stats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
data.player2Stats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
data.player2Stats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
data.player2Stats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
data.player2Stats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
data.player2Stats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
data.player2Stats.breakPointFacedGmnumberBreak points faced on serve. Counted over the matches in this selection.
data.player2Stats.breakPointSavedGmnumberBreak points saved on serve. Counted over the matches in this selection.
data.player2Stats.breakPointChanceGmnumberBreak-point chances on return. Counted over the matches in this selection.
data.player2Stats.breakPointWonGmnumberBreak points converted on return. Counted over the matches in this selection.
data.player2Stats.winnersnullWinners (where tracked). Counted over the matches in this selection.
data.player2Stats.unforcedErrorsnullUnforced errors (where tracked). Counted over the matches in this selection.
data.player2Stats.netApproachesnullNet approaches won (where tracked). Counted over the matches in this selection.
data.player2Stats.netApproachesOfnullNet approaches made (where tracked). Counted over the matches in this selection.
data.player2Stats.totalPointsWonnumberTotal points won. Counted over the matches in this selection.
data.player2Stats.fastestServenullFastest serve in km/h (where tracked).
data.player2Stats.averageFirstServeSpeednullAverage first-serve speed in km/h (where tracked).
data.player2Stats.averageSecondServeSpeednullAverage second-serve speed in km/h (where tracked).

Also by match ID: Completed Match Statistics by matchId returns the same statistics for a matchId or liveMatchId.

Point-by-point for an H2H match: every row of the H2H match list has links.pointByPoint, a ready-to-call Get Point By Point request with the players and match day filled in (plus matchKey and links.match, links.stats, links.odds).

Extra H2H endpoints

These are not replacements for the core H2H info, matches, stats, or filters above.

Detect Player Tour

GET/tennis/v2/h2h/playerType/{player_id_or_name}
Retrieve the tour type of a player, indicating whether they are in the men's (atp) or women's (wta) dataset.

Path Parameter

ParameterRequiredTypeDescription
player_id_or_nameYesstring
Display name (Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/playerType/Jannik%20Sinner' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
typestringDataset: atp (men) or wta (women).

Upcoming H2H Match

โ„น๏ธ
Time-bound example

Returns data only while the two players have a match on the schedule (today or upcoming); afterwards the response is {}. The example (Medvedev v Atmane, Almaty quarterfinal on 2026-10-23) stops working once that match is played. For a current pair, take two players from Today's Fixtures (/tennis/v2/{atp|wta}/fixtures) or Upcoming Matches by Tour.

GET/tennis/v2/h2h/upcoming/{atp|wta}/{player1_id_or_name}/{player2_id_or_name}
This example uses atp. Use wtafor the women's dataset.Returns the next scheduled meeting between two players, including odds, round, and tournament.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_id_or_nameYesstring
First player: display name (Carlos Alcaraz) or numeric ID.
player2_id_or_nameYesstring
Second player: display name (Jannik Sinner) or numeric ID.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/upcoming/atp/Daniil%20Medvedev/Terence%20Atmane' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

Shared objects in this response (defined once in Reusable response schemas): Player ยท Tournament.

FieldTypeDescription
idintegerFixture id for this meeting.
datestringScheduled start as ISO-8601.
player1 / player2objectFirst-listed and second-listed players (not winner/loser).
tournament / roundobjectEvent name, date, court, and round label.
odd1 / odd2numberPre-match odds when present.
matchIdnumberMatch ID (same value as id on core match rows).
liveMatchIdstringKey of this match in the live service and Socket.IO: "player1Id-player2Id-tournamentId-roundId". Equals matchId on live rows and event-update.
linksobjectReady-made URLs for this match's detail routes.
links.matchstringURL of the match detail route (/tennis/v2/matches/{matchId}); source=game marks a completed match.
links.livestringURL of the match's live route: live score, statistics, timeline and the live eventId ({} until the match is in the live feed).
roundIdnumberNumeric 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.
drawnumberDraw position (slot) of the match within its round.
resultstringScore string, e.g. "6-3 6-4"; empty string until the match is played.
completenullCompletion flag on schedule rows; null until the match is completed.
livenullLive flag from the schedule feed; null when not live.
timeGamenullLegacy start-time field; often null. Use date / startTime instead.
reserveIntnullReserved numeric field (internal); usually null.
reserveStringnullReserved text field (internal); usually null.
seed1stringSeed of player 1, or null.
seed2nullSeed of player 2, or null.
player1IdnumberNumeric ID of player 1.
player2IdnumberNumeric ID of player 2.
tournamentIdnumberNumeric tournament season ID (one edition of an event).
yt_urlstringYouTube highlights URL, or empty string.
yt_idstringYouTube video ID, or empty string.
player1.namestringPlayer 1 name.
player1.countryAcrstringPlayer 1 country code.
player2.namestringPlayer 2 name.
player2.countryAcrstringPlayer 2 country code.
round.namestringRound label, e.g. "1/4", "Final".
tournament.namestringTournament name.
tournament.datestringTournament start date (ISO-8601 UTC).
tournament.courtobjectCourt surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }.
tournament.court.namestringCourt surface name, e.g. Hard, Clay, Grass, I.hard.

Recent Event Between Players

โ„น๏ธ
Time-bound example

Returns data only while the two players have a match on the schedule (today or upcoming); afterwards the response is {}. The example (Medvedev v Atmane, Almaty quarterfinal on 2026-10-23) stops working once that match is played. For a current pair, take two players from Today's Fixtures (/tennis/v2/{atp|wta}/fixtures) or Upcoming Matches by Tour.

GET/tennis/v2/h2h/player-vs-player/recent-event/{atp|wta}/{player1_id_or_name}/{player2_id_or_name}
This example uses atp. Use wtafor the women's dataset.Returns the most recent or next meeting between two players, with form and prize-money context.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_id_or_nameYesstring
First player: display name (Carlos Alcaraz) or numeric ID.
player2_id_or_nameYesstring
Second player: display name (Jannik Sinner) or numeric ID.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/player-vs-player/recent-event/atp/Daniil%20Medvedev/Terence%20Atmane' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

Shared objects in this response (defined once in Reusable response schemas): Player ยท Tournament.

FieldTypeDescription
idintegerFixture id for this meeting.
datestringScheduled start as ISO-8601.
player1 / player2objectFirst-listed and second-listed players (not winner/loser).
tournament / roundobjectEvent name, date, court, and round label.
odd1 / odd2numberPre-match odds when present.
roundIdnumberNumeric 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.
drawnumberDraw position (slot) of the match within its round.
resultstringScore string, e.g. "6-3 6-4"; empty string until the match is played.
completenullCompletion flag on schedule rows; null until the match is completed.
livenullLive flag from the schedule feed; null when not live.
timeGamenullLegacy start-time field; often null. Use date / startTime instead.
reserveIntnullReserved numeric field (internal); usually null.
reserveStringnullReserved text field (internal); usually null.
seed1stringSeed of player 1, or null.
seed2nullSeed of player 2, or null.
player1IdnumberNumeric ID of player 1.
player2IdnumberNumeric ID of player 2.
tournamentIdnumberNumeric tournament season ID (one edition of an event).
yt_urlstringYouTube highlights URL, or empty string.
yt_idstringYouTube video ID, or empty string.
player1.namestringPlayer 1 name.
player1.countryAcrstringPlayer 1 country code.
player1.playerStatusstringCareer status: Active or Retired.
player2.namestringPlayer 2 name.
player2.countryAcrstringPlayer 2 country code.
player2.playerStatusstringCareer status: Active or Retired.
round.namestringRound label, e.g. "1/4", "Final".
tournament.namestringTournament name.
tournament.datestringTournament start date (ISO-8601 UTC).
tournament.courtobjectCourt surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }.
tournament.court.namestringCourt surface name, e.g. Hard, Clay, Grass, I.hard.
hasUpcomingbooleantrue when the two players have an upcoming match on the current board.
tnTypestringDataset of the request: atp or wta.
careerMoney1numberCareer prize money of player 1 in USD.
careerMoney2numberCareer prize money of player 2 in USD.
recentFormP1arrayPlayer 1's last 10 results, newest first: "w" = won, "l" = lost.
recentFormP2arrayPlayer 2's last 10 results, newest first: "w" = won, "l" = lost.

Current Event H2H Statistics

โ„น๏ธ
Time-bound example

Returns data only while the two players have a match on the schedule (today or upcoming); afterwards the response is {}. The example (Medvedev v Atmane, Almaty quarterfinal on 2026-10-23) stops working once that match is played. For a current pair, take two players from Today's Fixtures (/tennis/v2/{atp|wta}/fixtures) or Upcoming Matches by Tour.

GET/tennis/v2/h2h/current/{atp|wta}/{player1_id_or_name}/{player2_id_or_name}
This example uses atp. Use wtafor the women's dataset.Returns this playerโ€™s stats at the tournament both players are currently in โ€” holds, break saves, points, and match counts.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_id_or_nameYesstring
First player: display name (Carlos Alcaraz) or numeric ID.
player2_id_or_nameYesstring
Second player: display name (Jannik Sinner) or numeric ID.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/current/atp/Daniil%20Medvedev/Terence%20Atmane' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
name / tourName / country / courtstringPlayer and current-event context.
matchesPlayedintegerMatches this player has completed at the event.
winsCountOnWin1 / winsCountOnWin2integerWin counts in the current-event split.
serviceHold / breakPointsSaved / totalPointsWonmixedIn-event hold, break-save, and points totals with matching *Of and *Percentage fields.
averageFirstServeSpeednumberAverage first-serve speed in km/h (where tracked).
averageSecondServeSpeednumberAverage second-serve speed in km/h (where tracked).
fastestServenumberFastest serve in km/h (where tracked).
lastMatchTimestringDuration of the player's last match at this event (H:MM:SS).
totalTimestringTotal time on court at this event (H:MM:SS).
totalPointsWonOfnumberTotal points played. Counted over the matches in this selection.
unforcedErrorsnumberUnforced errors (where tracked). Counted over the matches in this selection.
breakPointsSavedOfnumberBreak points faced on serve.
breakPointsSavedPercentagenumberBreak points saved %.
serviceHoldOfnumberService games played.
serviceHoldPercentagenumberService games held %.
oppHoldnumberService games held by opponents.
oppHoldOfnumberService games played by opponents.
oppHoldPercentagenumberOpponents' service games held %.
decidingSetWinnumberDeciding sets won.
decidingSetWinOfnumberDeciding sets played.
decidingSetWinPercentagenumberDeciding sets won %.
tiebreakPerMatchstringAverage tiebreaks per match (string).
tiebreakWonnumberTiebreaks won.
tiebreakWonOfnumberTiebreaks played.
totalTBWinPercentagenumberTiebreaks won %.
avgOpponentRanknumberAverage ranking of opponents faced at this event (0 when unknown).

Paired Player Profiles

GET/tennis/v2/h2h/profile/{atp|wta}/{player1_id_or_name}/{player2_id_or_name}/{limit}
This example uses atp. Use wtafor the women's dataset.Profiles for both players in a matchup, plus surface H2H. Add includeAll=true to include Challenger/ITF in the aggregates. Path limit is true or false (not a page size).

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player1_id_or_nameYesstring
First player: display name (Carlos Alcaraz) or numeric ID.
player2_id_or_nameYesstring
Second player: display name (Jannik Sinner) or numeric ID.
limitYesstring
Path flag: true limits recent matches, false returns full history.

Query Parameter

ParameterRequiredTypeDescription
includeAllNoboolean
Include Challenger/ITF and full history where supported. Example: includeAll=true
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/profile/atp/Jannik%20Sinner/Carlos%20Alcaraz/false' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

Shared objects in this response (defined once in Reusable response schemas): Player.

FieldTypeDescription
player1 / player2objectFull profile for each path player.
player1.contryAcrstring3-letter country code. The key is spelled contryAcr (no u) in the live payload.
player1.playerStatobjectWin/loss by level: maintourWin, slamWin, โ€ฆ
surfaceDataobjectH2H wins by surface. Suffix 1 is player1, suffix 2 is player2 (hard1, clay1, โ€ฆ).
player1.idnumberPlayer 1 ID.
player1.namestringPlayer 1 name.
player1.playerStatusstringCareer status: Active or Retired.
player1.countrystringCountry: a three-letter code string, or an object with name and acronym.
player1.playerStat.maintourWinnumberMain-tour match wins.
player1.playerStat.maintourLosenumberMain-tour match losses.
player1.playerStat.finalsWinnumberTour Finals match wins.
player1.playerStat.finalsLosenumberTour Finals match losses.
player1.playerStat.masterWinnumberMasters match wins.
player1.playerStat.masterLosenumberMasters match losses.
player1.playerStat.slamWinnumberGrand Slam match wins.
player1.playerStat.slamLosenumberGrand Slam match losses.
player1.playerStat.cupsWinnumberDavis/Fed Cup match wins.
player1.playerStat.cupsLosenumberDavis/Fed Cup match losses.
player1.playerStat.futuresWinnumberITF/Futures match wins.
player1.playerStat.futuresLosenumberITF/Futures match losses.
player1.playerStat.challengersWinnumberChallenger match wins.
player1.playerStat.challengersLosenumberChallenger match losses.
player1.playerStat.totalWinsnumberTotal career match wins.
player1.playerStat.totalLosenumberTotal career match losses.
player1.imagestringPlayer photo path on this API (append to the base URL).
player1.image_p_namestringPlayer photo path keyed by player name (alternative to image).
player1.birthdaystringDate of birth (ISO-8601), or null when unknown.
player1.currentRanknumberCurrent singles ranking position from the latest ranking list (same source as the ranking endpoints), or null.
player1.playsstringHandedness and backhand, e.g. "Right-Handed, Two-Handed Backhand".
player1.recentGamesarrayLast 10 results, newest first: "w" = won, "l" = lost.
player1.bestRanknumberCareer-high ranking: position and the date it was first reached.
player1.ytdWonnumberMatches won this year.
player1.ytdLostnumberMatches lost this year.
player1.ytdWLPercentagenumberYear-to-date win %.
player1.ytdTitlesnumberTitles won this year.
player1.careerWinnumberCareer match wins (tour level).
player1.careerLosenumberCareer match losses (tour level).
player1.careerWLPercentagenumberCareer win %.
player1.careerMoneynumberCareer prize money in USD.
player1.totalTitlesnumberFinals reached (titles won + finals lost).
player1.totalTitlesWonnumberTitles won.
player1.totalFinalsWonnumberFinals lost (runner-up finishes).
player2.idnumberPlayer 2 ID.
player2.namestringPlayer 2 name.
player2.playerStatusstringCareer status: Active or Retired.
player2.countrystringCountry: a three-letter code string, or an object with name and acronym.
player2.contryAcrstringThree-letter country code (legacy spelling of countryAcr on this route).
player2.playerStatobjectCareer win/loss counts by tournament level.
player2.playerStat.maintourWinnumberMain-tour match wins.
player2.playerStat.maintourLosenumberMain-tour match losses.
player2.playerStat.finalsWinnumberTour Finals match wins.
player2.playerStat.finalsLosenumberTour Finals match losses.
player2.playerStat.masterWinnumberMasters match wins.
player2.playerStat.masterLosenumberMasters match losses.
player2.playerStat.slamWinnumberGrand Slam match wins.
player2.playerStat.slamLosenumberGrand Slam match losses.
player2.playerStat.cupsWinnumberDavis/Fed Cup match wins.
player2.playerStat.cupsLosenumberDavis/Fed Cup match losses.
player2.playerStat.futuresWinnumberITF/Futures match wins.
player2.playerStat.futuresLosenumberITF/Futures match losses.
player2.playerStat.challengersWinnumberChallenger match wins.
player2.playerStat.challengersLosenumberChallenger match losses.
player2.playerStat.totalWinsnumberTotal career match wins.
player2.playerStat.totalLosenumberTotal career match losses.
player2.imagestringPlayer photo path on this API (append to the base URL).
player2.image_p_namestringPlayer photo path keyed by player name (alternative to image).
player2.birthdaystringDate of birth (ISO-8601), or null when unknown.
player2.currentRanknumberCurrent singles ranking position from the latest ranking list (same source as the ranking endpoints), or null.
player2.playsstringHandedness and backhand, e.g. "Right-Handed, Two-Handed Backhand".
player2.recentGamesarrayLast 10 results, newest first: "w" = won, "l" = lost.
player2.bestRanknumberCareer-high ranking: position and the date it was first reached.
player2.ytdWonnumberMatches won this year.
player2.ytdLostnumberMatches lost this year.
player2.ytdWLPercentagenumberYear-to-date win %.
player2.ytdTitlesnumberTitles won this year.
player2.careerWinnumberCareer match wins (tour level).
player2.careerLosenumberCareer match losses (tour level).
player2.careerWLPercentagenumberCareer win %.
player2.careerMoneynumberCareer prize money in USD.
player2.totalTitlesnumberFinals reached (titles won + finals lost).
player2.totalTitlesWonnumberTitles won.
player2.totalFinalsWonnumberFinals lost (runner-up finishes).
surfaceData.hard1numberHard-court H2H wins of player 1.
surfaceData.iHard1numberIndoor-hard H2H wins of player 1.
surfaceData.clay1numberClay H2H wins of player 1.
surfaceData.grass1numberGrass H2H wins of player 1.
surfaceData.hard2numberHard-court H2H wins of player 2.
surfaceData.iHard2numberIndoor-hard H2H wins of player 2.
surfaceData.clay2numberClay H2H wins of player 2.
surfaceData.grass2numberGrass H2H wins of player 2.
surfaceData.total1numberTotal H2H wins of player 1.
surfaceData.total2numberTotal H2H wins of player 2.

Player Surface Breakdown (H2H View)

GET/tennis/v2/h2h/surfaceBreakdown/{atp|wta}/{player_id_or_name}
This example uses atp. Use wtafor the women's dataset.Returns this player's win/loss split by surface. Path takes one player, not two.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player_id_or_nameYesstring
Display name (Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}.

Query Parameter

ParameterRequiredTypeDescription
courtNostring
Surface name. Prefer this over surface. Example: court=Clay.
surfaceNostring
Filter by surface name. Alias of court. Example: surface=clay or court=Clay.
yearNointeger
Filter to a specific year. Example: year=2026
tournamentNostring
Filter by tournament name. Example: Monte-Carlo Rolex Masters - Monte-Carlo
includeAllNoboolean
Include Challenger/ITF and full history where supported. Example: includeAll=true
pageNointeger
Page number, starting at 1. pageNo is accepted as an alias on every route. Example: page=1
limitNointeger
Results per page. pageSize is accepted as an alias on every route. Default varies by endpoint. Example: limit=10
levelNointeger
Tournament level id. Example: level=4.
roundNostring
Round filter. Example: round=Final.
weekNointeger
Tour week number when supported. Example: week=12.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/surfaceBreakdown/atp/Jannik%20Sinner' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
hard1numberHard-court H2H wins of player 1.
iHard1numberIndoor-hard H2H wins of player 1.
clay1numberClay H2H wins of player 1.
grass1numberGrass H2H wins of player 1.
hard2numberHard-court H2H wins of player 2.
iHard2numberIndoor-hard H2H wins of player 2.
clay2numberClay H2H wins of player 2.
grass2numberGrass H2H wins of player 2.
total1numberTotal H2H wins of player 1.
total2numberTotal H2H wins of player 2.

Recent H2H Records

GET/tennis/v2/h2h/recent/{atp|wta}/{player_id_or_name}
This example uses atp. Use wtafor the women's dataset.Returns this player's recent completed matches (one player in the path). year selects that calendar year (with week: from 1 January to the end of that week). An unknown court/surface returns 400. Each row also has matchKey (player1Id-player2Id-tournamentId-roundId, stable across archive reloads) and links (match, stats, odds, pointByPoint) to open that match directly; the list reports hasNextPage. Embedded player records take currentRank and points from the latest ranking, with rankingDate.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player_id_or_nameYesstring
Display name (Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}.

Query Parameter

ParameterRequiredTypeDescription
courtNostring
Surface name. Prefer this over surface. Example: court=Clay.
surfaceNostring
Filter by surface name. Alias of court. Example: surface=clay or court=Clay.
yearNointeger
Filter to a specific year. Example: year=2026
tournamentNostring
Filter by tournament name. Example: Monte-Carlo Rolex Masters - Monte-Carlo
includeAllNoboolean
Include Challenger/ITF and full history where supported. Example: includeAll=true
pageNointeger
Page number, starting at 1. pageNo is accepted as an alias on every route. Example: page=1
limitNointeger
Results per page. pageSize is accepted as an alias on every route. Default varies by endpoint. Example: limit=10
levelNointeger
Tournament level id. Example: level=4.
roundNostring
Round filter. Example: round=Final.
weekNointeger
Tour week number when supported. Example: week=12.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/recent/atp/Carlos%20Alcaraz' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

Shared objects in this response (defined once in Reusable response schemas): Player ยท Tournament.

FieldTypeDescription
namestringDisplay name.
countnumberNumber of items in this response (or matching items, where stated).
gamesarrayMatch rows.
games[]objectOne item of `games`; its fields are listed below.
games[].idstringNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
games[].roundIdnumberNumeric 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.
games[].resultstringScore string, e.g. "6-3 6-4"; empty string until the match is played.
games[].datestringDate/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date.
games[].seed1nullSeed of player 1, or null.
games[].seed2nullSeed of player 2, or null.
games[].odd1stringOne stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds.
games[].odd2stringPre-match/closing odds retained for player 2, or null when not available.
games[].player1IdnumberNumeric ID of player 1.
games[].player2IdnumberNumeric ID of player 2.
games[].tournamentIdnumberNumeric tournament season ID (one edition of an event).
games[].drawnumberDraw position (slot) of the match within its round.
games[].winner_entrynullEntry status of the winner (e.g. Q = qualifier, WC = wild card, LL = lucky loser), or null.
games[].winner_handnullPlaying hand of the winner (R/L), or null.
games[].winner_htnullHeight of the winner in cm, or null.
games[].winner_iocnullCountry code of the winner, or null.
games[].winner_agenullAge of the winner at the match date, or null.
games[].loser_entrynullEntry status of the loser (Q, WC, LL, โ€ฆ), or null.
games[].loser_handnullPlaying hand of the loser (R/L), or null.
games[].loser_htnullHeight of the loser in cm, or null.
games[].loser_iocnullCountry code of the loser, or null.
games[].loser_agenullAge of the loser at the match date, or null.
games[].best_ofnullBest-of sets (3 or 5) when known, otherwise null.
games[].poll_votestringFan poll vote count for the match (string).
games[].player1objectPlayer 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.
games[].player1.idnumberPlayer 1 ID.
games[].player1.namestringPlayer 1 name.
games[].player1.birthdaystringDate of birth (ISO-8601), or null when unknown.
games[].player1.countryAcrstringPlayer 1 country code.
games[].player1.currentRanknumberCurrent singles ranking position from the latest ranking list (same source as the ranking endpoints), or null.
games[].player1.progressnumberRanking positions gained (+) or lost (โˆ’) in the latest ranking week.
games[].player1.pointsnumberRanking points from the latest ranking list (same value as the ranking endpoints).
games[].player1.hardPointsnullRanking points earned on hard courts, or null.
games[].player1.hardTournamentnullNumber of hard-court tournaments counted, or null.
games[].player1.clayPointsnullRanking points earned on clay, or null.
games[].player1.clayTournamentnullNumber of clay tournaments counted, or null.
games[].player1.grassPointsnullRanking points earned on grass, or null.
games[].player1.grassTournamentnullNumber of grass tournaments counted, or null.
games[].player1.carpetPointsnullRanking points earned on carpet, or null.
games[].player1.carterTournamentnullNumber of carpet tournaments counted (legacy field name), or null.
games[].player1.prizenumberPrize money as shown by the source, e.g. "$48.9M" (string), or null.
games[].player1.chnumberCurrent Race (year-to-date) points used for the race ranking.
games[].player1.doublesPositionnullCurrent doubles ranking position, or null.
games[].player1.doublesProgressnullDoubles ranking positions gained (+) or lost (โˆ’) in the latest week, or null.
games[].player1.doublesPointsnullCurrent doubles ranking points, or null.
games[].player1.ihardPointsnullRanking points earned on indoor hard courts, or null.
games[].player1.ihardTournamentnullNumber of indoor-hard tournaments counted, or null.
games[].player1.itfnumberITF player ID.
games[].player1.heightnullHeight in cm, or null when unknown.
games[].player1.wikidata_idnullWikidata ID of the player, or empty string.
games[].player2objectPlayer 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order.
games[].player2.idnumberPlayer 2 ID.
games[].player2.namestringPlayer 2 name.
games[].player2.birthdaystringDate of birth (ISO-8601), or null when unknown.
games[].player2.countryAcrstringPlayer 2 country code.
games[].player2.currentRanknumberCurrent singles ranking position from the latest ranking list (same source as the ranking endpoints), or null.
games[].player2.progressnumberRanking positions gained (+) or lost (โˆ’) in the latest ranking week.
games[].player2.pointsnumberRanking points from the latest ranking list (same value as the ranking endpoints).
games[].player2.hardPointsnullRanking points earned on hard courts, or null.
games[].player2.hardTournamentnullNumber of hard-court tournaments counted, or null.
games[].player2.clayPointsnullRanking points earned on clay, or null.
games[].player2.clayTournamentnullNumber of clay tournaments counted, or null.
games[].player2.grassPointsnullRanking points earned on grass, or null.
games[].player2.grassTournamentnullNumber of grass tournaments counted, or null.
games[].player2.carpetPointsnullRanking points earned on carpet, or null.
games[].player2.carterTournamentnullNumber of carpet tournaments counted (legacy field name), or null.
games[].player2.prizenumberPrize money as shown by the source, e.g. "$48.9M" (string), or null.
games[].player2.chnumberCurrent Race (year-to-date) points used for the race ranking.
games[].player2.doublesPositionnullCurrent doubles ranking position, or null.
games[].player2.doublesProgressnullDoubles ranking positions gained (+) or lost (โˆ’) in the latest week, or null.
games[].player2.doublesPointsnullCurrent doubles ranking points, or null.
games[].player2.ihardPointsnullRanking points earned on indoor hard courts, or null.
games[].player2.ihardTournamentnullNumber of indoor-hard tournaments counted, or null.
games[].player2.itfnumberITF player ID.
games[].player2.heightnullHeight in cm, or null when unknown.
games[].player2.wikidata_idnullWikidata ID of the player, or empty string.
games[].tournamentobjectTournament object (id, name, date, level, surface, country, โ€ฆ).
games[].tournament.idnumberTournament season ID.
games[].tournament.namestringTournament name.
games[].tournament.courtIdnumberNumeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, โ€ฆ
games[].tournament.datestringTournament start date (ISO-8601 UTC).
games[].tournament.rankIdnumberTournament 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, โ€ฆ
games[].tournament.linknumberID of the previous edition of the same tournament (used to chain seasons), or null.
games[].tournament.countryAcrstringThree-letter country code of the tournament.
games[].tournament.prizenullPrize money as shown by the source, e.g. "$48.9M" (string), or null.
games[].tournament.ratingIdnullRanking table reference for the event (internal), or null.
games[].tournament.urlstringOfficial tournament website, or empty.
games[].tournament.latitudenumberVenue latitude.
games[].tournament.longitudenumberVenue longitude.
games[].tournament.sitestringOfficial website URL, or null.
games[].tournament.racenullRace flag/points reference for the event (internal), or null.
games[].tournament.entrynullEntry list reference (internal), or null.
games[].tournament.singlesPrizeIdnullInternal ID of the singles prize-money table, or null.
games[].tournament.doublesMoneyIdnullInternal ID of the doubles prize-money table, or null.
games[].tournament.tierstringTournament tier/series label, or null.
games[].tournament.reserveIntnullReserved numeric field (internal); usually null.
games[].tournament.reserveCharstringURL-friendly short code of the tournament, e.g. "laver-cup".
games[].tournament.livenullLive flag from the schedule feed; null when not live.
games[].tournament.resultnullScore string, e.g. "6-3 6-4"; empty string until the match is played.
games[].tournament.draw_sizenullDraw size (number of players), or null.
games[].h2hobjectHead-to-head summary for the two players.
games[].h2h.idstringNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
games[].h2h.player1WinsnumberCareer head-to-head wins of player 1.
games[].h2h.player2WinsnumberCareer head-to-head wins of player 2.
games[].h2h.player1AllWinsnumberCareer head-to-head wins of player 1 against player 2 (all levels).
games[].h2h.player2AllWinsnumberCareer head-to-head wins of player 2 against player 1 (all levels).
games[].h2h.player1IdnumberNumeric ID of player 1.
games[].h2h.player2IdnumberNumeric ID of player 2.
games[].statobjectPer-match statistics for both players (suffix 1 = player 1, 2 = player 2), or null when not recorded.
games[].stat.idstringNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
games[].stat.roundnumberRound ID (see GET /tennis/v2/round).
games[].stat.firstServe1numberFirst serves landed in โ€” player 1 (first-listed player).
games[].stat.firstServeOf1numberFirst-serve attempts (total service points) โ€” player 1 (first-listed player).
games[].stat.aces1numberAces served โ€” player 1 (first-listed player).
games[].stat.doubleFaults1numberDouble faults โ€” player 1 (first-listed player).
games[].stat.unforcedErrors1nullUnforced errors (null when the source does not track them) โ€” player 1 (first-listed player).
games[].stat.winningOnFirstServe1numberPoints won on first serve โ€” player 1 (first-listed player).
games[].stat.winningOnFirstServeOf1numberPoints played on first serve (first serves in) โ€” player 1 (first-listed player).
games[].stat.winningOnSecondServe1numberPoints won on second serve โ€” player 1 (first-listed player).
games[].stat.winningOnSecondServeOf1numberPoints played on second serve โ€” player 1 (first-listed player).
games[].stat.winners1nullWinners (null when not tracked) โ€” player 1 (first-listed player).
games[].stat.breakPointsConverted1numberBreak points converted (won as returner) โ€” player 1 (first-listed player).
games[].stat.breakPointsConvertedOf1numberBreak-point chances as returner โ€” player 1 (first-listed player).
games[].stat.netApproaches1nullNet approaches won (null when not tracked) โ€” player 1 (first-listed player).
games[].stat.netApproachesOf1nullNet approaches made (null when not tracked) โ€” player 1 (first-listed player).
games[].stat.totalPointsWon1numberTotal points won โ€” player 1 (first-listed player).
games[].stat.fastestServe1nullFastest serve in km/h (null when not tracked) โ€” player 1 (first-listed player).
games[].stat.averageFirstServeSpeed1nullAverage first-serve speed in km/h (null when not tracked) โ€” player 1 (first-listed player).
games[].stat.averageSecondServeSpeed1nullAverage second-serve speed in km/h (null when not tracked) โ€” player 1 (first-listed player).
games[].stat.firstServe2numberFirst serves landed in โ€” player 2 (second-listed player).
games[].stat.firstServeOf2numberFirst-serve attempts (total service points) โ€” player 2 (second-listed player).
games[].stat.aces2numberAces served โ€” player 2 (second-listed player).
games[].stat.doubleFaults2numberDouble faults โ€” player 2 (second-listed player).
games[].stat.unforcedErrors2nullUnforced errors (null when the source does not track them) โ€” player 2 (second-listed player).
games[].stat.winningOnFirstServe2numberPoints won on first serve โ€” player 2 (second-listed player).
games[].stat.winningOnFirstServeOf2numberPoints played on first serve (first serves in) โ€” player 2 (second-listed player).
games[].stat.winningOnSecondServe2numberPoints won on second serve โ€” player 2 (second-listed player).
games[].stat.winningOnSecondServeOf2numberPoints played on second serve โ€” player 2 (second-listed player).
games[].stat.winners2nullWinners (null when not tracked) โ€” player 2 (second-listed player).
games[].stat.breakPointsConverted2numberBreak points converted (won as returner) โ€” player 2 (second-listed player).
games[].stat.breakPointsConvertedOf2numberBreak-point chances as returner โ€” player 2 (second-listed player).
games[].stat.netApproaches2nullNet approaches won (null when not tracked) โ€” player 2 (second-listed player).
games[].stat.netApproachesOf2nullNet approaches made (null when not tracked) โ€” player 2 (second-listed player).
games[].stat.totalPointsWon2numberTotal points won โ€” player 2 (second-listed player).
games[].stat.fastestServe2nullFastest serve in km/h (null when not tracked) โ€” player 2 (second-listed player).
games[].stat.averageFirstServeSpeed2nullAverage first-serve speed in km/h (null when not tracked) โ€” player 2 (second-listed player).
games[].stat.averageSecondServeSpeed2nullAverage second-serve speed in km/h (null when not tracked) โ€” player 2 (second-listed player).
games[].stat.rpw1numberReturn points won โ€” player 1 (first-listed player).
games[].stat.rpwOf1numberReturn points played โ€” player 1 (first-listed player).
games[].stat.rpw2numberReturn points won โ€” player 2 (second-listed player).
games[].stat.rpwOf2numberReturn points played โ€” player 2 (second-listed player).
games[].stat.tournamentIdnumberNumeric tournament season ID (one edition of an event).
games[].stat.player1IdnumberNumeric ID of player 1.
games[].stat.player2IdnumberNumeric ID of player 2.
games[].stat.mtstringMatch duration as "0000-00-00 HH:MM:SS" (only the time part is meaningful).
games[].isWinbooleantrue when the requested player won this match.

Recent Player Stats

GET/tennis/v2/h2h/recent-stats/{atp|wta}/{player_id_or_name}
This example uses atp. Use wtafor the women's dataset.Returns this player's recent form stats (one player in the path โ€” not vs a named opponent). recentStats covers the last 6 months by default; year, court/surface and level select its matches instead (an unknown surface returns 400). careerSurfaceWL is the whole career and yearStats the last 12 months. appliedFilters states the period and filters behind each block.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player_id_or_nameYesstring
Display name (Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}.

Query Parameter

ParameterRequiredTypeDescription
courtNostring
Surface name. Prefer this over surface. Example: court=Clay.
surfaceNostring
Filter by surface name. Alias of court. Example: surface=clay or court=Clay.
yearNointeger
Filter to a specific year. Example: year=2026
tournamentNostring
Filter by tournament name. Example: Monte-Carlo Rolex Masters - Monte-Carlo
includeAllNoboolean
Include Challenger/ITF and full history where supported. Example: includeAll=true
pageNointeger
Page number, starting at 1. pageNo is accepted as an alias on every route. Example: page=1
limitNointeger
Results per page. pageSize is accepted as an alias on every route. Default varies by endpoint. Example: limit=10
levelNointeger
Tournament level id. Example: level=4.
roundNostring
Round filter. Example: round=Final.
weekNointeger
Tour week number when supported. Example: week=12.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/recent-stats/atp/Carlos%20Alcaraz' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
recentStatsobjectRecent-form statistics for the player and the opponents faced.
recentStats.playerStatsobjectAggregated statistics of the requested player.
recentStats.playerStats.statMatchesPlayednumberMatches with statistics in this selection.
recentStats.playerStats.matchesWonnumberMatches won. Counted over the matches in this selection.
recentStats.playerStats.matchesLostnumberMatches lost. Counted over the matches in this selection.
recentStats.playerStats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
recentStats.playerStats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
recentStats.playerStats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
recentStats.playerStats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
recentStats.playerStats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
recentStats.playerStats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
recentStats.playerStats.breakPointsConvertednumberBreak points converted as returner. Counted over the matches in this selection.
recentStats.playerStats.breakPointsConvertedOfnumberBreak-point chances as returner. Counted over the matches in this selection.
recentStats.opponentStatsobjectAggregated statistics of the opponents the player faced.
recentStats.opponentStats.statMatchesPlayednumberMatches with statistics in this selection.
recentStats.opponentStats.matchesWonnumberMatches won. Counted over the matches in this selection.
recentStats.opponentStats.matchesLostnumberMatches lost. Counted over the matches in this selection.
recentStats.opponentStats.firstServenumberFirst serves landed in. Counted over the matches in this selection.
recentStats.opponentStats.firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
recentStats.opponentStats.winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
recentStats.opponentStats.winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
recentStats.opponentStats.winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
recentStats.opponentStats.winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
recentStats.opponentStats.breakPointsConvertednumberBreak points converted as returner. Counted over the matches in this selection.
recentStats.opponentStats.breakPointsConvertedOfnumberBreak-point chances as returner. Counted over the matches in this selection.
recentStats.matchWinPernumberMatches won %.
recentStats.secondServeWinPernumberSecond-serve points won %.
recentStats.firstServeWinPernumberFirst-serve points won %.
recentStats.oppSecondServeWinPernumberPoints won returning the opponent's second serve %.
recentStats.oppFirstServeWinPernumberPoints won returning the opponent's first serve %.
recentStats.bpSavedPernumberBreak points saved %.
recentStats.bpConvertedPernumberBreak points converted %.
careerSurfaceWLobjectCareer win/loss by surface: bestSurface and worstSurface.
careerSurfaceWL.bestSurfaceobjectSurface with the highest career win %: court (ID), courtName, matchesWon, matchesLost, winPer.
careerSurfaceWL.bestSurface.courtnumberCourt-surface ID.
careerSurfaceWL.bestSurface.courtNamestringCourt surface name, e.g. Hard, Clay, Grass, I.hard (indoor hard).
careerSurfaceWL.bestSurface.matchesWonnumberMatches won. Counted over the matches in this selection.
careerSurfaceWL.bestSurface.matchesLostnumberMatches lost. Counted over the matches in this selection.
careerSurfaceWL.bestSurface.winPernumberMatches won %.
careerSurfaceWL.worstSurfaceobjectSurface with the lowest career win %: court (ID), courtName, matchesWon, matchesLost, winPer.
careerSurfaceWL.worstSurface.courtnumberCourt-surface ID.
careerSurfaceWL.worstSurface.courtNamestringCourt surface name, e.g. Hard, Clay, Grass, I.hard (indoor hard).
careerSurfaceWL.worstSurface.matchesWonnumberMatches won. Counted over the matches in this selection.
careerSurfaceWL.worstSurface.matchesLostnumberMatches lost. Counted over the matches in this selection.
careerSurfaceWL.worstSurface.winPernumberMatches won %.
yearStatsobjectSeason statistics: average opponent rank, deciding-set win % and the tour level played most.
yearStats.maxMatchTourLevelobjectTournament level with the most matches this season: rank (ID), rankName, matchesPlayed, avgOppRankSum.
yearStats.maxMatchTourLevel.ranknumberTournament level ID (TourRank).
yearStats.maxMatchTourLevel.rankNamestringTournament level name, e.g. "Masters series".
yearStats.maxMatchTourLevel.matchesWonnumberMatches won. Counted over the matches in this selection.
yearStats.maxMatchTourLevel.matchesLostnumberMatches lost. Counted over the matches in this selection.
yearStats.maxMatchTourLevel.matchesPlayednumberMatches played in this selection.
yearStats.maxMatchTourLevel.avgOppRankSumnumberSum of opponents' rankings (divide by matchesPlayed for the average).
yearStats.matchesWonnumberMatches won. Counted over the matches in this selection.
yearStats.matchesLostnumberMatches lost. Counted over the matches in this selection.
yearStats.matchesPlayednumberMatches played in this selection.
yearStats.avgOppRankSumnumberSum of opponents' rankings (divide by matchesPlayed for the average).
yearStats.avgOppRanknumberAverage ranking of opponents faced.
yearStats.decidingSetWinnumberDeciding sets won.
yearStats.decidingSetWinOfnumberDeciding sets played.
yearStats.decidingSetWinPernumberDeciding sets won %.

Player H2H Breakdown

GET/tennis/v2/h2h/breakdown/{atp|wta}/{player_id_or_name}
This example uses atp. Use wtafor the women's dataset.Retrieve a single player's career H2H-style breakdown (titles, surfaces, serve/return). This path takes one player โ€” two names return "No such player". Use /h2h/stats for two-player stats.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player_id_or_nameYesstring
Display name (Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}.

Query Parameter

ParameterRequiredTypeDescription
courtNostring
Surface name. Prefer this over surface. Example: court=Clay.
surfaceNostring
Filter by surface name. Alias of court. Example: surface=clay or court=Clay.
yearNointeger
Filter to a specific year. Example: year=2026
tournamentNostring
Filter by tournament name. Example: Monte-Carlo Rolex Masters - Monte-Carlo
includeAllNoboolean
Include Challenger/ITF and full history where supported. Example: includeAll=true
pageNointeger
Page number, starting at 1. pageNo is accepted as an alias on every route. Example: page=1
limitNointeger
Results per page. pageSize is accepted as an alias on every route. Default varies by endpoint. Example: limit=10
levelNointeger
Tournament level id. Example: level=4.
roundNostring
Round filter. Example: round=Final.
weekNointeger
Tour week number when supported. Example: week=12.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/breakdown/atp/Carlos%20Alcaraz' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
namestringThe single player in the path โ€” this is not a two-player H2H.
matchesCountintegerMatches included in this breakdown.
matchesWon1 / matchesWon2integerSuffix 1 is this playerโ€™s wins; suffix 2 is losses (or the complementary count).
hard1, clay1, grass1, iHard1integerThis playerโ€™s wins on each surface. Matching *2 fields are losses.
ytdWon / ytdLostintegerYear-to-date win/loss.
aces / firstServePercentage / โ€ฆnumberCareer serve, return, tiebreak, and pressure stats for this player.
slam1numberGrand Slam match wins of player 1.
slam2numberGrand Slam match wins of player 2.
title1numberTitles of player 1.
title2numberTitles of player 2.
master1numberMasters match wins of player 1.
master2numberMasters match wins of player 2.
main1numberMain-tour match wins of player 1.
main2numberMain-tour match wins of player 2.
cup1numberDavis/Fed Cup match wins of player 1.
cup2numberDavis/Fed Cup match wins of player 2.
future1numberITF/Futures match wins of player 1.
future2numberITF/Futures match wins of player 2.
challengers1numberChallenger match wins of player 1.
challengers2numberChallenger match wins of player 2.
tourFinals1numberTour Finals match wins of player 1.
tourFinals2numberTour Finals match wins of player 2.
avgTime1stringAverage match duration of player 1 (H:MM:SS).
avgTime2stringAverage match duration of player 2 (H:MM:SS).
gamesWon1numberGames won by player 1.
gamesWon2numberGames won by player 2.
totalPointsWonnumberTotal points won. Counted over the matches in this selection.
totalPointsWonOfnumberTotal points played. Counted over the matches in this selection.
setsWon1numberSets won by player 1.
setsWon2numberSets won by player 2.
hard1numberHard-court H2H wins of player 1.
iHard1numberIndoor-hard H2H wins of player 1.
clay1numberClay H2H wins of player 1.
grass1numberGrass H2H wins of player 1.
hard2numberHard-court H2H wins of player 2.
iHard2numberIndoor-hard H2H wins of player 2.
clay2numberClay H2H wins of player 2.
grass2numberGrass H2H wins of player 2.
total1numberTotal H2H wins of player 1.
total2numberTotal H2H wins of player 2.
acesTotalnumberTotal aces served. Counted over the matches in this selection.
doubleFaultsCountnumberDouble faults per service game (average).
firstServenumberFirst serves landed in. Counted over the matches in this selection.
firstServeOfnumberFirst-serve attempts (total service points). Counted over the matches in this selection.
winningOnFirstServenumberPoints won on first serve. Counted over the matches in this selection.
winningOnFirstServeOfnumberPoints played on first serve (first serves in). Counted over the matches in this selection.
winningOnFirstServePercentagenumberFirst-serve points won %.
winningOnSecondServenumberPoints won on second serve. Counted over the matches in this selection.
winningOnSecondServeOfnumberPoints played on second serve. Counted over the matches in this selection.
winningOnSecondServePercentagenumberSecond-serve points won %.
returnPtsWinnumberReturn points won. Counted over the matches in this selection.
returnPtsWinOfnumberReturn points played. Counted over the matches in this selection.
returnPtsWinPercentagenumberReturn points won %.
breakPointsConvertednumberBreak points converted as returner. Counted over the matches in this selection.
breakPointsConvertedOfnumberBreak-point chances as returner. Counted over the matches in this selection.
breakpointsWonPercentagenumberBreak points converted %.
bestOfThreeWonnumberBest-of-three matches won.
bestOfThreeWonPercentagenumberBest-of-three matches won %.
bestOfThreeCountnumberBest-of-three matches played.
bestOfFiveWonnumberBest-of-five matches won.
bestOfFiveWonPercentagenumberBest-of-five matches won %.
bestOfFiveCountnumberBest-of-five matches played.
firstSetWinMatchWinnumberMatches won after winning the first set.
firstSetWinMatchWinPercentagenumber% of matches won after winning the first set.
firstSetWinMatchLosenumberMatches lost after winning the first set.
firstSetWinMatchLosePercentagenumber% of matches lost after winning the first set.
firstSetLoseMatchWinnumberMatches won after losing the first set.
firstSetLoseMatchWinPercentagenumber% of matches won after losing the first set.
firstSetWinCountnumberMatches in which the player won the first set.
firstSetLoseCountnumberMatches in which the player lost the first set.
decidingSetWinnumberDeciding sets won.
decidingSetCountnumberDeciding sets played.
decidingSetWinPercentagenumberDeciding sets won %.
tiebreakWonnumberTiebreaks won.
tiebreakCountnumberTiebreaks played.
totalTBWinPercentagenumberTiebreaks won %.
avgOppRanknumberAverage ranking of opponents faced.
totalDoubleFaultsCountnumberTotal double faults. Counted over the matches in this selection.

H2H Filter Options (Player-v-Player Mode)

GET/tennis/v2/h2h/filters/{player1_id_or_name}/{player2_id_or_name}/{atp|wta}/vs
This example uses atp. Use wtafor the women's dataset.Retrieve all available filter options for head-to-head player comparisons, including court surfaces, tournament rounds, competition levels, tournaments, and seasons. Use these values to build valid filter queries for player-vs-player H2H endpoints.

Path Parameter

ParameterRequiredTypeDescription
player1_id_or_nameYesstring
First player: display name (Carlos Alcaraz) or numeric ID.
player2_id_or_nameYesstring
Second player: display name (Jannik Sinner) or numeric ID.
atp|wtaYesstring
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.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/filters/Jannik%20Sinner/Carlos%20Alcaraz/atp/vs' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
courtsarrayCourt-surface filter options.
courts[]objectOne item of `courts`; its fields are listed below.
courts[].idnumberNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
courts[].namestringDisplay name.
roundsarrayRound filter options.
rounds[]objectOne item of `rounds`; its fields are listed below.
rounds[].idnumberNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
rounds[].namestringDisplay name.
levelarrayTournament-level filter options.
level[]objectOne item of `level`; its fields are listed below.
level[].idnumberNumeric ID of this item (see the parent object: match, player, tournament, live event, โ€ฆ).
level[].namestringDisplay name.
tournamentsarrayTournaments.
tournaments[]objectOne item of `tournaments`; its fields are listed below.
tournaments[].namestringDisplay name.
tournaments[].datestringDate/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date.
yearsarrayAvailable season years (newest first).

Last Match Played

GET/tennis/v2/h2h/last-match-played/{atp|wta}/{player_id_or_name}
This example uses atp. Use wtafor the women's dataset.Returns this player's most recently completed match (one player in the path โ€” not a two-player H2H).

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player_id_or_nameYesstring
Display name (Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}.
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/last-match-played/atp/Carlos%20Alcaraz' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
player1 / player2stringDisplay names. player1 is this path player.
resultstringwon or lost from this playerโ€™s side.
scorestringSet score string.
roundintegerRound id (not the label).
tournamentstringEvent name.
matchtimestringDuration/time string. Can be a zero date such as 0000-00-00 04:28:00 when only duration is known.

Player Rivalries

GET/tennis/v2/h2h/rivalries/{atp|wta}/{player_id_or_name}
This example uses atp. Use wtafor the women's dataset.A player's biggest rivalries. includeAll=true adds Challenger/ITF meetings.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.
player_id_or_nameYesstring
Display name (Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}.

Query Parameter

ParameterRequiredTypeDescription
includeAllNoboolean
Include Challenger/ITF and full history where supported. Example: includeAll=true
limitNointeger
Results per page. pageSize is accepted as an alias on every route. Default varies by endpoint. Example: limit=10
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/h2h/rivalries/atp/Jannik%20Sinner' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

FieldTypeDescription
playerstringPlayer display name.
rivalriesarrayMost frequent opponents with the head-to-head record.
rivalries[]objectOne item of `rivalries`; its fields are listed below.
rivalries[].opponentNamestringRival's display name.
rivalries[].playerWinsnumberWins of the requested player against this rival.
rivalries[].opponentWinsnumberWins of the rival against the requested player.
rivalries[].totalMatchesnumberTotal meetings between the player and this rival.

Interesting H2H: Notable Rivalries (Tour-Wide)

GET/tennis/v2/interesting-h2h/{atp|wta}
This example uses atp. Use wtafor the women's dataset.Retrieves the most interesting potential head-to-head matchups based on the current potential fixtures. Each result includes both players, their career head-to-head record, and the tour where the matchup could occur.

Path Parameter

ParameterRequiredTypeDescription
atp|wtaYesstring
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.

Query Parameter

ParameterRequiredTypeDescription
includeAllNoboolean
Include Challenger/ITF and full history where supported. Example: includeAll=true
topNonumber
Maximum number of top potential matchups to return. Example: top=10
pageNointeger
Page number, starting at 1. pageNo is accepted as an alias on every route. Example: page=1
limitNointeger
Results per page. pageSize is accepted as an alias on every route. Default varies by endpoint. Example: limit=10
Example Request: CURL
curl --request GET \
	--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/interesting-h2h/atp' \
	--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com' \
	--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'

Response Properties

Shared objects in this response (defined once in Reusable response schemas): Player.

FieldTypeDescription
[]objectOne item of the response; its fields are listed below.
[].player1objectPlayer 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.
[].player1.namestringPlayer 1 name.
[].player1.countryAcrstringPlayer 1 country code.
[].player2objectPlayer 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order.
[].player2.namestringPlayer 2 name.
[].player2.countryAcrstringPlayer 2 country code.
[].player1WinsnumberCareer head-to-head wins of player 1.
[].player2WinsnumberCareer head-to-head wins of player 2.
[].typestringDataset: atp (men) or wta (women).