Overview
API Schema & Endpoint Guide
Find the right endpoint by starting with what you want to do. Base host: tennis-api-atp-wta-itf.p.rapidapi.com. atp= men's tennis (ATP, Challenger, ITF). wta = women's (WTA, ITF). There is no separate itf tour value.
Start with Getting Started for authentication, headers, pagination and date formats. Use this page when you need to decide which endpoint or delivery method to use.
What do you want to do?
| I want toโฆ | Go to | Start with | Plan |
|---|---|---|---|
| Find scheduled matches | Upcoming Matches | GET /tennis/v2/{atp|wta}/fixtures | FREE+ (FREE = PRO payload) |
| Upcoming matches with predictions and odds | Upcoming Matches (With Predictions & Odds Data) | GET /tennis/v2/upcoming/matches/{type} | All plans; modelPrediction (model win %) ULTRA / MEGA |
| Current state of matches happening now | Live Scores, Stats & Odds โ REST | GET /tennis/v2/extend/api/events/live | All plans |
| Stream live scores/odds without polling | Real-time (Socket.IO) | GET /tennis/v2/extend/api/ws-token | MEGA |
| Completed matches for a date or range | Results & Historical Data | GET /tennis/v2/{type}/results/{date} | All plans |
| Player profile or career statistics | Player Profiles & Career Stats | GET /tennis/v2/{type}/player/profile/{id} | All plans |
| Compare two players historically | Head-to-Head Stats & Analysis | GET /tennis/v2/{type}/h2h/info/{p1}/{p2} | All plans |
| ATP or WTA rankings | Rankings | GET /tennis/v2/{type}/ranking/singles | All plans |
| Tournament information, seasons or draws | Tournaments & Draws | Tournament Info / Draw | All plans |
| Tournaments by season, date or current activity | Tours Calendar (Men & Women) | Year calendar / /calendar/active | All plans |
| Possible future pairings | Potential Matchups | GET /tennis/v2/potential-fixtures/{type} | All plans |
| Names and reusable lookup values | Reference Data & Search | GET /tennis/v2/search | All plans |
Follow the lifecycle of a match
UPCOMING MATCHES โ UPCOMING + PREDICTIONS & ODDS โ LIVE: REST or Socket.IO โ RESULTS & HISTORICAL DATA
1. Upcoming Matches
Use this section to find scheduled matches and factual match/H2H data โ by date, date range, tournament, player, matchup and round. 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).
GET /tennis/v2/{type}/fixtures
GET /tennis/v2/{type}/fixtures/{date}
GET /tennis/v2/{type}/fixtures/{startDate}/{endDate}
GET /tennis/v2/{type}/fixtures/tournament/{tournamentId}
GET /tennis/v2/{type}/fixtures/player/{playerId}
GET /tennis/v2/{type}/fixtures/h2h/{player1Id}/{player2Id}Match IDs differ between the schedule, the live service and the archive: follow the returned links instead of matching by name. Fixture, upcoming and H2H upcoming rows carry links.live (/tennis/v2/matches/{matchId}/live?type=atp|wta), which returns the current state and the live eventId for live odds and Socket.IO.
Open Upcoming Matches documentation โ
2. Upcoming Matches (With Predictions & Odds Data)
Use this section when you need upcoming matches enriched with basic bookmaker odds and prediction-related data. Available on all plans; only the SportsAPI365 model win probabilities (modelPrediction) require ULTRA or MEGA. Keep these concepts separate:
predictionSummaryโ bookmaker-implied view from headline oddsmodelPredictionโ model win probabilities (separate object)preMatchOddsโ bookmaker odds detail
GET /tennis/v2/upcoming/matches
GET /tennis/v2/upcoming/matches/{type}
GET /tennis/v2/upcoming/match-prediction/{type}/{player1}/{player2} # MEGA only
GET /tennis/v2/aggregate/head-to-head/prediction/raw?player1=โฆ&player2=โฆ # MEGA only
GET /tennis/v2/aggregate/head-to-head/model/prediction?player1=โฆ&player2=โฆ # ULTRA / MEGA
GET /tennis/v2/upcoming/matchodds/{type} # Match Odds (All Markets)Open Predictions & Odds documentation โ
3. Live Scores, Stats & Odds
REST for current state; Socket.IO (MEGA) for push without polling. Live REST uses its own event id โ do not send a core fixture ID to live odds endpoints.
GET /tennis/v2/extend/api/events/live
GET /tennis/v2/extend/api/ws-token # MEGA โ connect https://live.matchstat.com| Need | Use |
|---|---|
| Load the current live board | REST |
| One match latest score/stats/odds on demand | REST |
| Continuously update a live UI / avoid polling | Socket.IO |
Open Live REST โ ยท Open Socket.IO โ
4. Results & Historical Data
GET /tennis/v2/{type}/results/{date}
GET /tennis/v2/{type}/results/{startDate}/{endDate}
GET /tennis/v2/{type}/results/player/{playerId}
GET /tennis/v2/{type}/results/tournament/{seasonId}Past champions / Grand Slam winners live here โ not under Tours Calendar (Men & Women). Open Results โ
Player and matchup data
5. Player Profiles & Career Stats
Find a player's numeric ID with search: GET /tennis/v2/search?search=Jannik Sinner returns results grouped by category (player_atp, player_wta, tournament_atp, tournament_wta); take the player's id (here 47275) and use it in the profile and H2H routes. Rankings and fixtures also carry player IDs. Open Players โ
6. Head-to-Head Stats & Analysis
Historical / descriptive comparison. Forward-looking model predictions belong in Upcoming Matches (With Predictions & Odds Data). Open H2H โ
Rankings and tournament data
7. Rankings
Historical ranking snapshots take DD.MM.YYYY or YYYY-MM-DD; match dates use YYYY-MM-DD. Open Rankings โ
8. Tournaments & Draws
โWhen is it happening?โ โ Tours Calendar (Men & Women). โTell me about this tournament or draw.โ โ Tournaments & Draws.
9. Tours Calendar (Men & Women)
Answers โwhat tournaments are happening when?โ
GET /tennis/v2/{type}/tournament/calendar/{year}
GET /tennis/v2/calendar/active
GET /tennis/v2/calendar/{type}/filtersActive tournaments use tournament start dates (no stored end date) in the tennis week for the requested day. tour is atp, wta or both (default; all also works). Default omits Qualifying rows; pass qualifying=yes (or qualify=true) for qualifying event names and IDs.
GET /tennis/v2/calendar/active?tour=atp
GET /tennis/v2/calendar/active?tour=wta&date=2024-07-15
GET /tennis/v2/calendar/active?tour=atp&startDate=2026-09-21&endDate=2026-09-27
GET /tennis/v2/calendar/active?tour=atp&qualifying=yesOpen Tours Calendar (Men & Women) โ
10. Potential Matchups
Possible future pairings โ not confirmed fixtures. Open Potential Matchups โ
11. Reference Data & Search
GET /tennis/v2/search
GET /tennis/v2/countries
GET /tennis/v2/court
GET /tennis/v2/round
GET /tennis/v2/rankingUnderstanding identifiers
- Player ID โ numeric; from fixtures, rankings, player lists.
- Tournament / season ID โ one year-edition; from calendar, then reuse on info / results / fixtures.
- Core fixture ID โ scheduled-match row from Upcoming Matches.
- Live event id โ live scores, timeline, live odds.
- Live matchId โ
player1Id-player2Id-tournamentId-roundIdfor point-by-point.
Match IDs differ between the schedule, the live service and the archive: follow the returned links instead of matching by name. Fixture, upcoming and H2H upcoming rows carry links.live (/tennis/v2/matches/{matchId}/live?type=atp|wta), which returns the current state and the live eventId for live odds and Socket.IO.
Plan access at a glance
| Capability | Typical access |
|---|---|
| Factual Upcoming Matches | All plans (FREE / PRO / ULTRA / MEGA) |
| H2H on fixtures when available | FREE+ / all plans |
| Upcoming with predictions and odds | All plans |
| Pre-match odds (all markets) | All plans |
| Live scores, statistics, point-by-point, timeline, live odds | All plans |
SportsAPI365 model win probabilities (modelPrediction, H2H Model Prediction) | ULTRA / MEGA |
| Socket.IO real-time push | MEGA only |
| Written predictions (Match Prediction & Analysis Paragraph, H2H Prediction Analysis) | MEGA only |
Field-level restrictions (e.g. modelPrediction on FREE / PRO) return 200 and keep the field visible with the message "Upgrade Plan to see this". Restricted endpoints (MEGA only, or H2H Model Prediction on ULTRA / MEGA) return 403:
{
"error": "plan_restricted",
"message": "Your current plan does not include access to this data. Please upgrade via RapidAPI.",
"requiredPlan": "MEGA",
"upgradeUrl": "https://rapidapi.com/jjrm365-kIFr3Nx_odV/api/tennis-api-atp-wta-itf"
}The message names where you subscribed: RapidAPI subscribers see "โฆPlease upgrade via RapidAPI."; SportsAPI365.com subscribers see "โฆPlease upgrade via SportsAPI365.com." with the matching upgradeUrl.
Reusable response schemas
These objects appear across many endpoints. Each endpoint's Response Properties table lists every field of its example; the definitions below are the shared meaning.
Player object
| Field | Type | Meaning |
|---|---|---|
id | integer | Numeric player ID (same IDs across all endpoints). |
name | string | Display name. Doubles teams contain /. |
countryAcr | string | Three-letter country code. |
birthday | string | null | Date of birth (ISO-8601), where returned. |
country.name / country.acronym | string | Country, on routes that nest it. |
seed / odd / image / image_p_name | string | Only on routes that return them: seed, pre-match odds, photo paths. |
Tournament object
| Field | Type | Meaning |
|---|---|---|
id | integer | Tournament season ID (one edition of an event). |
name | string | Tournament name. |
date / startDate | string | Start date: ISO-8601 (date) or YYYY-MM-DD (startDate) โ same day. |
rankId | integer | Level (TourRank): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, โฆ |
courtId / court | integer / object | Surface ID, and court: { id, name } when included. |
rank / round | object | Level as { id, name } (round is the legacy key name). |
countryAcr / country | string / object | Country code, and { name, acronym } when included. |
Plan-restricted field
| Field | Type | Meaning |
|---|---|---|
available | boolean | Always false. |
error | string | Always "plan_restricted". |
message | string | Upgrade message, e.g. "Upgrade Plan to see this". |
requiredPlan | string | Lowest plan that includes the field: ULTRA or MEGA. |
upgradeUrl | string | Where to upgrade, where returned. |
LiveEvent object (REST and Socket.IO)
| Field | Type | Meaning |
|---|---|---|
id | string | Live event ID โ use with live-score, timeline, odds and join-event. |
matchId | string | player1Id-player2Id-tournamentId-roundId bridge to the core API (point-by-point by IDs). |
name / participant1 / participant2 | string | Match name and the two players' names. |
league / tournament.name | string | Tournament name as shown by the live feed. |
score | string | Set scores so far, comma-separated (e.g. 6-4,3-2). |
points | string | Points in the current game (e.g. 30-15, 40-A). |
indicator | string | Server: "1,0" player 1, "0,1" player 2. |
status | string | InPlay, Not Started or Ended. |
tourType | string | atp or wta. |
startTimestamp | integer | Scheduled start, Unix seconds. |
stats / timeline | object / array | Only on event-by-players and live-score. |
Odds entry (live odds routes)
| Field | Type | Meaning |
|---|---|---|
od1 / od2 | string | Decimal odds for outcome 1 (player 1 / over) and outcome 2 (player 2 / under). |
odx | string | null | Draw price where a market has one; otherwise null. |
line | string | null | Handicap or total line; empty or null when not applicable. |
bookmaker / bookmakerId | string / integer | Bookmaker (see /bookmakers/all). |
od1Bookmaker / od2Bookmaker / odxBookmaker | string | On best-odds routes: who offers each best price. |
updatedAt / addTime / sourceAddTime | string | integer | When the bookmaker published the price, Unix seconds. |
Point-by-point set and game
| Field | Type | Meaning |
|---|---|---|
sets[].setNumber | integer | Set number, from 1. |
sets[].setScore | string | Final set score (e.g. 6-3); empty while in progress. |
sets[].games[].gameNumber | integer | Game number within the set. |
sets[].games[].server | integer | 1 = player 1 served, 2 = player 2, 0 = unknown. |
sets[].games[].tiebreak | boolean | true for a tiebreak game. |
sets[].games[].finalScore | string | Games score in the set after this game (e.g. 3-2). |
sets[].games[].fifteens_content | string | Score after each point, comma-separated, as player1:player2. BP marks a break point; in tiebreaks * marks the server (*1:0). |
Statistics metric (match statistics)
| Field | Type | Meaning |
|---|---|---|
statistics.{period} | object | 1ST, 2ND, โฆ = that set; ALL = whole match. |
โฆ{period}.{category} | object | games, points, return, service, miscellaneous. |
โฆ{category}.{metric}.player1 / player2 | object | The metric for each player. |
โฆ.value | integer | The count (aces, points won, serves landed, โฆ). |
โฆ.total / โฆ.percentage | integer / number | Ratio metrics only: what value is out of, and value as a percentage. |
Common recipes
| Goal | Request |
|---|---|
| Today's men's singles | GET /tennis/v2/atp/fixtures?filter=PlayerGroup:singles |
| Men's upcoming with predictions / odds | GET /tennis/v2/upcoming/matches/atp |
| Current live matches (REST) | GET /tennis/v2/extend/api/events/live |
| Start Socket.IO | GET /tennis/v2/extend/api/ws-token โ https://live.matchstat.com |
| Men's tournaments active now | GET /tennis/v2/calendar/active?tour=atp |