# ATP Tour API

> ATP Tour returns men's singles rankings and tournament results as a workflow and API.

ATP Tour (ATP) returns men's singles rankings using a player name to find one player or a result count to list players. Get tournament results returns round-by-round singles match results, champion, dates, surface, and category for a tournament name or city and year.

- Page: https://fous.com/workflows/atp-tour
- Handle: `@atp-tour`
- Category: [Sports](https://fous.com/workflows/category/sports)
- Source website: https://atptour.com
- Last verified: Sep 29, 2026
- Fous is not affiliated with ATP Tour.

## Methods

### Get rankings

Operation `get_rankings`, version 1. 1 credit per call.

Get ATP men's singles world rankings as of the latest published ranking date. Search for one ranked player by name or return up to 500 ranked players in rank order.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `player` | string | no | `"Carlos Alcaraz"` | Player name to find, for example Carlos Alcaraz. |
| `max_results` | integer | no | `125` | Maximum number of ranked players, for example 100 (up to 500). |

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "player": {
      "type": "string",
      "default": "",
      "description": "Player name to find, for example Carlos Alcaraz.",
      "examples": [
        "Carlos Alcaraz"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 100,
      "maximum": 500,
      "minimum": 1,
      "description": "Maximum number of ranked players, for example 100 (up to 500).",
      "x-fous-developer": true,
      "examples": [
        125,
        500
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "player": "Carlos Alcaraz"
    },
    {
      "max_results": 125
    },
    {
      "max_results": 500
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `players` | array |  | Ranked singles players in ranking order. |
| `players[].age` | integer or null | `23` |  |
| `players[].rank` | integer | `3` |  |
| `players[].player` | string | `"Carlos Alcaraz"` |  |
| `players[].country` | string or null | `"Spain"` |  |
| `players[].places_moved` | integer | `0` | Positive means up in rank; negative means down. |
| `players[].profile_link` | string | `"https://www.atptour.com/en/players/carlos-alcaraz/a0e2/overview"` |  |
| `players[].ranking_points` | integer | `5060` |  |
| `players[].tournaments_played` | integer or null | `16` |  |
| `ranking_date` | string | `"2026-09-28"` | Date of the published rankings. |

**Example input**

```json
{
  "player": "Carlos Alcaraz"
}
```

**Example output**

```json
{
  "players": [
    {
      "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"
}
```

### Get tournament results

Operation `get_tournament_results`, version 1. 1 credit per call.

Get singles match results round by round for an ATP tournament and year, including the champion, dates, surface and category. If no year is given, uses the most recent listed edition.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `year` | integer | no | `2025` | Tournament year, such as 2025. Defaults to the most recent edition. |
| `tournament` | string | yes | `"Indian Wells"` | Tournament name or city, such as Wimbledon or Indian Wells. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "tournament"
  ],
  "properties": {
    "year": {
      "type": "integer",
      "description": "Tournament year, such as 2025. Defaults to the most recent edition.",
      "examples": [
        2025,
        2026
      ]
    },
    "tournament": {
      "type": "string",
      "description": "Tournament name or city, such as Wimbledon or Indian Wells.",
      "examples": [
        "Indian Wells",
        "Wimbledon"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "year": 2025,
      "tournament": "Indian Wells"
    },
    {
      "year": 2026,
      "tournament": "Wimbledon"
    },
    {
      "tournament": "Indian Wells"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `city` | string |  |  |
| `link` | string |  |  |
| `matches` | array |  |  |
| `matches[].link` | string |  |  |
| `matches[].loser` | string |  |  |
| `matches[].round` | string |  |  |
| `matches[].score` | string |  |  |
| `matches[].winner` | string |  |  |
| `matches[].loser_seed` | string or null |  |  |
| `matches[].winner_seed` | string or null |  |  |
| `surface` | string or null |  |  |
| `category` | string or null |  |  |
| `champion` | string or null |  |  |
| `end_date` | string or null |  |  |
| `start_date` | string or null |  |  |
| `tournament_name` | string |  |  |

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@atp-tour",
  "visibility": "public",
  "operation": "get_rankings",
  "version": 1,
  "input": {
    "player": "Carlos Alcaraz"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@atp-tour\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_rankings\",\n  \"version\": 1,\n  \"input\": {\n    \"player\": \"Carlos Alcaraz\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@atp-tour",
  "visibility": "public",
  "operation": "get_rankings",
  "version": 1,
  "input": {
    "player": "Carlos Alcaraz"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@atp-tour","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Track men's singles ranking positions and points.
- Compare player rankings and movement.
- Review match scores by tournament round.
- Identify tournament champions, surfaces, and dates.

## FAQ

### Is Fous affiliated with ATP Tour?

No. Fous is not affiliated with ATP Tour. This workflow reads the public atptour.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a ATP Tour account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from atptour.com when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 29, 2026.

### Who is ranked number one?

Use Get rankings to search for a player or return ranked players in rank order.

### How did players fare at a tournament?

Use Get tournament results with a tournament name or city and year to see singles results round by round.

## Related

- [PGA Tour API](https://fous.com/workflows/pga-tour.md): PGA Tour provides official schedules and scores, defaulting to the latest available stroke-play event; unannounced purses and unavailable defending champions may be missing.
- [FIFA API](https://fous.com/workflows/fifa.md): FIFA provides official men’s and women’s national-team rankings, excluding unranked teams, and year-specific tournament matches with scores, teams, stages and venues.
- [Chess.com API](https://fous.com/workflows/chess-com.md): Chess.com returns public player profiles, ratings, records, puzzle scores, top-player rankings, and completed public games for a selected month, defaulting to the current UTC month.
- [Premier League API](https://fous.com/workflows/premier-league.md): Premier League provides current/chosen-season tables and recent form, date-range fixtures/results (up to 380), player profiles and stats, and seasonal leaders; older-season stats may be limited.
- [NCAA API](https://fous.com/workflows/ncaa.md): NCAA provides college sports scores and schedules from NCAA.com, including date-based games or football weeks, plus latest NCAA.com Top 25 rankings where published.
- [NBA API](https://fous.com/workflows/nba.md): NBA provides up-to-seven-day schedules and scores, seasonal standings, player bios and available regular-season averages, plus matchup box scores, with undated matchups showing the latest.
- [ESPN API](https://fous.com/workflows/espn.md): ESPN provides daily scores and schedules, team results, player statistics, matchup summaries, and latest topic-specific headlines; coverage and published details vary, especially for college and soccer.
- [Formula 1 API](https://fous.com/workflows/formula-1.md): Formula 1 provides official calendars with session times and venues, completed race results defaulting to the latest current-season race, and driver and team standings through the last completed race.
- [All Sports workflows](https://fous.com/workflows/category/sports)
