$ curl "https://api.citoapi.com/api/v1/tennis/h2h?player1_id=atp_103819&player2_id=atp_104745" \
-H "x-api-key: YOUR_API_KEY"
{ "player1": { "name": "Roger Federer", "wins": 17 },
"player2": { "name": "Rafael Nadal", "wins": 24 },
"summary": { "total_matches": 41, "grand_slam_matches": 14 } }What we are — and aren't
Straight answer, because bettors deserve one: tennisapi.dev does not currently sell bookmaker odds feeds. What it sells is the historical and live data layer that betting products are built on — results, head-to-heads, rankings, form, and surface performance — clean enough to backtest against and fast enough to run live.
Features your model actually wants
Surface-specific head-to-heads. Ranking differentials on the exact date a match was played (5.5M weekly rows make point-in-time joins trivial — no lookahead bias). Recent-form windows from the results archive. Round and tier context. Five-set versus three-set splits. Every one of these is a query, not an ETL project.
Backtest deep, run live
Fifty-eight seasons of results means your training set isn't three years of one scraper's output. When the model goes live, the same schema serves in-progress scoreboards and instant post-match results for settlement-adjacent logic.
The dataset behind it
Frequently asked
Do you provide betting odds?
Not currently — no bookmaker odds feeds. We provide the underlying match, ranking, and head-to-head data that betting models consume.
Can I get point-in-time rankings for backtesting?
Yes — rankings are queryable by exact historical date, which eliminates lookahead bias in features.
Is live data available for in-play logic?
Live scoreboards and per-match state are available over REST, with WebSocket and webhook delivery.
Your first call is thirty seconds away
Free tier to prove it, production tiers when you ship.