Skip to main content

Base URL

https://v2.tennis.sportsapipro.com
Finding Match IDs: Use /api/live, /api/today, or /api/schedule/{date} to discover match IDs. Example: Alcaraz vs Ruud = 15625024.

Match Details

Full Match Details

GET /api/match/{matchId}
Returns comprehensive match data: players, score, status, tournament context, and round info.
matchId
number
required
Numeric match ID.

Point-by-Point 🎾

GET /api/match/{matchId}/point-by-point
Returns granular point-by-point data for the match. Tennis-specific — not available in football or basketball. Includes serve, return, break points, and point-level scoring.

Statistics

GET /api/match/{matchId}/statistics
Returns match statistics: aces, double faults, 1st/2nd serve percentage, break points won/saved, total points won, and more.

Match Status & Timestamps

Status Fields

Every match response includes a status object with three fields:
  • status.type (string) — primary status for programmatic logic
  • status.code (integer) — numeric status code
  • status.description (string) — human-readable label for display
status.codestatus.typestatus.descriptionMeaning
0"notstarted""Not started"Match not yet started
8"inprogress""1st set"1st set in progress
9"inprogress""2nd set"2nd set in progress
10"inprogress""3rd set"3rd set in progress
11"inprogress""4th set"4th set (Grand Slams, best of 5)
12"inprogress""5th set"5th set (Grand Slams, best of 5)
60"postponed""Postponed"Match postponed
70"cancelled""Cancelled"Match cancelled
80+"abandoned""Retired" / "Walkover"Player retired or walkover
100"finished""Ended"Match completed
Pattern: For in-progress matches, status.code = 7 + set_number. So 1st set = 8, 2nd set = 9, 3rd set = 10, etc. This makes it easy to derive the current set: currentSet = status.code - 7.
Use status.type for programmatic logic (e.g., filter live matches with status.type === "inprogress"). Use status.description for display purposes.

Timestamps

The startTimestamp field is a Unix epoch integer (seconds since Jan 1, 1970 UTC). Example: 1775134800. Convert to a date in your language:
// JavaScript
const matchTime = new Date(data.data.event.startTimestamp * 1000);
# Python
from datetime import datetime, timezone
match_time = datetime.fromtimestamp(1775134800, tz=timezone.utc)

Context & History

Head to Head

GET /api/match/{matchId}/h2h
Returns head-to-head history between the two players.

Media

Highlights

GET /api/match/{matchId}/highlights

Media

GET /api/match/{matchId}/media

Fan & Betting

Fan Votes

GET /api/match/{matchId}/votes
GET /api/match/{matchId}/odds

All Odds

GET /api/match/{matchId}/odds/all

Pre-Match Odds

GET /api/match/{matchId}/odds/pre-match

Live Odds

GET /api/match/{matchId}/odds/live

Example Request

curl -X GET "https://v2.tennis.sportsapipro.com/api/match/15625024/statistics" \
  -H "x-api-key: YOUR_API_KEY"