v2

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

MethodPathDescription
GET/tennis/v2/{type}/fixturesToday'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:

TablePurposeResult fieldplayer1 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

ParameterTypeDescription
type Required string Tour: atp or wta

Query Parameters

ParameterTypeDescription
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:
  • PlayerGroup:singles | doubles | both
  • TourRank:{id,id} — requires tournament in include
  • TourCourt:{id,id} — requires tournament in include
  • TourCountry:{USA,FRA} — requires tournament in include
Example: 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

PropertyTypeDescription
idintegerUnique fixture row ID in the Today table.
datedatetimeScheduled match date/time as ISO 8601 UTC string. Treat as UTC — no timezone offset is applied.
timeGamedatetime | nullSecondary timestamp — represents the last update time or an alternate on-court time when date is a day-level value only. Usually null.
resultstringAlways an empty string "" for upcoming fixtures. The API strictly filters to result = '' — once a score is written here the row is excluded from responses.
livestring | nullnull 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.
completeinteger | nullnull = match not yet played. Set to a non-null integer once the match finishes.
drawintegerDraw type: distinguishes main draw, qualifying draw, and doubles draw. Use this to group fixtures by draw.
player1Id / player2IdintegerForeign keys into the Player table. Pass these to Players or H2H endpoints.
player1 / player2objectEmbedded player summary: { id, name, countryAcr }. Saves a separate player lookup for basic display.
seed1 / seed2string | nullTournament seeding as a string. Numeric seeds ("1"–"32") or special codes: "WC" wild card, "Q" qualifier, "LL" lucky loser, "PR" protected ranking.
odd1 / odd2string | nullPre-match decimal (European) odds for each player, stored as a string (e.g. "1.75"). null when no odds are available.
tournamentIdintegerForeign key to the Tournament table. Use with Tournaments endpoints.
tournamentobject | nullEmbedded tournament details: id, name, date, courtId, rankId, countryAcr, plus nested court { id, name } and rank { id, name }.
roundIdintegerForeign key to the Round lookup table. Typical values: 1 = Final, 2 = Semi-Final, 3 = QF, 4 = R16, 5 = R32, 6 = R64, 7 = R128.
roundobject | nullEmbedded round: { id, name }, e.g. { id: 3, name: "Quarter-Final" }.
h2hobject | nullPre-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

ParameterTypeDescription
type Required string atp or wta
date Required date Target date in YYYY-MM-DD format. Example: 2025-06-02

Query Parameters

ParameterTypeDescription
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:
  • PlayerGroup:singles | doubles | both
  • TourRank:{id,id} — requires tournament in include
  • TourCourt:{id,id} — requires tournament in include
  • TourCountry:{USA,FRA} — requires tournament in include
Example: 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

ParameterTypeDescription
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

ParameterTypeDescription
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:
  • PlayerGroup:singles | doubles | both
  • TourRank:{id,id} — requires tournament in include
  • TourCourt:{id,id} — requires tournament in include
  • TourCountry:{USA,FRA} — requires tournament in include
Example: 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

ParameterTypeDescription
type Required string atp or wta
tournamentId Required integer Tournament ID (â‰Ĩ 1). Obtain from the Tournaments module.

Query Parameters

ParameterTypeDescription
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:
  • PlayerGroup:singles | doubles | both
  • TourRank:{id,id} — requires tournament in include
  • TourCourt:{id,id} — requires tournament in include
  • TourCountry:{USA,FRA} — requires tournament in include
Example: 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

ParameterTypeDescription
type Required string atp or wta
playerId Required integer Player ID (â‰Ĩ 1). Obtain from the Players module.

Query Parameters

ParameterTypeDescription
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:
  • PlayerGroup:singles | doubles | both
  • TourRank:{id,id} — requires tournament in include
  • TourCourt:{id,id} — requires tournament in include
  • TourCountry:{USA,FRA} — requires tournament in include
Example: 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

ParameterTypeDescription
type Required string atp or wta
player1Id Required integer First player ID (â‰Ĩ 1).
player2Id Required integer Second player ID (â‰Ĩ 1).

Query Parameters

ParameterTypeDescription
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:
  • PlayerGroup:singles | doubles | both
  • TourRank:{id,id} — requires tournament in include
  • TourCourt:{id,id} — requires tournament in include
  • TourCountry:{USA,FRA} — requires tournament in include
Example: 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

PropertyTypeDescription
idintegerUnique match record ID.
datedatetimeMatch date as ISO 8601 UTC string.
resultstringScore string for completed matches, e.g. "6-4 6-3". Each space-separated token is a set score.
player1Id / player2IdintegerPlayer IDs. In historical archive data player1 is always the winner.
player1 / player2objectEmbedded player summary: { id, name, countryAcr }.
tournamentIdintegerForeign key to the Tournament table.
roundIdintegerRound ID for this match (1 = Final, 2 = Semi-Final, 3 = QF, etc.).
hasNextPagebooleanPagination flag. true if more results exist beyond the current page. Use pageNo query parameter to fetch the next page.