atptour.com API: Get ATP tournament results
Gets 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.
Unofficial. Not affiliated with or endorsed by atptour.com.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Year optional
year Tournament year, such as 2025. Defaults to the most recent edition.
2026
Whole number 1915 or more.
- Tournament, required
tournament Tournament name or city, such as Wimbledon or Indian Wells.
Wimbledon
Input as JSON
{ "year": 2026, "tournament": "Wimbledon"}Output
{ "city": "London", "link": "https://www.atptour.com/en/scores/archive/wimbledon/540/2026/results" , "matches": [ { "link": "https://www.atptour.com/en/scores/archive/wimbledon/540/2026/results" , "loser": "Alexander Zverev", "round": "Final", "score": "6-7(7) 7-6(2) 6-3 6-4", "winner": "Jannik Sinner", "loser_seed": "2", "winner_seed": "1" }, { "link": "https://www.atptour.com/en/scores/archive/wimbledon/540/2026/results" , "loser": "Novak Djokovic", "round": "Semi-finals", "score": "6-4 6-4 6-4", "winner": "Jannik Sinner", "loser_seed": "7", "winner_seed": "1" }, { "link": "https://www.atptour.com/en/scores/archive/wimbledon/540/2026/results" , "loser": "Arthur Fery", "round": "Semi-finals", "score": "7-6(0) 6-2 6-4", "winner": "Alexander Zverev", "loser_seed": null, "winner_seed": "2" } ], "surface": "Grass", "category": "Grand Slam", "champion": "Jannik Sinner", "end_date": "2026-07-12", "start_date": "2026-06-29", "tournament_name": "Wimbledon"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"atptour.com/get_tournament_results","input":{"year":2026,"tournament":"Wimbledon"}}' # 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_tournament_results" , "input": { "year": 2026, "tournament": "Wimbledon" }})# 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_tournament_results" , "input": { "year": 2026, "tournament": "Wimbledon" } }), 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_tournament_results# with {"year":2026,"tournament":"Wimbledon"}"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", "required": [ "tournament" ], "properties": { "year": { "type": "integer", "minimum": 1915, "description": "Tournament year, such as 2025. Defaults to the most recent edition." }, "tournament": { "type": "string", "minLength": 1, "description": "Tournament name or city, such as Wimbledon or Indian Wells." } }}Output schema
{ "type": "object", "required": [ "tournament_name", "city", "start_date", "end_date", "surface", "category", "champion", "link", "matches" ], "properties": { "city": { "type": "string" }, "link": { "type": "string" }, "matches": { "type": "array", "items": { "type": "object", "required": [ "round", "winner", "loser", "score", "winner_seed", "loser_seed", "link" ], "properties": { "link": { "type": "string" }, "loser": { "type": "string" }, "round": { "type": "string" }, "score": { "type": "string" }, "winner": { "type": "string" }, "loser_seed": { "type": [ "string", "null" ] }, "winner_seed": { "type": [ "string", "null" ] } } } }, "surface": { "type": [ "string", "null" ] }, "category": { "type": [ "string", "null" ] }, "champion": { "type": [ "string", "null" ] }, "end_date": { "type": [ "string", "null" ], "format": "date" }, "start_date": { "type": [ "string", "null" ], "format": "date" }, "tournament_name": { "type": "string" } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
atptour.com/get_tournament_results- Returns
- tournament name, city, dates, surface, category, champion, results link, matches (round, winner, loser, score, seeds)
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_tournament_results with the inputs above.
Ask your agent
- Who won the 2023 Miami Open men's singles and what were the scores in each round?
- Show me the full singles draw results from the most recent Halle tournament on atptour.com
- I need round-by-round match results for the 1998 Monte Carlo Masters, including seeds and scores
- What surface and category was the 2019 Rotterdam event, and who beat whom in the quarterfinals through the final?
- Pull the latest Cincinnati men's singles results from atptour.com — champion, dates, and every match score
See more
All atptour.com methodsGets 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.
atptour.com/get_rankingsReturns the PGA Tour season schedule for a year, with dates, venue, purse, status, winners and defending champions.
pgatour.com/get_scheduleGets FIFA tournament matches in kick-off order, with scores, stages, teams and venues. The tournament name must include a year.
fifa.com/get_tournament_matchesReturns the main-race finishing order and fastest lap for a Formula 1 Grand Prix. Defaults to the most recent completed race in the current season.
formula1.com/get_race_resultsFinds the songs an artist played most on a named tour or in a year on setlist.fm, with concert counts and cover credits. Without a filter it uses the most recent tour with published song statistics.
setlist.fm/get_tour_song_statsFinds upcoming Ticketmaster-listed concerts, sports, theater and other events by keyword, optionally by city, country, category and date range, with dates, venues, prices when shown and links. Partner-only listings without a Ticketmaster link are excluded; very large searches cover only the first 800 listings.
ticketmaster.com/search_eventsGets UEFA club competition matches in a date range, with kick-off times in a chosen time zone, scores, stages and venues. You can limit the list to one club.
uefa.com/get_competition_matchesGets Formula 1 drivers' and teams' championship standings for a season, with the last completed race. Teams' standings begin in 1958.
formula1.com/get_standings