Discover/ATP Tour API
live

ATP Tour APIatptour.com

Access ATP Tour player profiles, career stats, rankings breakdowns, and match results via 4 endpoints. Filter by year, surface, and match type.

This API takes change requests — .
Endpoint health
monitored
get_player_activity
get_player_profile
get_player_rankings
get_player_stats
Checks pendingself-healing
Endpoints
4
Updated
4h ago

What is the ATP Tour API?

The ATP Tour API exposes 4 endpoints covering player biographical data, serve and return statistics, live rankings breakdowns, and per-tournament match activity. get_player_profile returns biographical fields like handedness, backhand style, height, weight, and coach alongside current ranking and career win-loss record. All endpoints are keyed by ATP player ID, which appears in the player's profile URL on atptour.com.

Try it
ATP player ID (e.g. 's0ag' for Jannik Sinner, 'a0e2' for Carlos Alcaraz). Found in the player's profile URL on atptour.com.
api.parse.bot/scraper/1935c3a3-665d-4c07-a20e-34cb2f37c676/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/1935c3a3-665d-4c07-a20e-34cb2f37c676/get_player_profile?player_id=s0ag' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace atptour-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: ATP Tour API — bounded, re-runnable; every call capped."""
from parse_apis.atptour_com_api import AtpTour, Surface, MatchType, PlayerNotFound

client = AtpTour()

# Fetch Sinner's full profile by his ATP player ID.
try:
    sinner = client.players.get(player_id="s0ag")
    print(sinner.first_name, sinner.last_name, "| Rank:", sinner.singles_rank)
except PlayerNotFound as e:
    print(f"Player not found: {e.player_id}")

# Career stats across all surfaces.
stats = sinner.stats(year="all", surface=Surface.ALL)
print("Career aces:", stats.service_stats.aces, "| Service games won:", stats.service_stats.service_games_won_pct)

# Current rankings breakdown — which tournaments contribute points.
rankings = sinner.rankings(match_type=MatchType.SINGLES)
print(f"Rank #{rankings.rank} with {rankings.total_points} points")
for event in rankings.breakdown[:3]:
    print(f"  {event.event_name}: {event.points} pts ({event.round})")

# Match activity for the current year.
activity = sinner.activity(year="2026", match_type=MatchType.SINGLES)
print(f"2026 record: {activity.won}-{activity.lost}, {activity.titles} titles")
for tourn in activity.tournaments[:2]:
    print(f"  {tourn.event_name} ({tourn.surface}) — {tourn.highest_round}")
    for match in tourn.matches[:2]:
        print(f"    {match.round_short} vs {match.opponent_name} [{match.score}] {'W' if match.result == 'W' else 'L'}")

print("exercised: players.get / stats / rankings / activity")
All endpoints · 4 totalmissing one? ·

Retrieve a player's biographical details, current ranking, career win-loss record, titles, and prize money. Returns one player per call keyed by their ATP player ID.

Input
ParamTypeDescription
player_idrequiredstringATP player ID (e.g. 's0ag' for Jannik Sinner, 'a0e2' for Carlos Alcaraz). Found in the player's profile URL on atptour.com.
Response
{
  "type": "object",
  "fields": {
    "age": "integer",
    "coach": "string or null",
    "plays": "string — handedness description",
    "backhand": "string — backhand style",
    "height_cm": "integer",
    "is_active": "boolean",
    "last_name": "string",
    "player_id": "string — uppercase ATP player ID",
    "weight_kg": "integer",
    "birth_city": "string",
    "birth_date": "string — ISO datetime",
    "first_name": "string",
    "turned_pro": "integer — year turned professional",
    "nationality": "string — country name",
    "profile_url": "string — relative URL to player profile",
    "doubles_rank": "integer or null",
    "singles_rank": "integer or null",
    "singles_ytd_won": "integer",
    "ytd_prize_money": "string — formatted with currency symbol",
    "nationality_code": "string — 3-letter country code",
    "singles_ytd_lost": "integer",
    "doubles_high_rank": "integer",
    "singles_high_rank": "integer",
    "career_prize_money": "string — formatted with currency symbol",
    "singles_career_won": "integer",
    "singles_ytd_titles": "integer",
    "singles_career_lost": "integer",
    "singles_career_titles": "integer",
    "doubles_high_rank_date": "string — ISO datetime",
    "singles_high_rank_date": "string — ISO datetime"
  },
  "sample": {
    "data": {
      "age": 24,
      "coach": "Simone Vagnozzi, Darren Cahill",
      "plays": "Right-Handed",
      "backhand": "Two-Handed",
      "height_cm": 191,
      "is_active": true,
      "last_name": "Sinner",
      "player_id": "S0AG",
      "weight_kg": 77,
      "birth_city": "San Candido, Italy",
      "birth_date": "2001-08-16T00:00:00",
      "first_name": "Jannik",
      "turned_pro": 2018,
      "nationality": "Italy",
      "profile_url": "/en/players/jannik-sinner/s0ag/overview",
      "doubles_rank": null,
      "singles_rank": 1,
      "singles_ytd_won": 44,
      "ytd_prize_money": "$6,853,344",
      "nationality_code": "ITA",
      "singles_ytd_lost": 3,
      "doubles_high_rank": 124,
      "singles_high_rank": 1,
      "career_prize_money": "$64,837,801",
      "singles_career_won": 365,
      "singles_ytd_titles": 6,
      "singles_career_lost": 89,
      "singles_career_titles": 30,
      "doubles_high_rank_date": "2021-09-27T00:00:00",
      "singles_high_rank_date": "2024-06-10T00:00:00"
    },
    "status": "success"
  }
}

About the ATP Tour API

Player Profiles and Career Data

get_player_profile returns biographical and career fields for a single player identified by their ATP player ID (e.g. s0ag for Jannik Sinner, a0e2 for Carlos Alcaraz). Response fields include age, plays (handedness), backhand style, height_cm, weight_kg, birth_city, coach, and is_active status. One call maps to one player — there is no bulk or search endpoint in this API.

Statistics by Year and Surface

get_player_stats accepts optional year (e.g. '2025' or 'all' for career totals) and surface parameters alongside the required player_id. The response separates service_stats (aces, double faults, first-serve percentage, and related win rates) from return_stats (break points converted percentage, return games won percentage, and related metrics). The category field distinguishes 'Career' from 'Year' results so you know which aggregation window is active.

Rankings Breakdown and Match Activity

get_player_rankings returns a player's current rank, total_points, year-to-date won/lost record (ytd_won, ytd_lost), ytd_titles, ytd_prize in USD, and a breakdown array listing each tournament's point contribution to the current ranking total. get_player_activity accepts optional year and match_type ('sgl' for singles, 'dbl' for doubles) and returns a tournaments array with nested match-level detail including opponent, score, and round, plus aggregate won, lost, titles, and prize_money for the selected year.

Reliability & maintenance

The ATP Tour API is a managed, monitored endpoint for atptour.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when atptour.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official atptour.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a head-to-head comparison tool using serve stats from get_player_stats filtered by surface for two players
  • Track ranking trajectory by pulling total_points and breakdown from get_player_rankings across multiple players
  • Generate tournament result timelines using get_player_activity with a specific year parameter
  • Power a fantasy tennis app with YTD win/loss records, titles, and prize money fields
  • Create surface-specific performance dashboards comparing first-serve percentage and break points converted on clay vs. hard court
  • Monitor which tournaments are contributing most points to a player's current ATP ranking using the breakdown array
  • Display player cards in a tennis app using biographical fields like height_cm, weight_kg, plays, and coach
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does ATP Tour have an official developer API?+
ATP Tour does not publish a public developer API or documentation portal for third-party access to its player and ranking data.
How do I filter `get_player_stats` for career stats on a specific surface?+
Pass year='all' to get career aggregates and set surface to your target surface (e.g. 'clay' or 'hard'). The response category field will read 'Career' and the surface field will confirm the filter applied. If you omit surface, the stats reflect all surfaces for that year or career window.
Does `get_player_activity` return doubles match results?+
Yes. Pass match_type='dbl' to retrieve doubles activity. The response match_type field will reflect 'dbl' and the tournaments array will contain doubles-specific match entries. Singles activity uses match_type='sgl'.
Does the API cover ATP rankings history over time, not just the current ranking?+
Not currently. get_player_rankings returns the current ranking, total points, and the tournament-by-tournament breakdown contributing to that snapshot — it does not return a time series of weekly ranking positions. You can fork this API on Parse and revise it to add a historical rankings endpoint.
Does the API include player head-to-head records or match statistics at the individual match level?+
Not currently. get_player_activity provides per-match results including opponent, score, and round, but does not break down in-match statistics such as aces or break points per match. Career and year-level serve/return stats are available through get_player_stats. You can fork this API on Parse and revise it to add a head-to-head or match-level stats endpoint.
Page content last updated . Spec covers 4 endpoints from atptour.com.
Related APIs in SportsSee all →
tennisexplorer.com API
Access comprehensive tennis data from TennisExplorer, including player profiles, ATP rankings, tournament schedules, and today's match listings across ATP and WTA tours at all competition levels.
ittf.com API
Access official World Table Tennis player statistics, match results, and event data to track tournament outcomes, compare player rankings, and explore international competition details. Search player profiles, browse featured athletes, and review results from global table tennis events.
pgatour.com API
Track PGA Tour tournaments with live leaderboards, player scorecards, and detailed shot-by-shot data, while monitoring player standings and the FedExCup race. Access complete tournament schedules and player statistics to stay updated on professional golf competitions.
ratings.fide.com API
Find chess players and track their FIDE ratings, rankings, and performance history by searching the official ratings database or browsing the world's top-ranked players. Get detailed player profiles with complete rating trends and game statistics to analyze any player's competitive record.
bwfbadminton.com API
Track badminton tournaments worldwide by browsing the BWF calendar, viewing tournament draw brackets, and retrieving detailed match results with player stats and scores. Stay updated on competitions and analyze matchups with comprehensive tournament data from the Badminton World Federation.
datagolf.com API
Track professional golfers' strokes gained performance metrics across tournaments and rounds by accessing top player rankings and detailed historical SG data. Analyze how elite golfers perform in specific competitions to compare their scoring efficiency over time.
uefa.com API
Track detailed player performance across UEFA competitions like Champions League, Europa League, and Conference League with seasonal rankings and match-by-match statistics. Search players, compare their stats, and analyze individual performance metrics to stay informed on top European football talent.
pdga.com API
Access player profiles, ratings history, tournament events, live scoring, world rankings, and the course directory from the Professional Disc Golf Association.