Professional tennis analytics API built on 1.6 million historical matches. Elo ratings, win probabilities, serve/return metrics, pressure indices, and trading signals for ATP and WTA tours.
# Get today's trading signals
curl -H "X-API-Key: fb_your_key" \
https://api.fault.bet/v1/signals/today
# Response
{
"status": "ok",
"data": [{
"tournament": "Roland Garros",
"player1": "Carlos Alcaraz",
"player2": "Jannik Sinner",
"p1_win_probability": 0.5823,
"p1_fair_odds": 1.72,
"confidence": 0.847,
"recommended_stake_pct": 2.5
}]
}
RESTful JSON API with consistent response format, proper error handling, and rate limiting. All endpoints require an API key via the X-API-Key header.
Today's value trading signals with edge %, confidence score, and recommended staking. Includes Elo-based and surface-adjusted win probabilities.
All matches scheduled for today with model win probabilities for both players.
Detailed win probability breakdown for a specific match, including H2H, pressure metrics, fatigue, and weather conditions.
Complete player profile with Elo ratings (overall + surface), rolling serve/return stats, EWMA metrics, pressure indices, weather splits, and fatigue data.
Recent match history for a player with full serve statistics. Filter by surface. Up to 50 matches.
Top players ranked by Elo rating. Filter by tour (ATP/WTA) and surface (Hard/Clay/Grass). Includes momentum indicators.
All matches for a specific tournament with results, scores, and player data.
Full historical feature time series for a player from 2022 onwards. Elo trajectories, form curves, and all computed metrics over time.
Bulk export of computed match features (160+ columns). JSON or CSV format. Paginated up to 10,000 rows per request.
Bulk match data export with results, scores, and metadata. JSON or CSV.
Bulk serve and return statistics export. Match-level data with all serve metrics. JSON or CSV.
Two ways to access fault.bet data. API for real-time integration, CSV for analysis and model building.
Everything you need to integrate the fault.bet Tennis Data API into your application.
Subscribe to a plan above. Your API key (starting with fb_) will be emailed to you immediately.
# Get today's match probabilities
curl -H "X-API-Key: fb_your_key_here" \
https://api.fault.bet/v1/matches/today
# pip install requests
import requests
API_KEY = "fb_your_key_here"
BASE = "https://api.fault.bet/v1"
headers = {"X-API-Key": API_KEY}
# Today's signals
signals = requests.get(f"{BASE}/signals/today", headers=headers).json()
for s in signals["data"]:
print(f"{s['player1']} vs {s['player2']}: {s['p1_win_probability']:.1%}")
# Player profile
player = requests.get(f"{BASE}/player/Carlos Alcaraz", headers=headers).json()
print(player["data"]["ratings"])
# Bulk data export (Tier 3)
features = requests.get(
f"{BASE}/data/features/export",
headers=headers,
params={"tour": "atp", "format": "csv", "limit": 5000}
)
with open("features.csv", "w") as f:
f.write(features.text)
const API_KEY = "fb_your_key_here";
const BASE = "https://api.fault.bet/v1";
// Fetch today's matches
const res = await fetch(`${BASE}/matches/today`, {
headers: { "X-API-Key": API_KEY }
});
const { data } = await res.json();
data.forEach(m => {
console.log(
`${m.player1.name} vs ${m.player2.name}: ` +
`${(m.p1_win_probability * 100).toFixed(1)}%`
);
});
All API requests require an API key sent via the X-API-Key header. Keys start with fb_ and are tied to your subscription tier.
X-API-Key: fb_abc123def456...
All responses follow a consistent JSON structure:
{
"status": "ok", // "ok" or "error"
"data": { ... }, // response payload
"meta": { // optional metadata
"count": 42,
"date": "2026-04-21"
}
}
| Tier | Daily Limit | Rate Header |
|---|---|---|
| Signals (Tier 1) | 1,000 calls/day | X-RateLimit-Remaining |
| Analytics (Tier 2) | 5,000 calls/day | X-RateLimit-Remaining |
| Full Data (Tier 3) | 10,000 calls/day | X-RateLimit-Remaining |
Rate limits reset at midnight UTC. The X-RateLimit-Remaining response header shows your remaining calls for the day.
| Code | Meaning |
|---|---|
401 | Missing or invalid API key |
403 | Subscription inactive or tier insufficient |
404 | Resource not found (player, match, tournament) |
429 | Daily rate limit exceeded |
500 | Internal server error |
Full interactive API documentation with "Try it out" functionality is available at:
Not just match results. Engineered features built for predictive modelling and trading.
Surface-specific Elo and recency-weighted Elo (WElo) ratings. 8-week momentum delta tracks form shifts in real time.
Choke index, lead-lost rate, closing rate, tiebreak win %, and deciding set win % quantify mental performance under pressure.
Hold % in wind vs calm, ace rate in cold vs warm, indoor/outdoor performance splits based on real match-day conditions.
10-week, 20-week, 52-week rolling serve/return stats plus EWMA smoothing for stable trend detection without lag.
Head-to-head win %, surface-specific H2H, recent form H2H, mental edge scoring, and last-3 match momentum.
Days rest, sets played over 7d/14d, travel distance, timezone crossings, consecutive tournaments, and fatigue cascade scoring.
By using the fault.bet Tennis Data API, you agree to the following terms:
For questions, contact [email protected].