Documentation / Stats
Team stats
Every team of a season side by side: its record and rank, per-game figures from the box scores and the four factors (possessions, offensive, defensive and net rating, effective field goal, true shooting, turnover and offensive rebound shares, free throw rate). Leave season out for the latest.
Try itGet a free key
https://api.basketballapi.net/v1/stats/teams?competition=cp_11A6HQXJ&season=ss_K1TTWVRMYour key stays in this browser.
200Example answer, in shape
{
"data": {
"competition": {
"id": "cp_929127FC",
"name": "Example name"
},
"season": {
"id": "ss_EBC81C6D",
"name": "Example name"
},
"stage": "regular",
"through": "2026-10-01",
"teams": [
{
"team": {
"id": "tm_8EB4D858",
"name": "Example name"
},
"stage": "regular",
"rank": 12,
"played": 12,
"won": 12,
"lost": 12,
"win_share": 7.5,
"league_points": 12,
"games_behind": 7.5,
"points_for": 12,
"points_against": 12,
"points_difference": 12,
"home": "text",
"away": "text",
"last_ten": "text",
"streak": "text",
"box_score_games": 12,
"per_game": {
"points": 7.5,
"points_against": 7.5,
"rebounds": 7.5,
"offensive_rebounds": 7.5,
"defensive_rebounds": 7.5,
"assists": 7.5,
"steals": 7.5,
"blocks": 7.5,
"turnovers": 7.5,
"fouls": 7.5,
"field_goal_pct": 7.5,
"three_point_pct": 7.5,
"free_throw_pct": 7.5,
"three_point_attempt_share": 7.5
},
"advanced": {
"possessions_per_game": 7.5,
"offensive_rating": 7.5,
"defensive_rating": 7.5,
"net_rating": 7.5,
"effective_fg_pct": 7.5,
"true_shooting_pct": 7.5,
"turnover_pct": 7.5,
"offensive_rebound_pct": 7.5,
"free_throw_rate": 7.5,
"opponent_effective_fg_pct": 7.5
}
}
]
},
"meta": { "plan": "Free key" }
}
curl "https://api.basketballapi.net/v1/stats/teams?competition=cp_11A6HQXJ&season=ss_K1TTWVRM" \ -H "Authorization: Bearer bba_live_your_key"
import requests
r = requests.get("https://api.basketballapi.net/v1/stats/teams?competition=cp_11A6HQXJ&season=ss_K1TTWVRM",
headers={"Authorization": "Bearer bba_live_your_key"})
print(r.json()["data"])
const r = await fetch("https://api.basketballapi.net/v1/stats/teams?competition=cp_11A6HQXJ&season=ss_K1TTWVRM", {
headers: { Authorization: "Bearer bba_live_your_key" }
});
const { data } = await r.json();
$ctx = stream_context_create(['http' => [
'header' => "Authorization: Bearer bba_live_your_key",
]]);
$r = json_decode(file_get_contents("https://api.basketballapi.net/v1/stats/teams?competition=cp_11A6HQXJ&season=ss_K1TTWVRM", false, $ctx), true);
Parameters
| Name | Type | About |
|---|---|---|
competition required | id | Only this competition, by its id (cp_…). e.g. cp_11A6HQXJ |
season | id | Only this season, by its id (ss_…). e.g. ss_K1TTWVRM |
stage | enum | One of: regularpostseason |
What comes back
data is one of these:
| Field | Type | About |
|---|---|---|
competition | object | |
competition.id | id | A competition id. |
competition.name | string | |
season | object | |
season.id | id | A season id. |
season.name | string | |
stage | string | |
through | date | |
teams | array of object |
Example answer
The answer under Run shows the shape of this endpoint's answer before you run anything: there are no records to show right now. Run puts your own answer in its place, and Show the example brings this one back.