API Reference
Player Profiles & Career Stats
Core player routes use a numeric ID. Use these for profile, stats, matches, surface, and filters. Extra endpoints at the bottom (career statistics, name search, status, next match, photos) are not replacements for the core routes.
- Every player route on this page accepts the numeric player ID (for example
68074) or the display name (Carlos Alcaraz); both return the same response. Names match within the tour in the path; a name shared by several players returns400listing their IDs, so prefer IDs when you have them. - Hyphenated slugs such as
alcaraz-carlosare not names: they find no player. GET /tennis/v2/search?search=Carlos%20Alcarazreturns names, not IDs. Take numeric IDs from rankings, fixtures, or/tennis/v2/{atp|wta}/player.
Players List
Page 1 of GET /player starts at sparse / ITF rows (empty names can appear). For confidence in examples use Rankings or Player Profile with a known ID (e.g. Sinner 47275, Alcaraz 68074). The sample below shows top players for illustration.
/tennis/v2/{atp|wta}/playeratp. Use wtafor the women's dataset.Returns a paginated list of players on the selected tour, including each player's numeric ID, display name, country, and current ranking snapshot. Sorted alphabetically by name (a full directory); use the rankings endpoints for top players, or search to find one player's ID. Add filter=PlayerGroup:singles to skip doubles pairs.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extra objects to add. Available: country โ adds a full country object to each player.Example: include=country |
filter | No | string | Semicolon-separated filters in Key:value format. Available filters:
filter=PlayerGroup:singles;PlayerCountry:ESP,ITA |
pageSize | No | integer | 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. |
pageNo | No | integer | Page number, 1-indexed. Default: 1. Example: pageNo=1. Use hasNextPage in the response to check for more pages. |
Response Properties
| Field | Type | Description |
|---|---|---|
data | array | The page of results. An empty array with HTTP 200 means the request was valid and nothing matched that date, filter, or page. |
pageNo | integer | Current page, starting at 1. Also returned as page. |
pageSize | integer | Items requested for this page. Also returned as limit. Core maximum is 500. |
hasNextPage | boolean | true if another page exists. Stop when this is false or data is empty. |
id | integer | Numeric player ID for core player and fixture routes. |
name | string | Display name. URL-encode this on name-based /profile routes. |
countryAcr | string | 3-letter country code, e.g. ESP. |
currentRank | integer | Current singles ranking position, or null if unranked. |
points | integer | Current ranking points, or null if unranked. |
progress | integer | Places gained or lost versus the previous list (negative = dropped). |
data[].birthday | null | Date of birth (ISO-8601), or null when unknown. |
data[].height | null | Height in cm, or null when unknown. |
data[].wikidata_id | string | Wikidata ID of the player, or empty string. |
data[].country | object | Country: { name, acronym }. |
data[].country.name | string | Country name. |
data[].country.acronym | string | Three-letter country code. |
data[].information | null | Biography details (turned pro, height/weight, birthplace, residence, plays, social links), or null. |
page | number | Current page number (1-based). |
limit | number | Items per page. |
Player Profile by ID
/tennis/v2/{atp|wta}/player/profile/{player_id}atp. Use wtafor the women's dataset.Returns full profile details for one player, by numeric ID or display name (both return the same profile).Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extras to load. Available:
include=form,ranking,country |
Response Properties
| Field | Type | Description |
|---|---|---|
data | object | The player profile object. |
id | integer | Numeric player ID. |
name | string | Display name. |
birthday | string | Date of birth as ISO-8601. |
countryAcr | string | 3-letter country code. |
currentRank / points / progress | integer | Latest official ranking snapshot. |
playerStatus | string | e.g. Active. |
information | object | Bio: turnedPro, height, weight, plays, coach, social links. |
country | object | Present when include contains country: name and acronym. |
data.playerStatus | string | Career status: Active or Retired. |
data.coach | string | Coach name, or null. |
data.id | number | Numeric ID of this item (see the parent object: match, player, tournament, live event, โฆ). |
data.name | string | Display name. |
data.birthday | string | Date of birth (ISO-8601), or null when unknown. |
data.countryAcr | string | Three-letter country code (IOC style), e.g. ESP. |
data.currentRank | number | Current singles ranking position from the latest ranking list (same source as the ranking endpoints), or null. |
data.progress | number | Ranking positions gained (+) or lost (โ) in the latest ranking week. |
data.points | number | Ranking points from the latest ranking list (same value as the ranking endpoints). |
data.height | null | Height in cm, or null when unknown. |
data.wikidata_id | null | Wikidata ID of the player, or empty string. |
data.country | object | Country: { name, acronym }. |
data.country.name | string | Country name. |
data.country.acronym | string | Three-letter country code. |
data.information | object | Biography details (turned pro, height/weight, birthplace, residence, plays, social links), or null. |
data.information.id | number | Numeric ID of this item (see the parent object: match, player, tournament, live event, โฆ). |
data.information.turnedPro | string | Year the player turned professional (string). |
data.information.weight | string | Weight in kg (string). |
data.information.height | string | Height in cm, or null when unknown. |
data.information.birthplace | string | Place of birth. |
data.information.residence | string | Current residence. |
data.information.plays | string | Handedness and backhand, e.g. "Right-Handed, Two-Handed Backhand". |
data.information.coach | string | Coach name, or null. |
data.information.site | null | Official website URL, or null. |
data.information.twitter | string | Social profile link as stored; some rows hold an ATP profile URL instead. |
data.information.page | string | Profile page URL on an external site as stored (empty when unknown). Not a page number. |
data.information.instagram | string | Instagram profile URL. |
data.information.facebook | string | Facebook page URL. |
data.rankingDate | string | Date of the ranking list that currentRank and points come from. |
Player Titles
/tennis/v2/{atp|wta}/player/titles/{player_id}atp. Use wtafor the women's dataset.Returns a player's finals record grouped by tournament level (ITF, Challenger, main tour, Masters, Grand Slam and more): titles won and finals lost at each level. For the list of individual finals, use Player Finals by ID. No pagination.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Response Properties
| Field | Type | Description |
|---|---|---|
data | array | One row per tournament level. |
tourRankId | integer | Level ID (0 = ITF $10K, 1 = Challenger/ITF >$10K, 4 = Grand Slam, โฆ). |
tourRank | string | Level name. |
titlesWon / titlesLost | string | Finals won and lost at that level. |
Player Match Stats by ID
/tennis/v2/{atp|wta}/player/match-stats/{player_id}atp. Use wtafor the women's dataset.Returns aggregated match statistics for a player (win/loss records, ace counts, break point stats, etc.)Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Response Properties
| Field | Type | Description |
|---|---|---|
data | object | Response payload: the list or object documented in the rows below. |
data.serviceStats | object | Serve statistics totals. |
data.serviceStats.acesGm | number | Aces served. Counted over the matches in this selection. |
data.serviceStats.doubleFaultsGm | number | Double faults. Counted over the matches in this selection. |
data.serviceStats.firstServeGm | number | First serves in. Counted over the matches in this selection. |
data.serviceStats.firstServeOfGm | number | First-serve attempts. Counted over the matches in this selection. |
data.serviceStats.winningOnFirstServeGm | number | Points won on first serve. Counted over the matches in this selection. |
data.serviceStats.winningOnFirstServeOfGm | number | Points played on first serve. Counted over the matches in this selection. |
data.serviceStats.winningOnSecondServeGm | number | Points won on second serve. Counted over the matches in this selection. |
data.serviceStats.winningOnSecondServeOfGm | number | Points played on second serve. Counted over the matches in this selection. |
data.rtnStats | object | Return statistics: the opponents' serve totals in the player's matches. |
data.rtnStats.acesGm | number | Aces served. Counted over the matches in this selection. |
data.rtnStats.doubleFaultsGm | number | Double faults. Counted over the matches in this selection. |
data.rtnStats.firstServeGm | number | First serves in. Counted over the matches in this selection. |
data.rtnStats.firstServeOfGm | number | First-serve attempts. Counted over the matches in this selection. |
data.rtnStats.winningOnFirstServeGm | number | Points won on first serve. Counted over the matches in this selection. |
data.rtnStats.winningOnFirstServeOfGm | number | Points played on first serve. Counted over the matches in this selection. |
data.rtnStats.winningOnSecondServeGm | number | Points won on second serve. Counted over the matches in this selection. |
data.rtnStats.winningOnSecondServeOfGm | number | Points played on second serve. Counted over the matches in this selection. |
data.breakPointsServeStats | object | Break points on serve: faced and saved. |
data.breakPointsServeStats.breakPointFacedGm | number | Break points faced on serve. Counted over the matches in this selection. |
data.breakPointsServeStats.breakPointSavedGm | number | Break points saved on serve. Counted over the matches in this selection. |
data.breakPointsRtnStats | object | Break points on return: chances and converted. |
data.breakPointsRtnStats.breakPointChanceGm | number | Break-point chances on return. Counted over the matches in this selection. |
data.breakPointsRtnStats.breakPointWonGm | number | Break points converted on return. Counted over the matches in this selection. |
Player Past Matches by ID
/tennis/v2/{atp|wta}/player/past-matches/{player_id}atp. Use wtafor the women's dataset.Returns completed match results for a player, most recent first. On these rows player1 is the winner. 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
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | 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 stats).Example: include=round,tournament.court,stat |
filter | No | string | Semicolon-separated filters in Key:value format. Available filters:
filter=GameYear:2025;GameCourt:2. Unknown filter names return 400 listing the supported ones. |
pageSize | No | integer | 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. |
pageNo | No | integer | Page number, 1-indexed. Default: 1. Example: pageNo=1. Use hasNextPage in the response to check for more pages. |
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player ยท Tournament.
| Field | Type | Description |
|---|---|---|
data | array | The page of results. An empty array with HTTP 200 means the request was valid and nothing matched that date, filter, or page. |
pageNo | integer | Current page, starting at 1. Also returned as page. |
pageSize | integer | Items requested for this page. Also returned as limit. Core maximum is 500. |
hasNextPage | boolean | true if another page exists. Stop when this is false or data is empty. |
id | integer | Completed-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. |
date | string | Match 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. |
result | string | Score 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 / player2Id | integer | On completed matches, player1 is always the winner and player2 the loser. |
tournamentId / roundId | integer | Event edition and round. |
odd1 / odd2 | string | null | Marathonbet 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 / player2 | object | id, 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[].matchId | string | Match ID (same value as id on core match rows). |
data[].match_winner | number | Player ID of the match winner. |
data[].result_type | string | How the match ended: completed, retired, walkover or default. |
data[].best_of | null | Best-of sets (3 or 5) when known, otherwise null. |
data[].player1.id | number | Player 1 ID. |
data[].player1.name | string | Player 1 name. |
data[].player1.countryAcr | string | Player 1 country code. |
data[].player2.id | number | Player 2 ID. |
data[].player2.name | string | Player 2 name. |
data[].player2.countryAcr | string | Player 2 country code. |
data[].tournament | object | Tournament object (id, name, date, level, surface, country, โฆ). |
data[].tournament.id | number | Tournament season ID. |
data[].tournament.name | string | Tournament name. |
data[].tournament.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, โฆ |
data[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
data[].tournament.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, โฆ |
data[].tournament.countryAcr | string | Three-letter country code of the tournament. |
data[].tournament.court | null | Court surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }. |
data[].tournament.rank | null | Tournament level: { id, name }. |
data[].tournament.country | null | Country of the tournament: three-letter code, or { name, acronym }. |
data[].oddsAvailable | boolean | true when the odds archive has pre-match prices for this match; links.odds then returns them (both bookmakers). |
data[].links | object | Ready-made URLs for this match's detail routes. |
data[].links.odds | string | URL of the archived pre-match odds for this match (both bookmakers); present when oddsAvailable is true. |
page | number | Current page number (1-based). |
limit | number | Items per page. |
Player Surface Summary by ID
/tennis/v2/{atp|wta}/player/surface-summary/{player_id}atp. Use wtafor the women's dataset.Returns win/loss records broken down by court surface (hard, clay, grass,
carpet, indoor hard)Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Response Properties
| Field | Type | Description |
|---|---|---|
data | array | Response payload: the list or object documented in the rows below. |
data[] | object | One item of `data`; its fields are listed below. |
data[].year | number | Season year. |
data[].surfaces | array | Court-surface filter options or per-surface rows. |
data[].surfaces[] | object | One item of `data[].surfaces`; its fields are listed below. |
data[].surfaces[].courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, โฆ |
data[].surfaces[].court | string | Court-surface name. |
data[].surfaces[].courtWins | number | Matches won on this surface. |
data[].surfaces[].courtLosses | number | Matches lost on this surface. |
Player Performance Breakdown by ID
/tennis/v2/{atp|wta}/player/perf-breakdown/{player_id}atp. Use wtafor the women's dataset.Returns granular performance metrics including serve, return, and pressure
statistics.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Returns { data: {...} } with serve, return, pressure, and situational win-rate fields โ similar to H2H Stats. The exact keys vary by player. Returns { data: null } if no performance data is available.
Response Properties
| Field | Type | Description |
|---|---|---|
data | object | Response payload: the list or object documented in the rows below. |
data.{year} | object | Season breakdown for this year (keys are years; dynamic). |
data.{year}.court | object | Win/loss by surface, keyed by court ID. |
data.{year}.court.{courtId} | number | Win/loss on this surface: w, l (aw, al = all levels). |
data.{year}.court.{courtId}.w | number | Matches won. |
data.{year}.court.{courtId}.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.court.{courtId}.l | number | Matches lost. |
data.{year}.court.{courtId}.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.round | object | Win/loss by round, keyed by round ID. |
data.{year}.round.{roundId} | object | Win/loss in this round: w, l (aw, al = all levels). |
data.{year}.round.{roundId}.w | number | Matches won. |
data.{year}.round.{roundId}.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.round.{roundId}.l | number | Matches lost. |
data.{year}.round.{roundId}.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.rank | object | Record against ranked opponents: top1 โฆ top100. |
data.{year}.rank.top1 | object | Record against world No. 1: aw = wins, al = losses. |
data.{year}.rank.top1.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.rank.top1.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.rank.top5 | object | Record against top-5 opponents: aw = wins, al = losses. |
data.{year}.rank.top5.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.rank.top5.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.rank.top10 | object | Record against top-10 opponents: aw = wins, al = losses. |
data.{year}.rank.top10.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.rank.top10.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.rank.top20 | object | Record against top-20 opponents: aw = wins, al = losses. |
data.{year}.rank.top20.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.rank.top20.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.rank.top50 | object | Record against top-50 opponents: aw = wins, al = losses. |
data.{year}.rank.top50.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.rank.top50.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.rank.top100 | object | Record against top-100 opponents: aw = wins, al = losses. |
data.{year}.rank.top100.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.rank.top100.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level | object | Win/loss by tournament level (aw = wins, al = losses, all levels counted). |
data.{year}.level.masters | object | Masters record. |
data.{year}.level.masters.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.masters.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level.tourFinals | object | Tour Finals record. |
data.{year}.level.tourFinals.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.tourFinals.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level.mainTour | object | Main-tour record. |
data.{year}.level.mainTour.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.mainTour.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level.grandSlam | object | Grand Slam record. |
data.{year}.level.grandSlam.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.grandSlam.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level.cups | object | Davis/Fed Cup record. |
data.{year}.level.cups.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.cups.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level.futures | object | ITF/Futures record. |
data.{year}.level.futures.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.futures.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level.challengers | object | Challenger record. |
data.{year}.level.challengers.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.challengers.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.level.total | object | All tournament levels combined: aw = wins, al = losses. |
data.{year}.level.total.aw | number | Matches won including all levels (ITF, Challenger, qualifying); w excludes them. |
data.{year}.level.total.al | number | Matches lost including all levels (ITF, Challenger, qualifying); l excludes them. |
data.{year}.levelFinals | object | Finals won (w) and lost (l) by tournament level. |
data.{year}.levelFinals.masters | object | Masters record. |
data.{year}.levelFinals.masters.w | number | Matches won. |
data.{year}.levelFinals.masters.l | number | Matches lost. |
data.{year}.levelFinals.tourFinals | object | Tour Finals record. |
data.{year}.levelFinals.tourFinals.w | number | Matches won. |
data.{year}.levelFinals.tourFinals.l | number | Matches lost. |
data.{year}.levelFinals.mainTour | object | Main-tour record. |
data.{year}.levelFinals.mainTour.w | number | Matches won. |
data.{year}.levelFinals.mainTour.l | number | Matches lost. |
data.{year}.levelFinals.grandSlam | object | Grand Slam record. |
data.{year}.levelFinals.grandSlam.w | number | Matches won. |
data.{year}.levelFinals.grandSlam.l | number | Matches lost. |
data.{year}.levelFinals.cups | object | Davis/Fed Cup record. |
data.{year}.levelFinals.cups.w | number | Matches won. |
data.{year}.levelFinals.cups.l | number | Matches lost. |
data.{year}.levelFinals.futures | object | ITF/Futures record. |
data.{year}.levelFinals.futures.w | number | Matches won. |
data.{year}.levelFinals.futures.l | number | Matches lost. |
data.{year}.levelFinals.challengers | object | Challenger record. |
data.{year}.levelFinals.challengers.w | number | Matches won. |
data.{year}.levelFinals.challengers.l | number | Matches lost. |
data.{year}.levelFinals.total | object | Finals at all levels combined: w = won, l = lost. |
data.{year}.levelFinals.total.w | number | Matches won. |
data.{year}.levelFinals.total.l | number | Matches lost. |
Player Finals by ID
/tennis/v2/{atp|wta}/player/finals/{player_id}atp. Use wtafor the women's dataset.Returns all finals appearances (won and lost) for a player.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
filter | No | string | Semicolon-separated filters in Key:value format. Available filters:
filter=GameYear:2024,2025;TourRank:4 |
Returns { data: [...] } โ same match record structure as Past Matches. Only final-round matches are included (roundId = 12 for standard events, roundId = 16 for Tour Finals round-robin). Includes tournament prize field and optional country object for the host nation.
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player ยท Tournament.
| Field | Type | Description |
|---|---|---|
data | array | Response payload: the list or object documented in the rows below. |
data[] | object | One item of `data`; its fields are listed below. |
data[].id | string | Numeric ID of this item (see the parent object: match, player, tournament, live event, โฆ). |
data[].matchId | string | Match ID (same value as id on core match rows). |
data[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
data[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0โ3 are qualifying rounds. |
data[].player1Id | number | Numeric ID of player 1. |
data[].player2Id | number | Numeric ID of player 2. |
data[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
data[].match_winner | number | Player ID of the match winner. |
data[].result | string | Score string, e.g. "6-3 6-4"; empty string until the match is played. |
data[].result_type | string | How the match ended: completed, retired, walkover or default. |
data[].best_of | null | Best-of sets (3 or 5) when known, otherwise null. |
data[].odd1 | null | One stored pre-match price for player 1 (one bookmaker only), often null. Use oddsAvailable / links.odds for the full archived odds. |
data[].odd2 | null | Pre-match/closing odds retained for player 2, or null when not available. |
data[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
data[].player1.id | number | Player 1 ID. |
data[].player1.name | string | Player 1 name. |
data[].player1.countryAcr | string | Player 1 country code. |
data[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
data[].player2.id | number | Player 2 ID. |
data[].player2.name | string | Player 2 name. |
data[].player2.countryAcr | string | Player 2 country code. |
data[].tournament | object | Tournament object (id, name, date, level, surface, country, โฆ). |
data[].tournament.id | number | Tournament season ID. |
data[].tournament.name | string | Tournament name. |
data[].tournament.courtId | number | Numeric court-surface ID (see GET /tennis/v2/court): 1 Hard, 2 Clay, 3 Indoor hard, 5 Grass, โฆ |
data[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
data[].tournament.rankId | number | Tournament level ID (TourRank, see GET /tennis/v2/ranking): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, 5 Davis/Fed Cup, 7 Tour finals, โฆ |
data[].tournament.countryAcr | string | Three-letter country code of the tournament. |
data[].tournament.prize | string | Prize money as shown by the source, e.g. "$48.9M" (string), or null. |
data[].tournament.court | object | Court surface of the tournament: { id, name } (some routes return only { name }), e.g. { "name": "Hard" }. |
data[].tournament.court.id | number | Court-surface ID. |
data[].tournament.court.name | string | Court surface name, e.g. Hard, Clay, Grass, I.hard. |
data[].tournament.rank | object | Tournament level: { id, name }. |
data[].tournament.rank.id | number | Tournament level ID (TourRank). |
data[].tournament.rank.name | string | Tournament level name, e.g. "Main tour". |
data[].tournament.country | object | Country of the tournament: three-letter code, or { name, acronym }. |
data[].tournament.country.name | string | Country name. |
data[].tournament.country.acronym | string | Three-letter country code. |
Interesting H2H for Player by ID
/tennis/v2/{atp|wta}/player/interesting-h2h/{player_id}atp. Use wtafor the women's dataset.Returns notable head-to-head records for a player (most wins, biggest rivals,
etc.). On every row the requested player is player1.The original misspelled path /player/intersting-h2h/{player_id} keeps working for existing integrations; both return the same response.
Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player.
| Field | Type | Description |
|---|---|---|
data | array | Response payload: the list or object documented in the rows below. |
data[] | object | One item of `data`; its fields are listed below. |
data[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
data[].player1.id | number | Player 1 ID. |
data[].player1.name | string | Player 1 name. |
data[].player1.countryAcr | string | Player 1 country code. |
data[].player1.wins | number | Head-to-head wins of player 1 against player 2 (integer). |
data[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
data[].player2.id | number | Player 2 ID. |
data[].player2.name | string | Player 2 name. |
data[].player2.countryAcr | string | Player 2 country code. |
data[].player2.wins | number | Head-to-head wins of player 2 against player 1 (integer). |
Player Filter Options by ID
/tennis/v2/{atp|wta}/player/filter/{player_id}atp. Use wtafor the women's dataset.Returns available filter categories and metadata for a player (used to build UI
filter panels)Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string |
Response Properties
| Field | Type | Description |
|---|---|---|
data | object | Response payload: the list or object documented in the rows below. |
data.rounds | array | Round filter options. |
data.rounds[] | object | One item of `data.rounds`; its fields are listed below. |
data.rounds[].roundId | number | Round ID. |
data.rounds[].round | string | Round label. |
data.courts | array | Court-surface filter options. |
data.courts[] | object | One item of `data.courts`; its fields are listed below. |
data.courts[].courtId | number | Court-surface ID. |
data.courts[].court | string | Court-surface name. |
data.tournaments | array | Tournaments. |
data.tournaments[] | object | One item of `data.tournaments`; its fields are listed below. |
data.tournaments[].tournamentId | number | Tournament season ID. |
data.tournaments[].tournament | string | Tournament name. |
data.tournaments[].tournamentDate | string | Tournament start date (ISO-8601). |
data.tournamentRanks | array | Tournament levels the player has played: rankId, rank. |
data.tournamentRanks[] | object | One item of `data.tournamentRanks`; its fields are listed below. |
data.tournamentRanks[].rankId | number | Tournament level ID. |
data.tournamentRanks[].rank | string | Tournament level name. |
data.gameYears | array | Seasons in which the player has matches (newest first). |
Player Tournament Record
/tennis/v2/{atp|wta}/player/tournament-record/{player_id}/{tournament_id}atp. Use wtafor the women's dataset.Returns a player's career record at a specific tournament, one entry per
year.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string | |
tournament_id | Yes | integer | Any season ID from that tournament family. All historical editions of the same event are included. |
Response Properties
| Field | Type | Description |
|---|---|---|
data | array | Response payload: the list or object documented in the rows below. |
data[] | object | One item of `data`; its fields are listed below. |
data[].year | number | Season year. |
data[].tournamentId | number | Numeric tournament season ID (one edition of an event). |
data[].tournamentName | string | Tournament display name. |
data[].bestRoundId | number | Round ID of the furthest round reached. |
data[].bestRound | string | Furthest round reached, e.g. "Second", "Final". |
data[].wins | number | Wins (see the endpoint description for what is counted). |
data[].losses | number | Losses. |
Extra player endpoints
These are not the same as the core profile, stats, or match routes above. Use them for career statistics, player search by name, status, the next scheduled match, or photos.
Player Career Statistics
/tennis/v2/profile/{player_id_or_name}/statisticsPath Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player_id_or_name | Yes | string | Display name ( Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}. |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
type | No | string | Use with a numeric player ID to choose the men's or women's player with that ID: atp or wta. Example: type=wta. Not needed when you pass a player name. |
includeAll | No | boolean | Include Challenger/ITF and full history where supported. Example: includeAll=true |
Response Properties
| Field | Type | Description |
|---|---|---|
recentGames | array | Last 10 results as w or l (most recent first). |
currentRank | integer | Current singles ranking, or null if unranked. |
bestRank.position / bestRank.date | object | Career-high rank and the date it was reached. |
mainTours / tourFinals / master / grandSlam / cups / futures / challengers / total | object | Win/loss objects for that category. |
favouriteCourt | object | wins, losses, surfaceId, surface. |
totalTitles / totalTitlesWon / totalFinalsWon | integer | Career title counts. |
bestRank | object | Career-high ranking: position and the date it was first reached. |
favouriteCourt.wins | number | Wins (see the endpoint description for what is counted). |
favouriteCourt.losses | number | Losses. |
favouriteCourt.surfaceId | number | Court-surface ID (same values as courtId). |
favouriteCourt.surface | string | Court surface name. |
Search Player Profiles
/tennis/v2/profile/search/{name}/{atp|wta}atp. Use wtafor the women's dataset.Search for tennis players by surname and tour type (atp/wta), returning a list of matching player names.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
name | Yes | string | Player display name (URL-encoded). |
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
page | No | integer | Page number, starting at 1. pageNo is accepted as an alias on every route. Example: page=1 |
limit | No | integer | Results per page. pageSize is accepted as an alias on every route. Default varies by endpoint. Example: limit=10 |
Response Properties
| Field | Type | Description |
|---|---|---|
[] | array<string> | Matching player display names (plain strings, not objects). Use a name with the profile routes, or search /tennis/v2/search for IDs. |
Player Status
/tennis/v2/profile/{player_id_or_name}/player-statusPath Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player_id_or_name | Yes | string | Display name ( Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}. |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
type | No | string | Use with a numeric player ID to choose the men's or women's player with that ID: atp or wta. Example: type=wta. Not needed when you pass a player name. |
Response Properties
| Field | Type | Description |
|---|---|---|
status | string | Current player status, e.g. Active or Inactive. |
Player Upcoming Match
Returns rows only while the player has a match on the schedule; otherwise the list is empty ([]). The example (Daniil Medvedev, Almaty, October 2026) is empty once his Almaty run ends. For a player with a current match, take player1 / player2 from Today's Fixtures (/tennis/v2/{atp|wta}/fixtures).
/tennis/v2/profile/{player_id_or_name}/upcomingPath Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player_id_or_name | Yes | string | Display name ( Carlos Alcaraz) or numeric ID (68074). Hyphenated slugs such as alcaraz-carlos return {"err":"Player not found"}. |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
type | No | string | Use with a numeric player ID to choose the men's or women's player with that ID: atp or wta. Example: type=wta. Not needed when you pass a player name. |
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player ยท Tournament.
| Field | Type | Description |
|---|---|---|
[] | object | One item of the response; its fields are listed below. |
[].date | string | Date/time as ISO-8601 UTC. On match rows this is the scheduled or played start; on tournaments, the start date. |
[].tournament | object | Tournament object (id, name, date, level, surface, country, โฆ). |
[].tournament.id | number | Tournament season ID. |
[].tournament.name | string | Tournament name. |
[].tournament.date | string | Tournament start date (ISO-8601 UTC). |
[].roundId | number | Numeric round ID (see GET /tennis/v2/round): e.g. 4 = First, 5 = Second, 9 = 1/4, 10 = 1/2, 12 = Final; 0โ3 are qualifying rounds. |
[].player1 | object | Player 1 (first-listed player). On completed archive rows (results, match history, H2H) player1 is the winner; live-service responses (point-by-point, statistics) keep the live feed's order, so map sides by name or ID there. |
[].player1.name | string | Player 1 name. |
[].player1.seed | string | Tournament seed as a string, or null when unseeded. |
[].player1.odd | string | Pre-match match-winner odds for this player (decimal), as a string; null when not available. |
[].player1.countryAcr | string | Player 1 country code. |
[].player1.image | string | Player photo path on this API (append to the base URL). |
[].player1.image_p_name | string | Player photo path keyed by player name (alternative to image). |
[].player2 | object | Player 2 (second-listed player). On completed archive rows player2 is the loser; live-service responses keep the live feed's order. |
[].player2.name | string | Player 2 name. |
[].player2.seed | null | Tournament seed as a string, or null when unseeded. |
[].player2.odd | string | Pre-match match-winner odds for this player (decimal), as a string; null when not available. |
[].player2.countryAcr | string | Player 2 country code. |
[].player2.image | string | Player photo path on this API (append to the base URL). |
[].player2.image_p_name | string | Player photo path keyed by player name (alternative to image). |
[].h2h | string | Career head-to-head as "player1Wins-player2Wins", e.g. "4-1". |
Player Image (JPEG)
/tennis/v2/ms-api/uploads/Photo/{atp|wta}/{player_id}.jpgatp. Use wtafor the women's dataset.Returns the player photograph as a JPEG. Use the image path from a profile or H2H payload โ the file name is the player id padded to five digits (Carlos Alcaraz is 68074.jpg). HTTP 200 with Content-Type image/jpeg; the body is the image, not JSON.Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
atp|wta | Yes | string | Dataset to query. atp = men's tennis across all supported levels, including Grand Slams, ATP Tour, Challengers and ITF. wta = women's tennis across all supported levels, including Grand Slams, WTA Tour and ITF. There is no separate itf value. |
player_id | Yes | string | Five-digit player id in the file name. Example: 68074 (id 68074, Carlos Alcaraz). |
Successful responses are JPEG bytes (Content-Type: image/jpeg), the same image shown in the RapidAPI Image tab.
Response Properties
| Field | Type | Description |
|---|---|---|
Content-Type | string | image/jpeg |
Body | binary | The photograph. Do not parse this response as JSON. |