Everything you need to build a serious tennis product â in one API.
From live match data to historical odds and advanced player intelligence, get the tennis data your product needs through one consistent API.
Real-Time Match Data
Live scores, match stats, point-by-point action, event timelines, real-time updates and live odds â ready for scoreboards, betting products and data-driven applications.
Advanced Player Intelligence
Go beyond basic H2H with rankings, recent form, surface splits, tournament-specific performance, detailed service and return stats, and deeper comparisons against direct opponents and similar rivals.
Odds & Predictions
Access pre-match odds, in-play odds, odds movement, historical odds going back as far as 2010, and probabilities for upcoming matches. Historical coverage includes Marathon Bet and Pinnacle, with pre-match and live odds from Marathon Bet, Pinnacle, bet365, DraftKings and MelBet.
Complete Tennis Coverage
Players, matches, fixtures, draws, rankings and tournament analytics across ATP, WTA, ITF, Grand Slams, Masters and Challengers â all through a consistent API.
Real-Time WebSockets
MEGAMEGA plans include push-based updates for live scores, odds and match events, so you can stream changes as they happen without constant polling.
One API. Live data, deep stats, odds, predictions and the infrastructure to build at scale. If you need support, please contact us at api@tennis-api.com
If you subscribe to Tennis API - ATP WTA ITF, core, advanced, and live routes share that product. Every REST route is on every plan, except the model win probabilities (Ultra or Mega) and Socket.IO plus the written predictions (Mega). Listing: RapidAPI product page. Do not mix another product's host with a path from this listing.
Use the Getting Started guide for your first request, then the FAQ if a path, query, or identifier looks wrong. All endpoints are available on RapidAPI.
Understanding Tennis API
Pick a category by what you need (Where do I go?), then use one host and the matching path family â Core or name-based (/tennis/v2/), or Live (/extend/api/). Details: Getting Started and FAQ.
URL Structure
Every Tennis API endpoint follows the same URL structure:
https://{host}/tennis/v2/{feature-specific-path}You only need to determine:
- The correct host for your subscribed product.
- The correct feature-specific path after
/tennis/v2/.
| Product | Host | Path Prefix | What it contains |
|---|---|---|---|
| Tennis API - ATP WTA ITF | tennis-api-atp-wta-itf.p.rapidapi.com | /tennis/v2//tennis/v2/extend/api/ | One subscription. Keep this host and pick the prefix for the data you need:
|
Feature-Specific Paths
| Data type | Path | Examples |
|---|---|---|
| Core | /tennis/v2/ | atp/fixtures, wta/ranking/singles |
| Name-based stats & predictions | /tennis/v2/ + profile, h2h, tournament, upcomingâĻ | H2H, career statistics, calendar, draws, match predictions |
| Live & odds | /tennis/v2/extend/api/ | Live scores, live odds, point-by-point |
Round Reference
Every roundId value the API returns (on fixtures, results, draws, live rows and GET /tennis/v2/round). Qualifying rounds are 0â3 plus the rare 22, 25 and 24; the main draw runs 4 â 12 (Final). IDs are codes, not an order: sort main-draw rounds as First, Second, Third, Fourth, 1/4, 1/2, Final.
| roundId | Label returned | Stage | Meaning |
|---|---|---|---|
0 | Pre-q | Qualifying | Pre-qualifying round (before qualifying round 1). |
1 | Q1 | Qualifying | Qualifying round 1. When a qualifying draw has only one round (e.g. some WTA 125 and ITF events), Q1 is also the last qualifying round. |
2 | Q2 | Qualifying | Qualifying round 2. |
3 | Q3 | Qualifying | Qualifying round 3 (the final qualifying round at most tour events). |
22 | Q4 | Qualifying | Qualifying round 4 (older ITF events with large qualifying draws). |
25 | Q5 | Qualifying | Qualifying round 5 (older ITF events). |
24 | QF | Qualifying | Legacy label found only in old ITF data. Not the main-draw quarterfinal â that is 9 (1/4). |
4 | First | Main draw | Main-draw first round (e.g. R128 at a Grand Slam, R32 at a 250 event). |
5 | Second | Main draw | Main-draw second round. |
6 | Third | Main draw | Main-draw third round. |
7 | Fourth | Main draw | Main-draw fourth round (round of 16 at a Grand Slam). |
9 | 1/4 | Main draw | Quarterfinal. |
10 | 1/2 | Main draw | Semifinal. |
12 | Final | Main draw | Main-draw final. Only the tournament final uses 12; the last qualifying match is Q1âQ3. |
8 | Robin | Team / special | Round-robin group match (e.g. Tour Finals, Laver Cup, United Cup). |
11 | Bronze | Team / special | Bronze-medal match (Olympics). |
13 | Rubber 1 | Team / special | Team competition (Davis Cup / Billie Jean King Cup): rubber 1 of the tie. |
14 | Rubber 2 | Team / special | Team competition: rubber 2 of the tie. |
15 | Rubber 3 | Team / special | Team competition: rubber 3 of the tie. |
16 | Rubber 4 | Team / special | Team competition: rubber 4 of the tie. |
17 | Rubber 5 | Team / special | Team competition: rubber 5 of the tie. |
21 | ER | Other | Reserved code; not used by any match in the current data. |
23 | CR | Other | Reserved code; not used by any match in the current data. |
20 | N/A | Other | Round not specified. |
-1 | N/A | Other | Round not specified. |
Core player and fixture routes take integer IDs. Name-based profile and H2H routes take the player's display name (URL-encoded) or that same numeric ID. Slugs such as sinner-jannik are not accepted. See identifiers.
Odds Coverage
Access tennis odds from 10 bookmakers, with support for pre-match markets and live odds updates.
Supported Bookmakers
10
Live Socket
Bet365
Real-time updates via live socket
Standard Refresh
1 min
For bookmakers using periodic refresh
Bookmaker Availability
Availability depends on the bookmaker and the odds type.
Bet365
ID: 1
MelBet
ID: 18
DraftKings
ID: 11
FonBet
ID: 13
BWin
ID: 4
10Bet
ID: 2
BetFair
ID: 5
VBet
ID: 15
Pinnacle
ID: 19
Marathonbet
ID: 20
Update Methods
Bet365 â Live Socket
Live Bet365 odds are delivered through the live socket connection for streaming updates.
Standard Bookmakers â 1-Minute Refresh
Bet365 REST/API odds and the other supported bookmakers use a standard 1-minute refresh interval, where available.
Pinnacle & Marathonbet â Pre-Match Only
Odds from Pinnacle and Marathonbet are available for pre-match events only. Live odds are not provided for these bookmakers.
Note: The 1-minute refresh interval describes the standard refresh schedule, not a guarantee that every bookmaker's odds change or become available every minute.
Versioning
The current API version is v2. The two canonical prefixes are /tennis/v2/ (core and name-based routes) and /tennis/v2/extend/api/ (live and odds).
Type values (atp / wta)
Core and many advanced routes take {atp|wta} in the path. These are the technical dataset keys: use atp for men's matches and wtafor women's matches.
| Value | Dataset | Description |
|---|---|---|
atp | Men | Men's tennis dataset across all supported levels, not only the ATP Tour |
wta | Women | 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 (HTTP 400). Filter ITF or Challenger rows with TourRank from GET /ranking.
Authentication
This API is distributed through RapidAPI. Every request must include two headers:
| Header | Value |
|---|---|
X-RapidAPI-Key | Your RapidAPI subscription key |
X-RapidAPI-Host | E.g: tennis-api-atp-wta-itf.p.rapidapi.com |
X-RapidAPI-Key. Free and paid tiers are available.Rate Limits
Rate limits depend on your RapidAPI plan: FREE 50 requests/day (4/sec), PRO 150,000/month (10/sec), ULTRA 1,200,000/month (25/sec), MEGA 3,800,000/month (50/sec). Exceeding a limit returns HTTP 429 Too Many Requests.
Error Codes
| HTTP Status | Meaning |
|---|---|
200 | Success â the body contains the data. When nothing matches (an unknown player, tournament or match, or no rows for a date, filter or page) the response is still 200 with an empty result: {} for single objects, or the endpoint's usual list shape with an empty list (e.g. {"data": []}). Empty is not an error. |
400 | Bad Request â invalid parameters (e.g. wrong date format, unknown query parameter, unsupported value). Body: {"error": true, "message": "âĻ"}. |
401 | Unauthorized â missing or invalid X-RapidAPI-Key. |
403 | Forbidden â wrong host header, or the endpoint is not in your plan. Plan restrictions return {"error": "plan_restricted", "message", "requiredPlan", "upgradeUrl"}. |
404 | Not Found â the URL does not match any endpoint (check the path). A valid request for something that does not exist returns 200 with an empty result instead. |
429 | Too Many Requests â rate limit exceeded. |
500 | Internal Server Error â unexpected server issue. |