atptour.com API: Get ATP singles rankings
Gets the ATP men's singles world rankings as of the latest published ranking date. Finds one ranked player by name, or returns up to 500 ranked players in rank order.
Unofficial. Not affiliated with or endorsed by atptour.com.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Player optional
player Player name to find, for example Carlos Alcaraz.
(default)
- Max Results optional
max_results Maximum number of ranked players, for example 100 (up to 500).
500
Whole number from 1 to 500. Default
100.
Input as JSON
{ "max_results": 500}Output
{ "players": [ { "age": 25, "rank": 1, "player": "Jannik Sinner", "country": "Italy", "places_moved": 0, "profile_link": "https://www.atptour.com/en/players/jannik-sinner/s0ag/overview" , "ranking_points": 11000, "tournaments_played": 16 }, { "age": 29, "rank": 2, "player": "Alexander Zverev", "country": "Germany", "places_moved": 0, "profile_link": "https://www.atptour.com/en/players/alexander-zverev/z355/overview" , "ranking_points": 9630, "tournaments_played": 19 }, { "age": 23, "rank": 3, "player": "Carlos Alcaraz", "country": "Spain", "places_moved": 0, "profile_link": "https://www.atptour.com/en/players/carlos-alcaraz/a0e2/overview" , "ranking_points": 5060, "tournaments_played": 16 } ], "ranking_date": "2026-09-28"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"atptour.com/get_rankings","input":{"max_results":500}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "atptour.com/get_rankings" , "input": { "max_results": 500 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "atptour.com/get_rankings" , "input": { "max_results": 500 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run atptour.com/get_rankings# with {"max_results":500}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "properties": { "player": { "type": "string", "default": "", "description": "Player name to find, for example Carlos Alcaraz." }, "max_results": { "type": "integer", "default": 100, "maximum": 500, "minimum": 1, "description": "Maximum number of ranked players, for example 100 (up to 500)." } }}Output schema
{ "type": "object", "required": [ "ranking_date", "players" ], "properties": { "players": { "type": "array", "items": { "type": "object", "required": [ "rank", "player", "country", "age", "ranking_points", "places_moved", "tournaments_played", "profile_link" ], "properties": { "age": { "type": [ "integer", "null" ] }, "rank": { "type": "integer" }, "player": { "type": "string" }, "country": { "type": [ "string", "null" ] }, "places_moved": { "type": "integer", "description": "Positive means up in rank; negative means down." }, "profile_link": { "type": "string" }, "ranking_points": { "type": "integer" }, "tournaments_played": { "type": [ "integer", "null" ] } }, "additionalProperties": false }, "description": "Ranked singles players in ranking order." }, "ranking_date": { "type": "string", "format": "date", "description": "Date of the published rankings." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
atptour.com/get_rankings- Returns
- ranking date; rank, player, country, age, points, places moved, tournaments played, profile link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method atptour.com/get_rankings with the inputs above.
Ask your agent
- What is Jannik Sinner's current ATP singles ranking and how many points does he have?
- Show me the top 20 men's singles players in the latest ATP rankings on atptour.com
- Pull the current men's tennis world rankings, top 250, with country, age, and tournaments played for each player
- Where is Ben Shelton ranked right now, and did he move up or down since the last ranking update?
- Using atptour.com, find Holger Rune's position in the latest men's singles rankings along with his profile link
See more
All atptour.com methodsGets singles match results round by round for an ATP tournament and year, including the champion, dates, surface and category. Without a year it uses the most recent listed edition.
atptour.com/get_tournament_resultsGets the latest official FIFA men's or women's national-team ranking, with points and movement since the previous ranking. Unranked teams are excluded.
fifa.com/get_world_rankingLists up to 50 top Chess.com players for a time control, in rank order, with ratings, game records and profile links. Puzzles rankings use puzzle scores.
chess.com/list_top_playersRanks Premier League players for a season by goals, assists or goalkeeper clean sheets, with each player's club and nationality.
premierleague.com/list_top_scorersGets an MLB player's profile and regular-season hitting and pitching statistics for one season and for his career. Without a season it uses the current season, or the player's latest MLB season if he has no stats this year.
mlb.com/get_player_statsLooks up an NBA player by name, including retired players, and returns the bio and regular-season per-game averages for the reported season and career.
nba.com/get_playerLooks up a Premier League player by name and returns the profile and either career totals or the stats for a chosen season. If names clash, a current Premier League player is preferred.
premierleague.com/get_player_statsGets a Chess.com player's public profile, ratings and game records, best puzzle rating and Puzzle Rush best score from a username or member profile link.
chess.com/get_player_stats