Tennis API
The full tennis archive behind one key: 1.78M ATP & WTA matches since 1877, 5.5M weekly ranking rows, head-to-head records, tournament draws, player careers, and live scores.
https://api.citoapi.com/api/v158 seasons of history, one date parameter away
Ask /tennis/rankings?date=1990-08-13 for the world as it stood that Monday, or query /tennis/matches by year, surface, round, and tier all the way back to the first Wimbledon in 1877 — with exact days verified against source results pages from 2004 onward. Every response is clean JSON with stable IDs.
GET /api/v1/tennis/h2h?player1_id=atp_103819&player2_id=atp_104745What tennis data is available?
Rivalry pages
Use /tennis/h2h for any pairing in history — totals, surface splits, finals, and Slams — or /h2h/matrix for group boards.
Rankings products
Weekly tables by date, top-N snapshots, available-week listings, and per-player career trajectories ready for charts.
Player profiles
Search, bios, and career statistics with surface and year filters for profile screens and scouting tools.
Draws & calendars
Season calendars plus round-by-round draw brackets for 58k tournament editions, including historical editions.
Scores & results
Live scoreboards with per-match detail, and /matches/recent for results feeds the moment matches finish.
No-friction workflow
6 steps from a name to a live scoreboardGET /tennis/players/search?q=federerGET /tennis/h2h?player1_id=atp_103819&player2_id=atp_104745GET /tennis/matches?player_id=atp_103819&opponent_id=atp_104745GET /tennis/rankings/history/atp_103819GET /tennis/tournaments/{tournamentId}/drawGET /tennis/matches/liveStart here for rivalry pages, ranking charts, or draw explorers. All endpoints return clean JSON with stable IDs.
Endpoints
Tennis coverage paths for players, the match archive, head-to-heads, rankings, tournaments, and live scores. Odds endpoints are listed below and launching soon.
GET/api/v1/tennis/players?q=alcaraz&tour=ATPList PlayersList and filter players across ATP and WTA with pagination and sorting.
/api/v1/tennis/players?q=alcaraz&tour=ATPcurl "https://api.citoapi.com/api/v1/tennis/players?q=alcaraz&tour=ATP" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/players/search?q=sinnerSearchAutocomplete search with fuzzy fallback ("alcarez" finds Carlos Alcaraz) and curated nicknames ("Nole").
/api/v1/tennis/players/search?q=sinnercurl "https://api.citoapi.com/api/v1/tennis/players/search?q=sinner" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/players/batch?ids=atp_207989,atp_206173BatchFetch up to 50 players in one call for rosters; unresolved ids are listed in `missing`.
/api/v1/tennis/players/batch?ids=atp_207989,atp_206173curl "https://api.citoapi.com/api/v1/tennis/players/batch?ids=atp_207989,atp_206173" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/players/{playerId}PlayerIdPlayer biographical profile: dob, hand, backhand, height, country, current rank, career high.
/api/v1/tennis/players/{playerId}curl "https://api.citoapi.com/api/v1/tennis/players/{playerId}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/players/{playerId}/statsPlayerId StatsCareer statistics with surface, level, and year-range filters. Unknown surfaces return a 422 listing valid values.
/api/v1/tennis/players/{playerId}/statscurl "https://api.citoapi.com/api/v1/tennis/players/{playerId}/stats" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/players/{playerId}/matchesMatchesOne player's full match log, newest first, with the same archive filters.
/api/v1/tennis/players/{playerId}/matchescurl "https://api.citoapi.com/api/v1/tennis/players/{playerId}/matches" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches?surface=Clay&year=2024MatchesQuery the 1.78M-match archive by player, opponent, tour, year, surface, tournament, round, or level.
/api/v1/tennis/matches?surface=Clay&year=2024curl "https://api.citoapi.com/api/v1/tennis/matches?surface=Clay&year=2024" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/recent?tour=ATPRecent MatchesMost recent completed tour matches — results feeds and score tickers.
/api/v1/tennis/matches/recent?tour=ATPcurl "https://api.citoapi.com/api/v1/tennis/matches/recent?tour=ATP" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/completed?date=YYYY-MM-DDCompletedFinalised ATP/WTA matches for one calendar day.
/api/v1/tennis/matches/completed?date=YYYY-MM-DDcurl "https://api.citoapi.com/api/v1/tennis/matches/completed?date=YYYY-MM-DD" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/liveLive MatchesAll currently live matches with scoreboards.
/api/v1/tennis/matches/livecurl "https://api.citoapi.com/api/v1/tennis/matches/live" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/live/{matchId}MatchIdDetailed live state for one match: sets, games, serve, momentum.
/api/v1/tennis/matches/live/{matchId}curl "https://api.citoapi.com/api/v1/tennis/matches/live/{matchId}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/{matchId}MatchIdFull match detail and box score, including set-by-set lines.
/api/v1/tennis/matches/{matchId}curl "https://api.citoapi.com/api/v1/tennis/matches/{matchId}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/{matchId}/statsMatchId StatsServing/return statistics slice for one match; gaps carry a machine-readable reason.
/api/v1/tennis/matches/{matchId}/statscurl "https://api.citoapi.com/api/v1/tennis/matches/{matchId}/stats" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/{matchId}/timelineTimelineSet-level match events; `coverage.point_history` states plainly when point-by-point does not exist.
/api/v1/tennis/matches/{matchId}/timelinecurl "https://api.citoapi.com/api/v1/tennis/matches/{matchId}/timeline" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/{matchId}/statusStatusMatch status, source status, and is_final without the full box score.
/api/v1/tennis/matches/{matchId}/statuscurl "https://api.citoapi.com/api/v1/tennis/matches/{matchId}/status" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/matches/{matchId}/tournament-linkTournament LinkResolve any match id dialect to its tournament; un-reconciled live matches report a reason, never a guessed id.
/api/v1/tennis/matches/{matchId}/tournament-linkcurl "https://api.citoapi.com/api/v1/tennis/matches/{matchId}/tournament-link" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/h2h?player1_id=…&player2_id=…H2hHead-to-head rivalry record with surface, level, and year filters.
/api/v1/tennis/h2h?player1_id=…&player2_id=…curl "https://api.citoapi.com/api/v1/tennis/h2h?player1_id=…&player2_id=…" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/h2h/matrix?player_ids=a,b,cMatrixMulti-player head-to-head grid — with per-player wins, current rank, and career high.
/api/v1/tennis/h2h/matrix?player_ids=a,b,ccurl "https://api.citoapi.com/api/v1/tennis/h2h/matrix?player_ids=a,b,c" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/rankings?tour=ATP&date=1990-08-13RankingsWeekly ATP/WTA rankings table for any published Monday since the 1970s, with movement vs the previous list.
/api/v1/tennis/rankings?tour=ATP&date=1990-08-13curl "https://api.citoapi.com/api/v1/tennis/rankings?tour=ATP&date=1990-08-13" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/rankings/top?tour=WTA&top_n=10TopCompact top-N snapshot of the latest rankings.
/api/v1/tennis/rankings/top?tour=WTA&top_n=10curl "https://api.citoapi.com/api/v1/tennis/rankings/top?tour=WTA&top_n=10" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/rankings/dates?tour=ATP&year=2005DatesList available ranking weeks — drive date pickers and sliders.
/api/v1/tennis/rankings/dates?tour=ATP&year=2005curl "https://api.citoapi.com/api/v1/tennis/rankings/dates?tour=ATP&year=2005" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/rankings/history/{playerId}PlayerIdOne player's full career ranking trajectory, chart-ready.
/api/v1/tennis/rankings/history/{playerId}curl "https://api.citoapi.com/api/v1/tennis/rankings/history/{playerId}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/rankings/movers?tour=ATP&direction=upMoversClimbers, fallers, new entries and drop-outs between two published lists.
/api/v1/tennis/rankings/movers?tour=ATP&direction=upcurl "https://api.citoapi.com/api/v1/tennis/rankings/movers?tour=ATP&direction=up" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/rankings/{circuit}CircuitCircuit-style rankings path: atp or wta (singles). Unavailable circuits return a structured 404.
/api/v1/tennis/rankings/{circuit}curl "https://api.citoapi.com/api/v1/tennis/rankings/{circuit}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/standings?tour=ATP&top_n=10StandingsLatest tour standings (singles).
/api/v1/tennis/standings?tour=ATP&top_n=10curl "https://api.citoapi.com/api/v1/tennis/standings?tour=ATP&top_n=10" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/tournaments?level=G&surface=GrassList TournamentsList and filter 58k tournament editions by tour, tier, surface, or country.
/api/v1/tennis/tournaments?level=G&surface=Grasscurl "https://api.citoapi.com/api/v1/tennis/tournaments?level=G&surface=Grass" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/tournaments/calendar?year=2026CalendarSeason calendar for a year — schedule pages and timelines.
/api/v1/tennis/tournaments/calendar?year=2026curl "https://api.citoapi.com/api/v1/tennis/tournaments/calendar?year=2026" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/tournaments/{tournamentId}TournamentIdTournament profile with tier, surface, dates, and location.
/api/v1/tennis/tournaments/{tournamentId}curl "https://api.citoapi.com/api/v1/tennis/tournaments/{tournamentId}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/tournaments/{tournamentId}/drawDrawFull draw bracket for a tournament edition, round by round, with seeds and entry designations.
/api/v1/tennis/tournaments/{tournamentId}/drawcurl "https://api.citoapi.com/api/v1/tennis/tournaments/{tournamentId}/draw" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/tournaments/{tournamentId}/bracketBracketBracket alias of the draw endpoint.
/api/v1/tennis/tournaments/{tournamentId}/bracketcurl "https://api.citoapi.com/api/v1/tennis/tournaments/{tournamentId}/bracket" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/tournaments/{tournamentId}/editions/{year}/drawDrawDraw bracket for a specific historical edition.
/api/v1/tennis/tournaments/{tournamentId}/editions/{year}/drawcurl "https://api.citoapi.com/api/v1/tennis/tournaments/{tournamentId}/editions/{year}/draw" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/tournaments/{tournamentId}/scheduleScheduleMatches of one tournament edition in date and round order.
/api/v1/tennis/tournaments/{tournamentId}/schedulecurl "https://api.citoapi.com/api/v1/tennis/tournaments/{tournamentId}/schedule" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/competitions?q=wimbledonCompetitionsRecurring competitions across editions, with edition counts and year spans.
/api/v1/tennis/competitions?q=wimbledoncurl "https://api.citoapi.com/api/v1/tennis/competitions?q=wimbledon" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/leaderboards/aces?tour=ATPAcesSeason aces leaderboard — one of nine statistical boards.
/api/v1/tennis/leaderboards/aces?tour=ATPcurl "https://api.citoapi.com/api/v1/tennis/leaderboards/aces?tour=ATP" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/leaderboards/{board}?tour=ATP&year=2025BoardNine boards: aces, 1st-serve-won, break-conversion, break-points-saved, comeback-wins, deciding-set-record, finals-record, return-games-won, tiebreak-win-pct.
/api/v1/tennis/leaderboards/{board}?tour=ATP&year=2025curl "https://api.citoapi.com/api/v1/tennis/leaderboards/{board}?tour=ATP&year=2025" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/schedule?date=YYYY-MM-DDScheduleThe day's matches across tours. Start times are best-effort: `start_time_known=false` means the source published no time.
/api/v1/tennis/schedule?date=YYYY-MM-DDcurl "https://api.citoapi.com/api/v1/tennis/schedule?date=YYYY-MM-DD" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/coverageCoveragePer-tour data bounds, match-archive totals, and day-verification counts.
/api/v1/tennis/coveragecurl "https://api.citoapi.com/api/v1/tennis/coverage" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/healthHealthService health. /tennis/health/sync adds sync freshness.
/api/v1/tennis/healthcurl "https://api.citoapi.com/api/v1/tennis/health" \
-H "x-api-key: YOUR_API_KEY"Odds
Coming soonBetting odds endpoints are on the way. Hard rule: spreads and totals will be games, never points or sets.
GET/api/v1/tennis/odds/{matchId}MatchIdPre-match odds: h2h, spreads, totals in decimal. Spreads and totals are GAMES lines, never points or sets.
/api/v1/tennis/odds/{matchId}curl "https://api.citoapi.com/api/v1/tennis/odds/{matchId}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/tennis/odds/{matchId}/liveLive MatchesIn-play odds, same shape and rules as pre-match.
/api/v1/tennis/odds/{matchId}/livecurl "https://api.citoapi.com/api/v1/tennis/odds/{matchId}/live" \
-H "x-api-key: YOUR_API_KEY"Tell us which markets you need
Sportsbooks like DraftKings or Pinnacle, exchanges, prediction markets like Kalshi. We build what people ask for, and your request goes straight to the team.
Head-to-head example
curl "https://api.citoapi.com/api/v1/tennis/h2h?player1_id=atp_103819&player2_id=atp_104745" \
-H "x-api-key: YOUR_API_KEY"
# → 41 matches, Nadal 24–17, with surface, finals, and Grand Slam splitsNarrow any head-to-head with surface=Clay, level=G, or year_from / year_to.
Start with a free key
Test tennis endpoints with 500 free requests/month. Scale up for production rivalry pages, ranking charts, or live scoreboards.