DunkAPI for Python
Python client for the DunkAPI NBA data API. It has no required dependencies (standard library only) and works on Python 3.9 and newer. Pandas is optional.
Install
pip install dunkapi
pip install "dunkapi[pandas]" # only if you want DataFrames
Set your key
Get a free key at https://dunkapi.com/signup. Free accounts get 500 credits a month.
export DUNKAPI_API_KEY=your_key_here
from dunkapi import Client
client = Client() # reads DUNKAPI_API_KEY
client = Client(api_key="your_key") # or pass it in
Examples
1. Player props for one game
get_player_props returns every player's line for one market, by sportsbook.
from dunkapi import Client, to_dataframe
client = Client()
props = client.get_player_props(
game_id="401810726",
market="player_points",
bookmaker="draftkings",
)
df = to_dataframe(props, key="props")
print(df[["player_name", "line", "over_odds", "under_odds"]].head(10))
2. One player's prop history
get_prop_history shows how a player's line for a market moved across games. Search for the player id first.
from dunkapi import Client, to_dataframe
client = Client()
jokic = client.search_players("Jokic", limit=1)["players"][0]
history = client.get_prop_history(
jokic["player_id"],
"player_points",
from_date="2026-03-01",
to_date="2026-03-08",
bookmaker="draftkings",
limit=10,
)
print(to_dataframe(history).head())
3. Games on a date, and scoring leaders
list_games needs a filter such as date, season or team.
from dunkapi import Client
client = Client()
games = client.list_games(date="2026-03-15", limit=3)["games"]
for g in games:
print(g["away"]["abbrev"], g["away"]["score"], "at", g["home"]["abbrev"], g["home"]["score"])
leaders = client.get_leaders("pts", limit=5)
for row in leaders["leaders"]:
print(row["name"], row["team"], row["value"])
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 dunkapi 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 "dunkapi[pandas]".
Errors
Every error is an APIError subclass, with the server's message and the HTTP status.
| Exception | Status | Meaning |
|---|---|---|
AuthError |
401 | Missing, invalid or revoked key |
InsufficientCreditsError |
402 | Not enough credits for the call |
NotFoundError |
404 | The id or name does not exist |
RateLimitError |
429 | Too many requests; has .retry_after when the server sends it |
APIError |
400, 5xx | Bad arguments or a server problem |
APIConnectionError |
none | No response (network or timeout) |
from dunkapi import Client, APIError, InsufficientCreditsError, RateLimitError
client = Client()
try:
data = client.list_teams()
except InsufficientCreditsError:
print("Out of credits, top up at https://dunkapi.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 $DUNKAPI_API_KEY
base_url="https://mcp.dunkapi.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_teams)).
| Method | Credits | What it does |
|---|---|---|
list_teams |
1 | List teams |
list_games |
2 | List games |
get_schedule |
2 | Schedule |
get_game |
5 | Game |
get_standings |
2 | Standings |
get_injuries |
2 | Injuries |
search_players |
1 | Search players |
get_player |
5 | Player |
get_player_games |
5 | Player games |
get_leaders |
5 | Leaders |
get_team_stats |
5 | Team stats |
get_plays |
10 | Plays |
get_shot_chart |
10 | Shot chart |
get_odds |
5 | Odds |
get_line_movement |
10 | Line movement |
get_ratings |
2 | Ratings |
get_player_props |
10 | Player props |
get_prop_history |
10 | Prop history |
Full API reference: https://dunkapi.com/docs
License
MIT
Metadata
Release files for dunkapi 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dunkapi-0.1.0.tar.gz | 14.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dunkapi-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.1 kB
Release files / dunkapi-0.1.0.tar.gz
| Download URL | dunkapi-0.1.0.tar.gz |
|---|---|
| Size | 14.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
51b13d1c8aeca2977987168f8b9a3c4aa1f0040b5570507a3bea24c9ecda62b1
|
|
BLAKE2b-256 checksum How to use checksums |
61beaa33864dce5cb30105c0490032853a92b4857c8544ae07735d05ff73d47f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency logRelease files / dunkapi-0.1.0-py3-none-any.whl
| Download URL | dunkapi-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c73227110e2b7a72fae2adcb3d652e7807f229b3fe673e4fb8ab5affdf3a037b
|
|
BLAKE2b-256 checksum How to use checksums |
836351b3320eb0bcb0acf9085eecdcf43bb5f4bc67b6a7eb161a1c98e7a0e886
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency log