Overview

Find the Right Endpoint

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.

New to the API?

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 toStart withPlan
Find upcoming matches, with H2H, pre-match odds and predictions where availableUpcoming MatchesGET /tennis/v2/upcoming/matches/{type}All plans; model win probabilities ULTRA / MEGA; written analysis MEGA
Current state of matches happening nowLive Scores, Stats & Odds โ€” RESTGET /tennis/v2/extend/api/events/liveAll plans
Stream live scores/odds without pollingReal-time (Socket.IO)GET /tennis/v2/extend/api/ws-tokenMEGA
Completed matches for a date or rangeResults & Historical DataGET /tennis/v2/{type}/results/{date}All plans
Player profile or career statisticsPlayer Profiles & Career StatsGET /tennis/v2/{type}/player/profile/{id}All plans
Compare two players historicallyHead-to-Head Stats & AnalysisGET /tennis/v2/{type}/h2h/info/{p1}/{p2}All plans
ATP or WTA rankingsRankingsGET /tennis/v2/{type}/ranking/singlesAll plans
Tournament information, seasons or drawsTournaments & DrawsTournament Info / DrawAll plans
Tournaments by season, date or current activityTours Calendar (Men & Women)Year calendar / /calendar/activeAll plans
Possible future pairingsPotential MatchupsGET /tennis/v2/potential-fixtures/{type}All plans
Names and reusable lookup valuesReference Data & SearchGET /tennis/v2/searchAll plans

Follow the lifecycle of a match

UPCOMING โ†’ LIVE: REST or Socket.IO โ†’ RESULTS & HISTORICAL

Odds and predictions are optional data within Upcoming, not another match stage.

1. Upcoming Matches

Find upcoming men's and women's singles and doubles matches, with filters for date, tournament, player, surface and competition level. Choose the additional details your application needs: player and tournament details, head-to-head records, pre-match odds and predictions where available. Keep these concepts separate:

  • predictionSummary โ€” bookmaker-implied view from headline odds
  • modelPrediction โ€” model win probabilities (separate object; ULTRA / MEGA)
  • 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}                             # Pre-Match Odds (All Markets)
Identifier note

Match IDs differ between the schedule, the live service and the archive: follow the returned links instead of matching by name. 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. 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
NeedUse
Load the current live boardREST
One match latest score/stats/odds on demandREST
Continuously update a live UI / avoid pollingSocket.IO

Open Live REST โ†’ ยท Open Socket.IO โ†’

3. 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

4. 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 upcoming matches also carry player IDs. Open Players โ†’

5. Head-to-Head Stats & Analysis

Historical / descriptive comparison. Forward-looking model predictions belong in Upcoming Matches. Open H2H โ†’

Rankings and tournament data

6. Rankings

Historical ranking snapshots take DD.MM.YYYY or YYYY-MM-DD; match dates use YYYY-MM-DD. Open Rankings โ†’

7. Tournaments & Draws

Rule of thumb

โ€œWhen is it happening?โ€ โ†’ Tours Calendar (Men & Women). โ€œTell me about this tournament or draw.โ€ โ†’ Tournaments & Draws.

8. 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}/filters

Active 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=yes

Open Tours Calendar (Men & Women) โ†’

9. Potential Matchups

Possible future pairings โ€” not confirmed fixtures. Open Potential Matchups โ†’

10. Reference Data & Search

GET /tennis/v2/search
GET /tennis/v2/countries
GET /tennis/v2/court
GET /tennis/v2/round
GET /tennis/v2/ranking

Open Reference Data โ†’

Understanding identifiers

  • Player ID โ€” numeric; from upcoming matches, rankings, player lists and search.
  • Tournament / season ID โ€” one year-edition; from calendar, then reuse on info / results / upcoming filters.
  • Upcoming matchId โ€” scheduled-match row from Upcoming Matches.
  • Live event id โ€” live scores, timeline, live odds.
  • Live matchId โ€” player1Id-player2Id-tournamentId-roundId for point-by-point.
From a fixture to its live data: follow the links

Match IDs differ between the schedule, the live service and the archive: follow the returned links instead of matching by name. 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

CapabilityTypical access
Upcoming matches, factual H2H and available pre-match oddsAll plans (FREE / PRO / ULTRA / MEGA)
Pre-match odds (all markets)All plans
Live scores, statistics, point-by-point, timeline, live oddsAll plans
SportsAPI365 model win probabilities (modelPrediction, H2H Model Prediction)ULTRA / MEGA
Socket.IO real-time pushMEGA 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

FieldTypeMeaning
idintegerNumeric player ID (same IDs across all endpoints).
namestringDisplay name. Doubles teams contain /.
countryAcrstringThree-letter country code.
birthdaystring | nullDate of birth (ISO-8601), where returned.
country.name / country.acronymstringCountry, on routes that nest it.
seed / odd / image / image_p_namestringOnly on routes that return them: seed, pre-match odds, photo paths.

Tournament object

FieldTypeMeaning
idintegerTournament season ID (one edition of an event).
namestringTournament name.
date / startDatestringStart date: ISO-8601 (date) or YYYY-MM-DD (startDate) โ€” same day.
rankIdintegerLevel (TourRank): 0 ITF $10K, 1 Challenger/ITF > $10K, 2 Main tour, 3 Masters, 4 Grand Slam, โ€ฆ
courtId / courtinteger / objectSurface ID, and court: { id, name } when included.
rank / roundobjectLevel as { id, name } (round is the legacy key name).
countryAcr / countrystring / objectCountry code, and { name, acronym } when included.

Plan-restricted field

FieldTypeMeaning
availablebooleanAlways false.
errorstringAlways "plan_restricted".
messagestringUpgrade message, e.g. "Upgrade Plan to see this".
requiredPlanstringLowest plan that includes the field: ULTRA or MEGA.
upgradeUrlstringWhere to upgrade, where returned.

LiveEvent object (REST and Socket.IO)

FieldTypeMeaning
idstringLive event ID โ€” use with live-score, timeline, odds and join-event.
matchIdstringplayer1Id-player2Id-tournamentId-roundId bridge to the core API (point-by-point by IDs).
name / participant1 / participant2stringMatch name and the two players' names.
league / tournament.namestringTournament name as shown by the live feed.
scorestringSet scores so far, comma-separated (e.g. 6-4,3-2).
pointsstringPoints in the current game (e.g. 30-15, 40-A).
indicatorstringServer: "1,0" player 1, "0,1" player 2.
statusstringInPlay, Not Started or Ended.
tourTypestringatp or wta.
startTimestampintegerScheduled start, Unix seconds.
stats / timelineobject / arrayOnly on event-by-players and live-score.

Odds entry (live odds routes)

FieldTypeMeaning
od1 / od2stringDecimal odds for outcome 1 (player 1 / over) and outcome 2 (player 2 / under).
odxstring | nullDraw price where a market has one; otherwise null.
linestring | nullHandicap or total line; empty or null when not applicable.
bookmaker / bookmakerIdstring / integerBookmaker (see /bookmakers/all).
od1Bookmaker / od2Bookmaker / odxBookmakerstringOn best-odds routes: who offers each best price.
updatedAt / addTime / sourceAddTimestring | integerWhen the bookmaker published the price, Unix seconds.

Point-by-point set and game

FieldTypeMeaning
sets[].setNumberintegerSet number, from 1.
sets[].setScorestringFinal set score (e.g. 6-3); empty while in progress.
sets[].games[].gameNumberintegerGame number within the set.
sets[].games[].serverinteger1 = player 1 served, 2 = player 2, 0 = unknown.
sets[].games[].tiebreakbooleantrue for a tiebreak game.
sets[].games[].finalScorestringGames score in the set after this game (e.g. 3-2).
sets[].games[].fifteens_contentstringScore after each point, comma-separated, as player1:player2. BP marks a break point; in tiebreaks * marks the server (*1:0).

Statistics metric (match statistics)

FieldTypeMeaning
statistics.{period}object1ST, 2ND, โ€ฆ = that set; ALL = whole match.
โ€ฆ{period}.{category}objectgames, points, return, service, miscellaneous.
โ€ฆ{category}.{metric}.player1 / player2objectThe metric for each player.
โ€ฆ.valueintegerThe count (aces, points won, serves landed, โ€ฆ).
โ€ฆ.total / โ€ฆ.percentageinteger / numberRatio metrics only: what value is out of, and value as a percentage.

Common recipes

GoalRequest
Men's upcoming singlesGET /tennis/v2/upcoming/matches/atp?group=singles
Current live matches (REST)GET /tennis/v2/extend/api/events/live
Start Socket.IOGET /tennis/v2/extend/api/ws-token โ†’ https://live.matchstat.com
Men's tournaments active nowGET /tennis/v2/calendar/active?tour=atp