Looking for the Sofascore API? Use one that is meant for you.
Sofascore does not hand out API keys. The JSON its apps call is undocumented and can change or start refusing requests without notice. Cito is a tennis API built for developers: keys, docs, stable IDs and a team that answers.
- Real API keys
- Documented, versioned routes
- Tennis, UFC and esports
{ "items": [ { "id": "atp_206173", "tour": "ATP", "full_name": "Jannik Sinner", "ioc": "ITA" } ]}Seamless Integration with our MCP Server
Give Claude, Cursor, and ChatGPT the tennis archive. One command writes the MCP config, agents call match, ranking and head-to-head tools with real player IDs instead of guessing, and your key stays on your machine.
MCPInstall the Cito MCP serverWhy developers move off unofficial endpoints
Undocumented app endpoints work until the day they do not. A supported API is built for the opposite.
API keys, not workarounds
Authenticate with a key you own instead of mimicking an app or a browser.
Documented routes
Every endpoint, parameter and response field is in the docs, with real examples.
Stable IDs
Player, match and tournament IDs that do not change between releases.
Live and historical
Live scores now, and results back to 1877 for the long view.
Push, not polling
A WebSocket pushes score changes about 3 seconds after our source has them.
Someone to ask
Questions go to people who maintain the data, not to an issue thread on a scraper.
Does Sofascore have a public API?
No. Sofascore does not offer self-serve developer access or API keys for its data. The endpoints people call are the ones its website and apps use internally: undocumented, unsupported, and free to change or block automated traffic at any time.
Which Cito tennis endpoints replace the Sofascore data I use?
The tennis data most projects pull from Sofascore maps to documented endpoints: live events, finished results, rankings, player profiles, head-to-head and match statistics.
| What you used | Cito endpoint |
|---|---|
| Live tennis events | GET /api/v1/tennis/matches/live |
| Point-by-point and score of a live match | GET /api/v1/tennis/matches/live/{match_id} |
| Today's schedule | GET /api/v1/tennis/schedule |
| Finished results | GET /api/v1/tennis/matches/recent |
| Match statistics | GET /api/v1/tennis/matches/{match_id}/stats |
| ATP / WTA rankings | GET /api/v1/tennis/rankings?tour=ATP |
| Player profile | GET /api/v1/tennis/players/{player_id} |
| Head-to-head | GET /api/v1/tennis/h2h?player1_id=&player2_id= |
| Push updates | wss://api.citoapi.com/api/v1/tennis/live/ws |
Which sports does Cito cover?
Tennis (ATP, WTA, Challengers and ITF), UFC and MMA, and esports: Counter-Strike 2, League of Legends, Dota 2 and Call of Duty. We do not cover football, basketball or other team sports. If those are what you need, a dedicated provider for them is the better fit.
Endpoints you can ship with
Start on live scores: matches in progress, one live match, today's schedule.
Live scores
Every match in progress with the set scores, the game score, who is serving, and live match stats. Open one match for its full state.
- GET
/api/v1/tennis/matches/liveMatches in progress: sets, game score, server, and live stats.
- GET
/api/v1/tennis/matches/live/{match_id}One live match: every set, the current game, and both players' stats.
- GET
/api/v1/tennis/matches/{match_id}/statusScheduled, in progress, or finished, with the result once decided.
- GET
/api/v1/tennis/scheduleThe day's order of play across tours.
- GET
/api/v1/tennis/matches/upcomingScheduled matches, soonest first.
Results
Finished matches with the score of every set, the winner and loser, and the serve and return box score behind them.
- GET
/api/v1/tennis/matches/recentFinished matches, newest first, with set scores.
- GET
/api/v1/tennis/matches/completedEvery match completed on a given day.
- GET
/api/v1/tennis/matches/{match_id}One match: tournament, round, surface, score, and box score.
- GET
/api/v1/tennis/matches/{match_id}/statsAces, double faults, first-serve %, points won, break points.
- GET
/api/v1/tennis/matches?player_id=&year=&surface=The archive, filtered by player, opponent, year, surface, level or round.
Players
Player profiles with country, hand and birth date, career serve and return stats, recent form, and every match played.
- GET
/api/v1/tennis/players/search?q={name}Find a player by name and get their id.
- GET
/api/v1/tennis/players/{player_id}Name, country, hand, height, birth date and ranking.
- GET
/api/v1/tennis/players/{player_id}/statsCareer and season serve, return and win-loss stats.
- GET
/api/v1/tennis/players/{player_id}/formRecent results and win rate.
- GET
/api/v1/tennis/players/{player_id}/matchesThe player's match log, newest first.
Head-to-head
The full record between two players, split by surface and level, or a grid of records across a group of players.
- GET
/api/v1/tennis/h2h?player1_id=&player2_id=Wins, losses and every meeting between two players.
- GET
/api/v1/tennis/h2h/{player1_id}/{player2_id}The same record in path form.
- GET
/api/v1/tennis/h2h/matrix?player_ids=A head-to-head grid for several players at once.
Rankings
Weekly ATP and WTA singles rankings with points and movement, back through the decades, and any player's ranking history.
- GET
/api/v1/tennis/rankingsA full weekly ranking table for ATP or WTA.
- GET
/api/v1/tennis/rankings/topThe top N players of the latest list.
- GET
/api/v1/tennis/rankings/moversBiggest risers and fallers between two lists.
- GET
/api/v1/tennis/rankings/history/{player_id}One player's ranking, week by week.
- GET
/api/v1/tennis/rankings/datesEvery ranking date on file.
Tournaments
Tournaments from Grand Slams to ITF events, the season calendar, and the draw of any edition as a bracket.
- GET
/api/v1/tennis/tournamentsTournaments filtered by tour, level, surface and year.
- GET
/api/v1/tennis/tournaments/calendar?year=2026One season's tournament calendar.
- GET
/api/v1/tennis/tournaments/{tournament_id}One tournament: level, surface, location and editions.
- GET
/api/v1/tennis/tournaments/{tournament_id}/drawThe draw of the latest edition.
- GET
/api/v1/tennis/tournaments/{tournament_id}/editions/{year}/drawThe draw of any past edition.
Leaderboards
Season leaders for the stats that decide matches, computed from every match box score.
- GET
/api/v1/tennis/leaderboards/acesMost aces in the season.
- GET
/api/v1/tennis/leaderboards/1st-serve-wonBest first-serve points won %.
- GET
/api/v1/tennis/leaderboards/break-conversionBest break-point conversion.
- GET
/api/v1/tennis/leaderboards/tiebreak-win-pctBest tiebreak record.
- GET
/api/v1/tennis/leaderboards/comeback-winsMost wins after losing the first set.
Coverage
What the dataset holds: tours, levels, ITF and junior coverage, and the years on file.
- GET
/api/v1/tennis/coverageTours, levels, year range, ITF and junior event counts.
- GET
/api/v1/tennis/competitionsEvery competition with its tour and level.
Figures on this page were checked against the live API on 2026-10-24.
FAQs
Access, keys, coverage and switching
Can't find what you're looking for? Contact our customer support team
More tennis data
The tennis API pages most Sofascore switchers need next.
- Tennis APILive scores, results, rankings and head-to-head on one key.
- Tennis live score APISet, game and server for every match in progress.
- Tennis head-to-head APIEvery meeting between two players, split by surface and level.
- Historical tennis dataEvery result since 1968, weekly rankings and 140k players.
- Tennis stats APIBox scores, career serve and return stats, leaderboards.
- Tennis prediction dataPoint-in-time rankings, surface splits and form for models.
- Tennis API docsEvery endpoint, its parameters, and a real response.
Build tennis live score apps
Swap undocumented endpoints for a supported API. Your first key is free.