Free NBA data API powered by Django REST Framework. Access player stats, team standings, live scores, and more.
Rate Limit
100 req/min
Per IP address
Format
JSON
REST responses
Auth
None Required
Open access
Base URL
http://localhost:8000/api/v2All endpoints return JSON. Paginated lists use count, next, previous, and results fields.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v2/players/ | List all players (paginated) |
| GET | /api/v2/players/{slug}/ | Player detail by slug |
| GET | /api/v2/players/search/?q={query} | Search players by name |
| GET | /api/v2/players/{slug}/comprehensive-stats/ | Full advanced stats for a player |
| GET | /api/v2/players/injuries/ | Current injury report |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v2/teams/ | List all 30 NBA teams |
| GET | /api/v2/teams/{id}/ | Team detail by ID |
| GET | /api/v2/teams/standings/ | Current conference standings |
| GET | /api/v2/teams/coaches/ | Coaching staff for all teams |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v2/games/ | List games (filterable by date) |
| GET | /api/v2/games/today/ | Today's NBA games with live scores |
| GET | /api/v2/transactions/ | Recent trades, signings, and waivers |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v2/content/news/ | Latest NBA news articles |
| GET | /api/v2/content/events/ | Historical NBA events (on this day) |
Response from GET /api/v2/players/
{
"count": 450,
"next": "http://localhost:8000/api/v2/players/?page=2",
"previous": null,
"results": [
{
"id": 1,
"slug": "lebron-james",
"name": "LeBron James",
"team": {
"id": 13,
"abbreviation": "LAL",
"name": "Lakers",
"city": "Los Angeles"
},
"position": "SF",
"number": 23,
"age": 41,
"stats": {
"ppg": 23.5,
"rpg": 7.3,
"apg": 9.1,
"spg": 1.2,
"bpg": 0.6,
"fgPct": 50.1,
"threePct": 36.8,
"ftPct": 75.0,
"mpg": 33.9
}
}
]
}No authentication required
All endpoints are publicly accessible. No API keys, tokens, or registration needed. Rate limit: 100 requests per minute per IP address.
curl -s "http://localhost:8000/api/v2/players/?page=1" | python -m json.tool
const res = await fetch("http://localhost:8000/api/v2/players/");
const data = await res.json();
console.log(`Found ${data.count} players`);
data.results.forEach(p =>
console.log(`${p.name} (${p.team.abbreviation}): ${p.stats.ppg} PPG`)
);import requests
resp = requests.get("http://localhost:8000/api/v2/players/")
data = resp.json()
for player in data["results"]:
stats = player["stats"]
print(f"{player['name']} ({player['team']['abbreviation']}): {stats['ppg']} PPG")All data is aggregated from multiple public sources and updated regularly to ensure accuracy and freshness.
ESPN
Live scores, standings, player stats, and injury reports
NBA.com
Official team rosters, coaching staff, and transaction data
BallDontLie
Historical stats, advanced metrics, and game logs
All responses use standard Django REST Framework pagination. List endpoints return:
| Field | Type | Description |
|---|---|---|
count | integer | Total number of results across all pages |
next | string | null | URL of the next page, or null if last page |
previous | string | null | URL of the previous page, or null if first page |
results | array | Array of resource objects for the current page |
Detail endpoints (e.g. /api/v2/players/slug/) return the resource object directly without pagination wrapper.
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad request -- invalid query parameters |
| 404 | Resource not found |
| 429 | Rate limit exceeded -- wait and retry |
| 500 | Internal server error |
Questions or need higher rate limits? Let us know.