API Reference
Fixtures
The Fixtures module provides access to today's scheduled matches and upcoming fixtures. Filter by date, date range, tournament, player, or retrieve head-to-head fixture history between two players.
Tour type required
All fixture endpoints require a
{type} path parameter. Use atp for men's matches and wta for women's matches.
Endpoint Summary
| Method | Path | Description |
|---|---|---|
| GET | /tennis/v2/{type}/fixtures | Today's upcoming fixtures |
| GET | /tennis/v2/{type}/fixtures/{date} | Fixtures for a specific date |
| GET | /tennis/v2/{type}/fixtures/{startdate}/{enddate} | Fixtures within a date range |
| GET | /tennis/v2/{type}/fixtures/tournament/{tournamentId} | Fixtures for a tournament |
| GET | /tennis/v2/{type}/fixtures/player/{playerId} | Fixtures for a player |
| GET | /tennis/v2/{type}/fixtures/h2h/{player1Id}/{player2Id} | H2H fixture history |
How Fixtures Work
The database maintains two completely separate tables for match data:
| Table | Purpose | Result field | player1 convention |
|---|---|---|---|
Today (ATP/WTA) |
Live & upcoming schedule â what the Fixtures endpoints query | Always "" (empty string) for upcoming matches. The API filters out any row where result is not empty, so you only receive truly unplayed fixtures. |
First-listed player. No winner/loser convention yet. |
Game (ATP/WTA) |
Complete historical match archive â used by H2H and past-matches endpoints | Score string e.g. "6-3 6-4" |
Always the winner. player2 is always the loser. This is a strict convention across the entire archive. |
player1 â "home team"
In historical data (H2H matches, past results)
player1 is always the winner. In upcoming fixtures from the Today table, it is simply the first-listed player with no implied advantage.
Today's Fixtures
GET
/tennis/v2/{type}/fixtures
Returns today's upcoming ATP or WTA fixtures
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type Required |
string | Tour: atp or wta |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
include Optional |
string | Comma-separated relations to load. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h.Example: include=round,tournament.court,h2h |
filter Optional |
string | Semicolon-separated filters in Key:value format. Available filters:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize Optional |
integer | Results per page. Default: 10. |
pageNo Optional |
integer | Page number, 1-indexed. Default: 1. Use hasNextPage in the response to check for more pages. |
Example Request
cURL
curl --request GET \
--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/fixtures' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'
Example Response
JSON
[
{
"id": 482910,
"date": "2025-06-02T10:00:00.000Z",
"timeGame": null,
"result": "",
"live": null,
"complete": null,
"draw": 1,
"player1Id": 104925,
"player2Id": 106421,
"tournamentId": 8871,
"roundId": 3,
"seed1": "3",
"seed2": "1",
"odd1": "2.20",
"odd2": "1.65",
"player1": {
"id": 104925,
"name": "Carlos Alcaraz",
"countryAcr": "ESP"
},
"player2": {
"id": 106421,
"name": "Jannik Sinner",
"countryAcr": "ITA"
},
"tournament": {
"id": 8871,
"name": "Roland Garros",
"courtId": 2,
"court": { "id": 2, "name": "Clay" },
"rank": { "id": 1, "name": "Grand Slam" }
},
"round": { "id": 3, "name": "Quarter-Final" },
"h2h": { "player1AllWins": 5, "player2AllWins": 8 }
}
]
Response Properties
| Property | Type | Description |
|---|---|---|
id | integer | Unique fixture row ID in the Today table. |
date | datetime | Scheduled match date/time as ISO 8601 UTC string. Treat as UTC â no timezone offset is applied. |
timeGame | datetime | null | Secondary timestamp â represents the last update time or an alternate on-court time when date is a day-level value only. Usually null. |
result | string | Always an empty string "" for upcoming fixtures. The API strictly filters to result = '' â once a score is written here the row is excluded from responses. |
live | string | null | null for pre-match fixtures. Gets populated with a live score or status when the match is in progress. The API filters to live IS NULL, so in-progress matches are also excluded. |
complete | integer | null | null = match not yet played. Set to a non-null integer once the match finishes. |
draw | integer | Draw type: distinguishes main draw, qualifying draw, and doubles draw. Use this to group fixtures by draw. |
player1Id / player2Id | integer | Foreign keys into the Player table. Pass these to Players or H2H endpoints. |
player1 / player2 | object | Embedded player summary: { id, name, countryAcr }. Saves a separate player lookup for basic display. |
seed1 / seed2 | string | null | Tournament seeding as a string. Numeric seeds ("1"â"32") or special codes: "WC" wild card, "Q" qualifier, "LL" lucky loser, "PR" protected ranking. |
odd1 / odd2 | string | null | Pre-match decimal (European) odds for each player, stored as a string (e.g. "1.75"). null when no odds are available. |
tournamentId | integer | Foreign key to the Tournament table. Use with Tournaments endpoints. |
tournament | object | null | Embedded tournament details: id, name, date, courtId, rankId, countryAcr, plus nested court { id, name } and rank { id, name }. |
roundId | integer | Foreign key to the Round lookup table. Typical values: 1 = Final, 2 = Semi-Final, 3 = QF, 4 = R16, 5 = R32, 6 = R64, 7 = R128. |
round | object | null | Embedded round: { id, name }, e.g. { id: 3, name: "Quarter-Final" }. |
h2h | object | null | Pre-computed all-time H2H win counts: { player1AllWins, player2AllWins }. Always aligned to the player order in this fixture â values are auto-swapped by the API if the stored record has the players in the opposite order. |
Fixtures by Date
GET
/tennis/v2/{type}/fixtures/{date}
Returns all fixtures scheduled on a specific date
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type Required |
string | atp or wta |
date Required |
date | Target date in YYYY-MM-DD format. Example: 2025-06-02 |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
include Optional |
string | Comma-separated relations to load. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h.Example: include=round,tournament.court,h2h |
filter Optional |
string | Semicolon-separated filters in Key:value format. Available filters:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize Optional |
integer | Results per page. Default: 10. |
pageNo Optional |
integer | Page number, 1-indexed. Default: 1. Use hasNextPage in the response to check for more pages. |
Example Request
cURL
curl --request GET \
--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/fixtures/2025-06-02' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'
Returns an array of fixture objects â same structure as Today's Fixtures above.
Fixtures by Date Range
GET
/tennis/v2/{type}/fixtures/{startdate}/{enddate}
Returns fixtures scheduled between two dates (inclusive)
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type Required |
string | atp or wta |
startdate Required |
date | Start date in YYYY-MM-DD format. |
enddate Required |
date | End date in YYYY-MM-DD format. Must be after startdate. |
Date order validation
The API validates that
enddate is strictly after startdate. Providing equal or reversed dates returns a 400 Bad Request.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
include Optional |
string | Comma-separated relations to load. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h.Example: include=round,tournament.court,h2h |
filter Optional |
string | Semicolon-separated filters in Key:value format. Available filters:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize Optional |
integer | Results per page. Default: 10. |
pageNo Optional |
integer | Page number, 1-indexed. Default: 1. Use hasNextPage in the response to check for more pages. |
Example Request
cURL
curl --request GET \
--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/fixtures/2025-06-01/2025-06-07' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'
Returns { data: [...], hasNextPage } â each item in data is a fixture object with the same structure as Today's Fixtures above.
Fixtures by Tournament
GET
/tennis/v2/{type}/fixtures/tournament/{tournamentId}
Returns all fixtures belonging to a specific tournament
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type Required |
string | atp or wta |
tournamentId Required |
integer | Tournament ID (âĨ 1). Obtain from the Tournaments module. |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
include Optional |
string | Comma-separated relations to load. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h.Example: include=round,tournament.court,h2h |
filter Optional |
string | Semicolon-separated filters in Key:value format. Available filters:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize Optional |
integer | Results per page. Default: 10. |
pageNo Optional |
integer | Page number, 1-indexed. Default: 1. Use hasNextPage in the response to check for more pages. |
Example Request
cURL
curl --request GET \
--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/fixtures/tournament/8871' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'
Returns { data: [...], hasNextPage } â same fixture object structure as Today's Fixtures.
Fixtures by Player
GET
/tennis/v2/{type}/fixtures/player/{playerId}
Returns upcoming scheduled fixtures involving a specific player
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type Required |
string | atp or wta |
playerId Required |
integer | Player ID (âĨ 1). Obtain from the Players module. |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
include Optional |
string | Comma-separated relations to load. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h.Example: include=round,tournament.court,h2h |
filter Optional |
string | Semicolon-separated filters in Key:value format. Available filters:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize Optional |
integer | Results per page. Default: 10. |
pageNo Optional |
integer | Page number, 1-indexed. Default: 1. Use hasNextPage in the response to check for more pages. |
Example Request
cURL
curl --request GET \
--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/fixtures/player/104925' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'
Returns { data: [...], hasNextPage } â same fixture object structure as Today's Fixtures.
H2H Fixture History
GET
/tennis/v2/{type}/fixtures/h2h/{player1Id}/{player2Id}
Returns the historical match fixtures between two players
Path Parameters
| Parameter | Type | Description |
|---|---|---|
type Required |
string | atp or wta |
player1Id Required |
integer | First player ID (âĨ 1). |
player2Id Required |
integer | Second player ID (âĨ 1). |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
include Optional |
string | Comma-separated relations to load. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h.Example: include=round,tournament.court,h2h |
filter Optional |
string | Semicolon-separated filters in Key:value format. Available filters:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize Optional |
integer | Results per page. Default: 10. |
pageNo Optional |
integer | Page number, 1-indexed. Default: 1. Use hasNextPage in the response to check for more pages. |
Example Request
cURL
curl --request GET \
--url 'https://tennis-api-atp-wta-itf.p.rapidapi.com/tennis/v2/atp/fixtures/h2h/104925/106421' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: tennis-api-atp-wta-itf.p.rapidapi.com'
Example Response
JSON
[
{
"id": 390145,
"date": "2024-11-17T14:00:00.000Z",
"result": "6-4 6-3",
"player1Id": 104925,
"player2Id": 106421,
"tournamentId": 7201,
"roundId": 1,
"player1": { "id": 104925, "name": "Carlos Alcaraz", "countryAcr": "ESP" },
"player2": { "id": 106421, "name": "Jannik Sinner", "countryAcr": "ITA" }
}
]
Historical data: player1 = winner
This endpoint queries the Game archive (historical matches), not the Today table. In historical data
player1 is always the winner and player2 is always the loser â the response above shows Alcaraz defeating Sinner.
Response Properties
| Property | Type | Description |
|---|---|---|
id | integer | Unique match record ID. |
date | datetime | Match date as ISO 8601 UTC string. |
result | string | Score string for completed matches, e.g. "6-4 6-3". Each space-separated token is a set score. |
player1Id / player2Id | integer | Player IDs. In historical archive data player1 is always the winner. |
player1 / player2 | object | Embedded player summary: { id, name, countryAcr }. |
tournamentId | integer | Foreign key to the Tournament table. |
roundId | integer | Round ID for this match (1 = Final, 2 = Semi-Final, 3 = QF, etc.). |
hasNextPage | boolean | Pagination flag. true if more results exist beyond the current page. Use pageNo query parameter to fetch the next page. |