Catalog PyPI
PACKAGE EXPLORERView in registry

acesapi

PyPI

Python client for the AcesAPI tennis data API. No dependencies.

acesapiapi-clientbettingoddsplayer-propssports-datatennis
Versions collected1
Direct dependencies2From release 0.1.4
Last observed20 Oct, 18:09 UTC

README

Version 0.1.4 documentation

AcesAPI for Python

Python client for the AcesAPI tennis data API. It has no required dependencies (standard library only) and works on Python 3.9 and newer. Pandas is optional.

Install

pip install acesapi
pip install "acesapi[pandas]"   # only if you want DataFrames

Set your key

Get a free key at https://acesapi.com/signup. Free accounts get 500 credits a month.

export ACESAPI_API_KEY=your_key_here
from acesapi import Client

client = Client()                      # reads ACESAPI_API_KEY
client = Client(api_key="your_key")    # or pass it in

Examples

1. Current rankings

ATP is the default tour. Pass league="wta" for the women's tour.

from acesapi import Client

client = Client()

ranks = client.get_rankings(limit=5)
for row in ranks["rankings"]:
    print(row["rank"], row["name"], row["points"])

2. Head to head

Look up two player ids with search_players, then compare them.

from acesapi import Client

client = Client()

sinner = client.search_players(name="Sinner", limit=1)["players"][0]
alcaraz = client.search_players(name="Alcaraz", limit=1)["players"][0]
h2h = client.get_head_to_head(sinner["player_id"], alcaraz["player_id"])
print(sinner["name"], "vs", alcaraz["name"])
print("matches:", h2h["summary"]["matches"])
print("wins:", h2h["summary"]["wins"])

3. Results by surface

get_surface_splits shows how a player does on hard, clay and grass.

from acesapi import Client

client = Client()

sinner = client.search_players(name="Sinner", limit=1)["players"][0]
splits = client.get_surface_splits(sinner["player_id"])
for row in splits["splits"]:
    print(row["surface"], row["wins"], "-", row["losses"], row["win_pct"])

Credits

Every method returns the data object from the response. After each call, client.last_credits_used and client.last_credits_remaining hold the counters from the X-Credits-Used and X-Credits-Remaining headers. Methods that take estimate_only=True return the price of a call without running or charging it.

Pandas

from acesapi import to_dataframe

df = to_dataframe(data)                # finds the main list in the response
df = to_dataframe(data, key="rows")    # or name the list yourself

Nested fields become dotted columns. Install pandas separately or with pip install "acesapi[pandas]".

Errors

Every error is an APIError subclass, with the server's message and the HTTP status.

ExceptionStatusMeaning
AuthError401Missing, invalid or revoked key
InsufficientCreditsError402Not enough credits for the call
NotFoundError404The id or name does not exist
RateLimitError429Too many requests; has .retry_after when the server sends it
APIError400, 5xxBad arguments or a server problem
APIConnectionErrornoneNo response (network or timeout)
from acesapi import Client, APIError, InsufficientCreditsError, RateLimitError

client = Client()
try:
    data = client.list_tournaments()
except InsufficientCreditsError:
    print("Out of credits, top up at https://acesapi.com")
except RateLimitError as exc:
    print("Slow down, retry after", exc.retry_after)
except APIError as exc:
    print(exc.status_code, exc.message)

The client retries 429 and 5xx responses and connection failures up to 3 times with backoff, and honors Retry-After. Set Client(max_retries=0) to turn that off.

If you see CERTIFICATE_VERIFY_FAILED on a python.org install for macOS, run the "Install Certificates.command" script that came with Python, or pip install certifi (the client uses it when present).

Options

Client(
    api_key=None,                          # defaults to $ACESAPI_API_KEY
    base_url="https://mcp.acesapi.com",           # point at another host
    timeout=60.0,                          # seconds per request
    max_retries=3,
)

client.call("tool_name", {"arg": "value"}) calls any tool by name, which helps when the API adds a tool before this package does.

Tools

Method names match the API tool names. Arguments are keyword arguments; required ones can also be passed positionally. Each method's docstring lists its arguments (help(client.list_tournaments)).

MethodCreditsWhat it does
list_tournaments1List tournaments
get_tournament2Tournament
get_matches2Matches
get_schedule2Schedule
get_match2Match
search_players1Search players
get_player5Player
get_player_matches5Player matches
get_head_to_head3Head to head
get_surface_splits3Surface splits
get_player_stats3Player stats
get_rankings2Rankings
get_ratings2Ratings

Full API reference: https://acesapi.com/docs

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.419 Oct 20262

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
noahowsh/puckapi

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:09 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:b584f4342edeb6f7e1bd652b1f0a37f8062198fa0c55a51a71efe0ce0ad4da45