API Reference
Upcoming Matches (Fixtures)
Scheduled men's and women's matches for today, a date, a date range, a tournament, a player or a matchup. Dataset to query: atp= men's tennis dataset across all supported levels, not only the ATP Tour. wta= women's tennis dataset across all supported levels, not only the WTA Tour. Supported coverage can include Grand Slams, ATP/WTA events, Challengers and ITF events. There is no separate itf type value.
Use this section to find scheduled matches and factual match/H2H data: by date, date range, tournament, player, matchup and round, plus factual H2H. Available on all plans: FREE / PRO / ULTRA / MEGA.
If you also need pre-match odds or prediction enrichment, use Upcoming Matches (With Predictions & Odds Data).
Do not assume match IDs are interchangeable between Upcoming, Predictions, and Live. To match a live event with an upcoming fixture or prediction record, use the player IDs or names together with tournament and date information.
Use date / startTime (ISO-8601 UTC) for clocks. timeGame is a legacy field and is often null — that does not mean the match has no start time. See Getting Started → Match start times.
Which endpoint to use
| What you want | Call | What you get |
|---|---|---|
| Today's schedule, a date, a range, a tournament, or a player | The fixtures routes on this page | result is empty until the match is played. player1 is the first-listed player, not the winner. |
| Finished scores, past matches, or H2H | Results by date, Past matches, and H2H | Score string e.g. "6-3 6-4". player1 is the winner; player2 is the loser. |
The default list includes doubles (names contain /). Restrict to singles with filter=PlayerGroup:singles — that is a filter value, not a separate query key. ITF and Challenger events are inside the atp / wta datasets; filter with TourRank after including tournament. Challenger/ITF > $10K is TourRank:1; Grand Slam is TourRank:4 — see GET /ranking. Passing tour_type=itf returns 400.
Copy-this recipes
| Goal | Request |
|---|---|
| Today’s men’s singles | /tennis/v2/atp/fixtures?filter=PlayerGroup:singles |
| Today’s women’s doubles | /tennis/v2/wta/fixtures?filter=PlayerGroup:doubles |
| Fixtures for a player | /tennis/v2/atp/fixtures/player/68074?filter=PlayerGroup:singles |
| Grand Slam calendar | /tennis/v2/atp/tournament/calendar/2026?filter=TourRank:4&pageSize=20 |
Today's Fixtures
/tennis/v2/{atp|wta}/fixturesatp. Use wtafor the women's dataset.Returns upcoming men's or women's fixtures from today onward. Drawn matches whose order of play is not published yet are included with date / startTime null (listed after dated matches); use Fixtures by Date for a single day. The example uses include=round,tournament,tournament.court,tournament.rank,tournament.country,h2h to show the full row: h2h is present only when the two players have met before.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 extras. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h. If you also need pre-match odds or prediction enrichment, use Upcoming Matches (With Predictions & Odds Data) (all plans; modelPrediction requires ULTRA or MEGA).Example: include=round,tournament.court,h2h |
filter | No | string | Semicolon-separated Key:value filters. Available:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize | No | integer | Results per page. Default: 10. 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 | Schedule row ID for this fixture (same value as matchId on core fixtures). |
matchId | integer | Same as id. Use with GET /tennis/v2/ms-api/matches/{matchId}/… detail aliases. Not the live hyphenated matchId. |
date | string | Scheduled start as ISO-8601 UTC (…Z). This is the canonical start time when present. |
startTime | string | Same UTC instant as date (additive alias for clearer discovery). |
timeGame | string | Legacy start field. Prefer date/startTime for clocks; may be null or mirror date when set. |
player1Id / player2Id | integer | Numeric player IDs. On fixtures, player1 is only the first-listed player — not the winner. |
tournamentId | integer | Season/event ID for this week’s tournament edition. |
roundId | integer | Round code. Resolve labels with GET /tennis/v2/round. |
seed1 / seed2 | string | Seed or entry tag when set (e.g. 2, WC, Q). Null if unseeded. |
live | string | null if the match has not started. A string is the in-progress score. |
player1 / player2 | object | Nested player: id, name, countryAcr. Doubles names contain /. |
h2h | object | Only with include=h2h, and omitted when the players have never met. Factual head-to-head wins: player1AllWins, player2AllWins (player1 vs player2 perspective). Not prediction data. |
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 | 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. |
data[].h2h.player1AllWins | number | Career head-to-head wins of player 1 against player 2 (all levels). |
data[].h2h.player2AllWins | number | Career head-to-head wins of player 2 against player 1 (all levels). |
data[].round | object | Round: { id, name }. |
data[].round.id | number | Round ID. |
data[].round.name | string | Round label, e.g. "1/4", "Final". |
page | number | Current page number (1-based). |
limit | number | Items per page. |
Fixtures by Date
/tennis/v2/{atp|wta}/fixtures/{date_only}atp. Use wtafor the women's dataset.Returns fixtures scheduled on a specific date (YYYY-MM-DD). Same item shape as today's fixtures (paged with pageNo / pageSize).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. |
date_only | Yes | string | Target date in YYYY-MM-DD format. Example: 2026-09-15. |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extras. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h. If you also need pre-match odds or prediction enrichment, use Upcoming Matches (With Predictions & Odds Data) (all plans; modelPrediction requires ULTRA or MEGA).Example: include=round,tournament.court,h2h |
filter | No | string | Semicolon-separated Key:value filters. Available:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize | No | integer | Results per page. Default: 10. 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 | Schedule row ID for this fixture (same value as matchId on core fixtures). |
matchId | integer | Same as id. Use with GET /tennis/v2/ms-api/matches/{matchId}/… detail aliases. Not the live hyphenated matchId. |
date | string | Scheduled start as ISO-8601 UTC (…Z). This is the canonical start time when present. |
startTime | string | Same UTC instant as date (additive alias for clearer discovery). |
timeGame | string | Legacy start field. Prefer date/startTime for clocks; may be null or mirror date when set. |
player1Id / player2Id | integer | Numeric player IDs. On fixtures, player1 is only the first-listed player — not the winner. |
tournamentId | integer | Season/event ID for this week’s tournament edition. |
roundId | integer | Round code. Resolve labels with GET /tennis/v2/round. |
seed1 / seed2 | string | Seed or entry tag when set (e.g. 2, WC, Q). Null if unseeded. |
live | string | null if the match has not started. A string is the in-progress score. |
player1 / player2 | object | Nested player: id, name, countryAcr. Doubles names contain /. |
h2h | object | Only with include=h2h, and omitted when the players have never met. Factual head-to-head wins: player1AllWins, player2AllWins (player1 vs player2 perspective). Not prediction data. |
page | number | Current page number (1-based). |
limit | number | Items per page. |
Fixtures by Date Range
/tennis/v2/{atp|wta}/fixtures/{start_date_range}/{end_date_range}atp. Use wtafor the women's dataset.Returns fixtures scheduled between two dates (inclusive). End date must be after start date.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. |
start_date_range | Yes | string | Start date in YYYY-MM-DD format. Invalid formats return 400 Bad Request. |
end_date_range | Yes | string | End date in YYYY-MM-DD format. Must be after start_date_range. Equal or reversed dates return 400 Bad Request. |
end_date_range must be strictly after start_date_range. Equal or reversed dates return 400.Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extras. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h. If you also need pre-match odds or prediction enrichment, use Upcoming Matches (With Predictions & Odds Data) (all plans; modelPrediction requires ULTRA or MEGA).Example: include=round,tournament.court,h2h |
filter | No | string | Semicolon-separated Key:value filters. Available:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize | No | integer | Results per page. Default: 10. 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 | Schedule row ID for this fixture (same value as matchId on core fixtures). |
matchId | integer | Same as id. Use with GET /tennis/v2/ms-api/matches/{matchId}/… detail aliases. Not the live hyphenated matchId. |
date | string | Scheduled start as ISO-8601 UTC (…Z). This is the canonical start time when present. |
startTime | string | Same UTC instant as date (additive alias for clearer discovery). |
timeGame | string | Legacy start field. Prefer date/startTime for clocks; may be null or mirror date when set. |
player1Id / player2Id | integer | Numeric player IDs. On fixtures, player1 is only the first-listed player — not the winner. |
tournamentId | integer | Season/event ID for this week’s tournament edition. |
roundId | integer | Round code. Resolve labels with GET /tennis/v2/round. |
seed1 / seed2 | string | Seed or entry tag when set (e.g. 2, WC, Q). Null if unseeded. |
live | string | null if the match has not started. A string is the in-progress score. |
player1 / player2 | object | Nested player: id, name, countryAcr. Doubles names contain /. |
h2h | object | Only with include=h2h, and omitted when the players have never met. Factual head-to-head wins: player1AllWins, player2AllWins (player1 vs player2 perspective). Not prediction data. |
page | number | Current page number (1-based). |
limit | number | Items per page. |
Fixtures by Tournament
/tennis/v2/{atp|wta}/fixtures/tournament/{tournament_id}atp. Use wtafor the women's dataset.Returns fixtures for one tournament season ID (the year-edition from the calendar, not the tournament name).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. |
tournament_id | Yes | integer | Tournament ID must be numeric value >= 1 |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extras. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h. If you also need pre-match odds or prediction enrichment, use Upcoming Matches (With Predictions & Odds Data) (all plans; modelPrediction requires ULTRA or MEGA).Example: include=round,tournament.court,h2h |
filter | No | string | Semicolon-separated Key:value filters. Available:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize | No | integer | Results per page. Default: 10. 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. |
Same envelope as today's fixtures.
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player.
| 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 | Schedule row ID for this fixture (same value as matchId on core fixtures). |
matchId | integer | Same as id. Use with GET /tennis/v2/ms-api/matches/{matchId}/… detail aliases. Not the live hyphenated matchId. |
date | string | Scheduled start as ISO-8601 UTC (…Z). This is the canonical start time when present. |
startTime | string | Same UTC instant as date (additive alias for clearer discovery). |
timeGame | string | Legacy start field. Prefer date/startTime for clocks; may be null or mirror date when set. |
player1Id / player2Id | integer | Numeric player IDs. On fixtures, player1 is only the first-listed player — not the winner. |
tournamentId | integer | Season/event ID for this week’s tournament edition. |
roundId | integer | Round code. Resolve labels with GET /tennis/v2/round. |
seed1 / seed2 | string | Seed or entry tag when set (e.g. 2, WC, Q). Null if unseeded. |
live | string | null if the match has not started. A string is the in-progress score. |
player1 / player2 | object | Nested player: id, name, countryAcr. Doubles names contain /. |
h2h | object | Only with include=h2h, and omitted when the players have never met. Factual head-to-head wins: player1AllWins, player2AllWins (player1 vs player2 perspective). Not prediction data. |
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. |
page | number | Current page number (1-based). |
limit | number | Items per page. |
Fixtures by Player
/tennis/v2/{atp|wta}/fixtures/player/{player_id}atp. Use wtafor the women's dataset.Returns upcoming fixtures for one player. Path needs a numeric player ID, not a display name.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 | integer |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extras. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h. If you also need pre-match odds or prediction enrichment, use Upcoming Matches (With Predictions & Odds Data) (all plans; modelPrediction requires ULTRA or MEGA).Example: include=round,tournament.court,h2h |
filter | No | string | Semicolon-separated Key:value filters. Available:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize | No | integer | Results per page. Default: 10. 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. |
Same envelope as today's fixtures.
Response Properties
Shared objects in this response (defined once in Reusable response schemas): Player.
| 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 | Schedule row ID for this fixture (same value as matchId on core fixtures). |
matchId | integer | Same as id. Use with GET /tennis/v2/ms-api/matches/{matchId}/… detail aliases. Not the live hyphenated matchId. |
date | string | Scheduled start as ISO-8601 UTC (…Z). This is the canonical start time when present. |
startTime | string | Same UTC instant as date (additive alias for clearer discovery). |
timeGame | string | Legacy start field. Prefer date/startTime for clocks; may be null or mirror date when set. |
player1Id / player2Id | integer | Numeric player IDs. On fixtures, player1 is only the first-listed player — not the winner. |
tournamentId | integer | Season/event ID for this week’s tournament edition. |
roundId | integer | Round code. Resolve labels with GET /tennis/v2/round. |
seed1 / seed2 | string | Seed or entry tag when set (e.g. 2, WC, Q). Null if unseeded. |
live | string | null if the match has not started. A string is the in-progress score. |
player1 / player2 | object | Nested player: id, name, countryAcr. Doubles names contain /. |
h2h | object | Only with include=h2h, and omitted when the players have never met. Factual head-to-head wins: player1AllWins, player2AllWins (player1 vs player2 perspective). Not prediction data. |
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. |
page | number | Current page number (1-based). |
limit | number | Items per page. |
Upcoming Fixtures Between Two Players by Player IDs
/tennis/v2/{atp|wta}/fixtures/h2h/{player1_id}/{player2_id}atp. Use wtafor the women's dataset.Returns current-board fixtures between two numeric player IDs (today/upcoming table), not the career H2H archive. Empty data is a valid 200 when that pair is not on the current board. Use /h2h/matches for completed meetings.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. |
player1_id | Yes | integer | First Player ID (≥ 1). |
player2_id | Yes | integer | Second Player ID (≥ 1). |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
include | No | string | Comma-separated extras. Available: round, tournament, tournament.court, tournament.rank, tournament.country, h2h. If you also need pre-match odds or prediction enrichment, use Upcoming Matches (With Predictions & Odds Data) (all plans; modelPrediction requires ULTRA or MEGA).Example: include=round,tournament.court,h2h |
filter | No | string | Semicolon-separated Key:value filters. Available:
filter=PlayerGroup:singles;TourCountry:USA,FRA |
pageSize | No | integer | Results per page. Default: 10. 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. |
Same list envelope as today's fixtures. player1 is the first-listed player, not the winner.
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 | Schedule row ID for this fixture (same value as matchId on core fixtures). |
matchId | integer | Same as id. Use with GET /tennis/v2/ms-api/matches/{matchId}/… detail aliases. Not the live hyphenated matchId. |
date | string | Scheduled start as ISO-8601 UTC (…Z). This is the canonical start time when present. |
startTime | string | Same UTC instant as date (additive alias for clearer discovery). |
timeGame | string | Legacy start field. Prefer date/startTime for clocks; may be null or mirror date when set. |
player1Id / player2Id | integer | Numeric player IDs. On fixtures, player1 is only the first-listed player — not the winner. |
tournamentId | integer | Season/event ID for this week’s tournament edition. |
roundId | integer | Round code. Resolve labels with GET /tennis/v2/round. |
seed1 / seed2 | string | Seed or entry tag when set (e.g. 2, WC, Q). Null if unseeded. |
live | string | null if the match has not started. A string is the in-progress score. |
player1 / player2 | object | Nested player: id, name, countryAcr. Doubles names contain /. |
h2h | object | Only with include=h2h, and omitted when the players have never met. Factual head-to-head wins: player1AllWins, player2AllWins (player1 vs player2 perspective). Not prediction data. |
page | number | Current page number (1-based). |
limit | number | Items per page. |