API Reference
Live Scores & Odds
Everything happening in a live match — scores, match stats, point-by-point and odds. All endpoints on this page are REST under /tennis/v2/extend/api/; for push updates see Socket.IO Integration (MEGA).
What's included
- Live matches — all live events, live count, upcoming live-feed events and finding an event by player names and date.
- Live scores & match stats — live score (set-by-set score, current point, server), match statistics per set and for the whole match (aces, double faults, first and second serve, break points, return points, points and games in a row, tiebreaks) and the event timeline.
- Point-by-point — every point of a match, by IDs or by player names and date.
- Live odds — latest odds for all markets, best odds across bookmakers, recent movements, odds by player names and the live event with best odds.
- Odds analysis — pre-match odds, odds summary, bookmaker comparison, arbitrage and biggest movements.
Live lists are singles; doubles stay on core fixtures.
- Core fixture
id— schedule row from/tennis/v2/{atp|wta}/fixtures. Do not send it to odds. - Live
id(often a large number) — odds, timeline, and live score on this page. matchIdfrom the live event — splitplayer1Id-player2Id-tournamentId-roundIdfor point-by-point. Not the liveid.
Bridge names to a live event with /tennis/v2/extend/api/event/get/{player1}/{player2}/{YYYY-MM-DD}. Odds compare and arbitrage take the live id in the path and market_id as a query.
Live Events
/tennis/v2/extend/api/events/liveResponse Properties
| Field | Type | Description |
|---|---|---|
success | boolean | true when the live request succeeded. |
results | array | Live matches. Empty when nothing is in play. |
count | integer | Number of events in results. |
id | string | Live event ID for odds, timeline, and live score. Not a core fixture ID. |
matchId | string | player1Id-player2Id-tournamentId-roundId. Split on - for the point-by-point path. |
status | string | Match state, e.g. InPlay, Upcoming, Ended. |
score | string | Set score, e.g. 6-4,3-2. |
points | string | Current game points, e.g. 30-15. |
indicator | string | Who is serving / which side is indicated in the current game. |
tourType | string | atp or wta. |
startTimestamp | integer | Scheduled start as Unix seconds (UTC). |
Live Event Count
/tennis/v2/extend/api/events/live/countUpcoming Live-Feed Events
/tennis/v2/extend/api/events/upcoming/atpatp. Use wtafor the women's dataset.Returns upcoming events with status Not Started. Only page is a query param — page size is always 50 (limit in the query string is ignored). Path dataset is atp or wta.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 |
|---|---|---|---|
page | No | integer | Page number, starting at 1. Default 1. Page size is fixed at 50. |
Response Properties
| Field | Type | Description |
|---|---|---|
success / message | mixed | Request status. |
results | array | Upcoming live-board events. |
results[].id | string | Live event id for odds/timeline routes. |
results[].matchId | string | player1Id-player2Id-tournamentId-roundId for point-by-point. |
pagination | object | page, limit (always 50), total, totalPages, hasNext, hasPrev. Sending limit in the query does not change page size. |
Event by Players and Date
/tennis/v2/extend/api/event/get/Daniil%20Medvedev/Kamil%20Majchrzak/2026-06-13Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player1 | Yes | string | First player display name (URL-encoded). E.g: Novak%20Djokovic |
player2 | Yes | string | Second player display name (URL-encoded). E.g: Jannik%20Sinner |
date_only | Yes | string | Target date in YYYY-MM-DD format. Example: 2026-09-15. |
Response Properties
| Field | Type | Description |
|---|---|---|
success | boolean | Indicates whether the request was successful. |
result | object | Contains the detailed information for the requested match. |
message | string | Response message returned by the API. |
result.status | string | Current match status (e.g. Upcoming, InPlay, Ended, Retired, Walkover). |
result.id | string | Unique identifier of the match in the Live API. |
result.startTimestamp | number | Scheduled match start time as a Unix timestamp (seconds). |
result.name | string | Display name of the match in 'Player 1 vs Player 2' format. |
result.participant1 | string | Name of the first player. |
result.participant2 | string | Name of the second player. |
result.league | string | Tournament or event where the match is played. |
result.score | string | Current or final set score of the match. |
result.indicator | string | Internal live-state indicator used for serving/player status. |
result.points | string | Current game point score (e.g. 15-30, 40-40). |
result.matchId | string | Maps this event to the main Tennis API. Format: {player1_id}-{player2_id}-{tourId}-{roundId}. Example: 45191 = Player 1 ID, 59913 = Player 2 ID, 17112 = Tournament ID, 12 = Round ID. |
result.stats | object | Collection of available match statistics. Available statistics may vary depending on the match. |
result.stats.aces | array<string> | Number of aces by each player. Index 0 = participant1, Index 1 = participant2. |
result.stats.double_faults | array<string> | Number of double faults committed by each player. |
result.stats.win_1st_serve | array<string> | First serve win percentage for each player. |
result.stats.break_point_conversions | array<string> | Break point conversion percentage for each player. |
result.timeline | array<object> | Chronological list of important match events. |
result.timeline[].id | string | Unique identifier of the timeline event. |
result.timeline[].text | string | Human-readable description of the event, such as a game hold, break, or tie-break result. |
Live Event with Best Odds by Players and Date
/tennis/v2/extend/api/event/live/Anastasiia%20Sobolieva/Lea%20Boskovic/2026-09-15Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player1 | Yes | string | First player display name (URL-encoded). E.g: Novak%20Djokovic |
player2 | Yes | string | Second player display name (URL-encoded). E.g: Jannik%20Sinner |
date_only | Yes | string | Target date in YYYY-MM-DD format. Example: 2026-09-15. |
Response Properties
| Field | Type | Description |
|---|---|---|
result.id | string | Live event id for odds/timeline/live-score. |
result.matchId | string | player1Id-player2Id-tournamentId-roundId for /event/pbp/. |
result.odds | object | Best Full Time Result prices across bookmakers. |
Live Score by Event
/tennis/v2/extend/api/event/live-score/get/3979877Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Point-by-Point by IDs
/tennis/v2/extend/api/event/pbp/29932/52279/21349/6Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player1_id | Yes | integer | First Player ID (≥ 1). |
player2_id | Yes | integer | Second Player ID (≥ 1). |
tournament_id | Yes | integer | Tournament ID must be numeric value >= 1 |
round_id | Yes | integer | Round ID Example: roundId=9 |
Point-by-Point by Player Names and Date
/tennis/v2/extend/api/event/points-by-points/Taylor%20Fritz/Francisco%20Cerundolo/2026-09-05Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player1 | Yes | string | First player display name (URL-encoded). E.g: Novak%20Djokovic |
player2 | Yes | string | Second player display name (URL-encoded). E.g: Jannik%20Sinner |
date_only | Yes | string | Target date in YYYY-MM-DD format. Example: 2026-09-15. |
Event Timeline
/tennis/v2/extend/api/event/timeline/2732239Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Match Statistics by Event
/tennis/v2/extend/api/event/get/statistics/3969192Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Response Properties
| Field | Type | Description |
|---|---|---|
result.player1 / player2 | string | Display names. |
result.statistics | object | Buckets 1ST, 2ND, … and ALL. Each has games, points, return, service, miscellaneous. |
result.dateOnly | string | Match date YYYY-MM-DD. |
result.id | string | Live event id. |
Live Odds by Event (Recent Movements)
/tennis/v2/extend/api/event/recent-odds/get/3263263Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Latest Odds by Event (All Markets)
/tennis/v2/extend/api/event/odds/latest-all/3969192Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Response Properties
| Field | Type | Description |
|---|---|---|
eventId | string | The live event id you sent. |
result | object | Keyed by market name. Each market is keyed by bookmaker name with od1/od2/odx, addTime, line. |
Best Live Odds by Event
/tennis/v2/extend/api/event/odds/best/3969192Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Response Properties
| Field | Type | Description |
|---|---|---|
result.Full Time Result.od1 / od2 | string | Best moneyline for participant1 / participant2. |
result.Full Time Result.od1Bookmaker / od2Bookmaker | string | Bookmaker offering that price. |
Odds by Market Name
/tennis/v2/extend/api/event/odds/by-market/3969192?market=Full%20Time%20ResultPath Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
market | No | string | Market name. Default Full Time Result. Example: market=Over%20Under. This is not market_id. |
Response Properties
| Field | Type | Description |
|---|---|---|
result | object | Keyed by bookmaker name. Each value has od1, od2, odx, addTime, line. |
Latest Odds by Player Names
/tennis/v2/extend/api/event/odds/query/Anastasiia%20Sobolieva/Lea%20BoskovicPath Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
player1 | Yes | string | First player display name (URL-encoded). E.g: Novak%20Djokovic |
player2 | Yes | string | Second player display name (URL-encoded). E.g: Jannik%20Sinner |
Response Properties
| Field | Type | Description |
|---|---|---|
eventId | string | Resolved live event id. |
startTimestamp | number | Match start time of the resolved event (Unix seconds). |
results | object | Markets → bookmakers → od1/od2/addTime/line. Note the key is results, not result. |
Odds Summary by Event
/tennis/v2/extend/api/odds/summary/3969192Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Response Properties
| Field | Type | Description |
|---|---|---|
result | object | Bookmaker → market → start / kickoff / end objects (od1, od2, odx, sourceAddTime). |
Last 10 Odds Movements
/tennis/v2/extend/api/odds/summary/movements/last-10/3979877Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Compare Bookmaker Odds
/tennis/v2/extend/api/odds/compare/3700653?market_id=1Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
market_id | Yes | string | Market ID — Required market ID used to filter the results. E.g. market_id=1 You can see available market list |
Biggest Odds Movements
/tennis/v2/extend/api/odds/biggest-movements/3700653?market_id=1Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
market_id | No | string | Market — Optional market ID to filter the results. E.g market_id=1 You can see available market list |
Response Properties
| Field | Type | Description |
|---|---|---|
success | boolean | Indicates whether the request was successful. |
count | number | Total number of odds movement records returned. |
results | array | List of the biggest odds movements. |
results[].marketId | number | Unique identifier of the betting market. |
results[].market | string | Name of the betting market. |
results[].bookmakerId | number | Unique identifier of the bookmaker. |
results[].bookmaker | string | Name of the bookmaker. |
results[].openingOd1 | string | Opening decimal odds for outcome 1. |
results[].closingOd1 | string | Closing decimal odds for outcome 1. |
results[].openingOd2 | string | Opening decimal odds for outcome 2. |
results[].closingOd2 | string | Closing decimal odds for outcome 2. |
results[].movementOd1 | string | Absolute movement in odds for outcome 1. |
results[].movementOd2 | string | Absolute movement in odds for outcome 2. |
results[].biggestMovement | string | Largest absolute odds movement between the two outcomes. |
results[].selection | string | The outcome with the largest movement ("outcome1" or "outcome2"). |
Pre-Match Odds
/tennis/v2/extend/api/odds/pre-match/3815731Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
market_ids | No | string | Market — Optional comma-separated market IDs to filter the results. For example: 1,2,3,4. If omitted, odds from all available markets are returned. E.g market_ids=1,2,3,4 You can see available market list |
Odds Arbitrage
/tennis/v2/extend/api/odds/arbitrage/3700653?market_id=1Path Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
event_id | Yes | integer | Live event ID from GET /events/live (results[].id). Not a core fixture id. Example: 3815731 |
Query Parameter
| Parameter | Required | Type | Description |
|---|---|---|---|
market_id | No | string | Market — Optional market ID to filter the results. E.g market_id=1 You can see available market list |
Response Properties
| Field | Type | Description |
|---|---|---|
success | boolean | Indicates whether the request was successful. |
result | object | Contains the calculated arbitrage analysis. |
result.arbitrage | boolean | Indicates whether an arbitrage opportunity exists based on the available odds. |
result.margin | number | The implied market margin calculated from the selected best odds. A value below 1 indicates an arbitrage opportunity. |
result.profitPercentage | number | The estimated guaranteed profit percentage if the arbitrage opportunity is executed correctly. |
result.bestOdds | object | The highest available odds selected for each outcome. |
result.bestOdds.outcome1 | object | Best available odds for the first outcome. |
result.bestOdds.outcome1.bookmakerId | number | Unique identifier of the bookmaker offering the best odds for outcome 1. |
result.bestOdds.outcome1.bookmaker | string | Name of the bookmaker offering the best odds for outcome 1. |
result.bestOdds.outcome1.odds | number | Highest available decimal odds for outcome 1. |
result.bestOdds.outcome2 | object | Best available odds for the second outcome. |
result.bestOdds.outcome2.bookmakerId | number | Unique identifier of the bookmaker offering the best odds for outcome 2. |
result.bestOdds.outcome2.bookmaker | string | Name of the bookmaker offering the best odds for outcome 2. |
result.bestOdds.outcome2.odds | number | Highest available decimal odds for outcome 2. |
result.bookmakersChecked | number | Total number of bookmakers included in the arbitrage calculation. |
Bookmakers
/tennis/v2/extend/api/bookmakers/allOdds Markets
/tennis/v2/extend/api/markets/allWebSocket Token
/tennis/v2/extend/api/ws-tokenResponse Properties
| Field | Type | Description |
|---|---|---|
token | string | JWT for Socket.IO auth. Refresh when the socket reports TOKEN_EXPIRED. |