🎾 Tennis API Documentation
Complete reference for the Tennis API at tennis.bzzoiro.com. Free, no rate limits, no credit card.
The Tennis API provides read-only access to tennis data including tournaments, players, matches, live scores, ML predictions, and ATP/WTA rankings. All responses are JSON.
| Base URL | https://tennis.bzzoiro.com/api/ |
| Format | JSON |
| Auth | Token-based (see below) |
| Methods | GET only (read-only API) |
| Price | Free |
Every API request requires a token. Get yours by registering a free account on sports.bzzoiro.com.
sports.bzzoiro.com works here too. One account, all platforms.
Include the token in the Authorization header:
Authorization: Token YOUR_API_KEY
Example:
curl -H "Authorization: Token abc123def456" https://tennis.bzzoiro.com/api/tournaments/
401 Unauthorized.
All list endpoints return paginated results with 50 items per page.
{
"count": 120,
"next": "https://tennis.bzzoiro.com/api/matches/?page=2",
"previous": null,
"results": [ ... ]
}
| Field | Type | Description |
|---|---|---|
count | integer | Total number of results |
next | string | null | URL to the next page |
previous | string | null | URL to the previous page |
results | array | Array of objects for the current page |
Use ?page=N to navigate pages.
| Code | Meaning | Example |
|---|---|---|
401 | Unauthorized | Missing or invalid token |
404 | Not Found | Invalid endpoint or object ID |
500 | Server Error | Unexpected server issue |
Endpoints
Returns tennis tournaments. Cached 5 min.
Query parameters
| Param | Type | Required | Description |
|---|---|---|---|
circuit | string | No | ATP or WTA |
category | string | No | grand_slam, masters_1000, atp_500, atp_250, wta_1000, etc. |
Response fields
| Field | Type | Description |
|---|---|---|
id | integer | Tournament ID |
name | string | Tournament name |
category | string | grand_slam, masters_1000, atp_500, etc. |
surface | string | hard, clay, grass, carpet |
circuit | string | ATP or WTA |
country | string | Host country |
city | string | Host city |
Returns tennis player profiles. 4,700+ players. Cached 5 min.
Query parameters
| Param | Type | Required | Description |
|---|---|---|---|
gender | string | No | M or F |
country | string | No | Country code (e.g. ES, US) |
search | string | No | Search by name |
Returns tennis matches with scores and stats. Defaults to next 7 days. Cached 2 min.
Query parameters
| Param | Type | Required | Description |
|---|---|---|---|
date_from | date | No | Start date (YYYY-MM-DD) |
date_to | date | No | End date (YYYY-MM-DD) |
tournament | integer | No | Filter by tournament id |
player | integer | No | Filter by player id |
status | string | No | scheduled, live, finished |
Key response fields
| Field | Type | Description |
|---|---|---|
player1_obj / player2_obj | object | Nested player with ranking |
tournament | object | Tournament info |
player1_sets / player2_sets | integer | Sets won |
sets_detail | array | Per-set scores [{p1, p2, tiebreak}] |
odds_player1 / odds_player2 | float | Match odds |
p1_aces, p1_double_faults, ... | integer/float | Serve/return stats per player |
Returns only live tennis matches with real-time scores, current set/game/point, and serving player. Cached 30 sec.
Query parameters
None. Returns all currently live matches.
Key response fields
| Field | Type | Description |
|---|---|---|
player1_obj / player2_obj | object | Nested player with ranking |
player1_sets / player2_sets | integer | Sets won |
current_set | integer | Current set number |
current_game_score | string | Current game score (e.g. "40-30") |
serving_player | integer | 1 or 2 (who is serving) |
sets_detail | array | Per-set scores |
Returns ML predictions for tennis matches. Defaults to upcoming. Cached 2 min.
Query parameters
| Param | Type | Required | Description |
|---|---|---|---|
upcoming | boolean | No | Default true. Set false for past. |
date_from | date | No | Start date (YYYY-MM-DD) |
date_to | date | No | End date (YYYY-MM-DD) |
Key response fields
| Field | Type | Description |
|---|---|---|
prob_player1_wins / prob_player2_wins | float | Win probability (0-100) |
predicted_winner | integer | 1 or 2 |
confidence | float | Model confidence |
expected_total_sets | float | Expected number of sets |
expected_total_games | float | Expected total games |
prob_over_22_5_games | float | P(total games > 22.5) |
Returns ATP/WTA rankings. Latest snapshot by default. Cached 5 min.
Query parameters
| Param | Type | Required | Description |
|---|---|---|---|
type | string | No | ATP (default) or WTA |
date | date | No | Ranking date. Default: latest. |
top | integer | No | Limit to top N (e.g. ?top=100) |
Example
curl -H "Authorization: Token YOUR_API_KEY" \
"https://tennis.bzzoiro.com/api/rankings/?type=ATP&top=10"
Guides
- Register: Create a free account at sports.bzzoiro.com/register/
- Get your token: After registering you'll find your API token on your dashboard. The same token works across all platforms.
- Make a request:
curl -H "Authorization: Token YOUR_API_KEY" https://tennis.bzzoiro.com/api/tournaments/ - Explore: Use the endpoints above to fetch players, matches, live scores, predictions, and rankings.
import requests
API_TOKEN = "YOUR_API_KEY"
BASE_URL = "https://tennis.bzzoiro.com/api"
headers = {"Authorization": f"Token {API_TOKEN}"}
# Get upcoming predictions
resp = requests.get(f"{BASE_URL}/predictions/", headers=headers)
data = resp.json()
for pred in data["results"]:
match = pred["match"]
print(f"{match['player1']} vs {match['player2']}")
print(f" Winner: Player {pred['predicted_winner']} "
f"(P1: {pred['prob_player1_wins']:.1f}% "
f"P2: {pred['prob_player2_wins']:.1f}%)")
print(f" Confidence: {pred['confidence']:.1f}%")
print(f" Expected sets: {pred['expected_total_sets']:.1f}")
print()
# Get live scores
live = requests.get(f"{BASE_URL}/live/", headers=headers).json()
for match in live["results"]:
print(f"LIVE Set {match['current_set']} "
f"{match['player1']} {match['player1_sets']}-"
f"{match['player2_sets']} {match['player2']}")
# Get ATP top 10
rankings = requests.get(
f"{BASE_URL}/rankings/?type=ATP&top=10",
headers=headers
).json()
for r in rankings["results"]:
print(f"#{r['ranking']} {r['player']['name']} - {r['points']} pts")
100% free · Unlimited requests · No credit card required
Get Your Free API Key