Skip to content
AcesAPI

Documentation

13 tennis data endpoints over REST and MCP. One key, credits per call.

Your first call

Sign up for a free key (500 credits, no card), swap it in for YOUR_API_KEY, and send this. search_players costs 1 credit.

Request

curl -X POST https://mcp.acesapi.com/v1/search_players \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
  "name": "sinner"
}'

Response

json
{
  "tour": "ATP",
  "players": [
    {
      "player_id": "3623",
      "name": "Jannik Sinner",
      "country": "ITA",
      "date_of_birth": "2001-08-16",
      "matches": 459,
      "last_match": "2026-07-12",
      "current_rank": 1,
      "plays": "right"
    }
  ],
  ...

First 14 lines. Full response and every field

REST / cURL

POST to /v1/{tool_name} with your params as JSON body. No MCP client needed:

bash
curl -X POST https://mcp.acesapi.com/v1/list_tournaments \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY"

With parameters:

bash
curl -X POST https://mcp.acesapi.com/v1/search_players \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"name":"sinner"}'

Claude Desktop

Add to your claude_desktop_config.json:

json
{
  "mcpServers": {
    "acesapi": {
      "url": "https://mcp.acesapi.com/mcp?key=YOUR_API_KEY"
    }
  }
}

Claude Code

One command:

bash
claude mcp add acesapi https://mcp.acesapi.com/mcp?key=YOUR_API_KEY --transport streamable-http

Find the right call

All 13 questions

Endpoints

13 endpoints by category. Each page has parameters, requests in three formats, a full example response and every response field.

Reference

Authentication

Every request requires an API key. Pass it via header or query parameter:

bash
x-api-key: YOUR_API_KEY
# or
Authorization: Bearer YOUR_API_KEY
# or (MCP only)
?key=YOUR_API_KEY

Verify your email, then create an API key from the dashboard. Free accounts get 500 credits.

Base URL

text
https://mcp.acesapi.com

REST API: POST /v1/{tool} with JSON body. Works with cURL, Python, any HTTP client.

MCP: POST /mcp via Streamable HTTP. Works with Claude Desktop, Claude Code, Cursor, and any MCP client.

Rate limits

Credit balanceRate limit
100 credits or more60 req/min
Under 100 credits10 req/min

The limit is the same on every plan. It is burst protection, not the spend boundary; credits are that, and they are enforced per request. Running low slows you down so you notice before the balance reaches zero.

Error handling

CodeMeaningWhat to do
400Invalid parametersCheck required fields and value types
401Invalid or missing API keyCheck your x-api-key header
402Insufficient creditsTop up your wallet or upgrade your plan
429Rate limit exceededWait and retry (see limits above)
500Server errorRetry with idempotency key. Credits auto-refund on server errors.

Pass x-idempotency-key or x-request-id headers to make retries duplicate-safe.

Data coverage

WTA Tour (women's professional tennis) (WTA)

AcesAPI also serves the WTA. Pass "league": "wta" to any tool that lists it, or connect to https://mcp.acesapi.com/mcp/wta. What the WTA data covers.

DataStatusCoverageVolume
Matches and scores
Players, seeds, round, status, every set's games and tiebreak points, retirements and walkovers.
Singles only. Main draws from 2007, qualifying from 2022. About 0.6% of records ESPN left mid-match are marked incomplete.
Available2007 to current124,000+ finished singles matches, both tours
Tournaments and draws
Dates, city, surface, Grand Slam flag, each round's matches and the champion.
Surface is from our own reference: placed for 99.6% of ATP and 96% of WTA matches, null for the rest.
Available2007 to currentAbout 60 to 75 ATP and 55 to 110 WTA tournaments a year
Players
Date of birth, country, height, playing hand, career record, titles, head to head and records by surface.
AvailableEveryone in a listed matchProfiles and careers
Rankings
Rank, previous rank and points per weekly list, and each player's ranking history.
ESPN keeps 35 to 49 lists a year per tour; the other weeks are missing.
Partial2007 to currentTop 100 to 150, most weeks
Ratings
Our Elo, overall and per surface, before and after every match.
Available2007 to currentEvery player, every completed match

Coverage describes the datasets AcesAPI supports. Freshness and operational health are tracked separately.

Odds snapshot definitions

opening: The first moneyline a sportsbook posted for the match.

closing: The sportsbook's last moneyline before the match.

Odds coverage currently documents none yet: ESPN publishes no tennis lines. No sportsbook lines for tennis. There are no tennis lines yet: ESPN publishes none. The odds endpoint stays off until a licensed source is added.

Response format

REST API

All successful REST responses wrap the result in a data key:

json
{ "data": { "events": [...], "count": 50 } }

Error responses return:

json
{ "error": "Insufficient credits", "message": "This tool costs 5 credits, you have 2" }

MCP Protocol

MCP responses follow the standard MCP tool result format. The data is returned directly (no data wrapper). Both access methods return identical data, just different envelopes.

Conventions

Seasons: 4-digit year (tournaments are grouped by calendar year). Example: 2025.

Fight IDs: a match's id, e.g. 157774 (an ESPN match id; list a tournament's matches with get_tournament). Get them from get_event, get_schedule or get_fighter_fights.

Fighter IDs: Get them from search_fighters, by name or nickname.

Pagination: Endpoints use a limit parameter. No cursor or offset. Narrow your filters to get different slices of data.

Credits: Deducted before the request executes. Automatically refunded on server errors. Monthly credits are used first, then wallet balance.

Ready to start?

500 free credits on signup. No credit card required.

Get a free key