# NBA Stats API 0.1 Beta
## Introduction
This documentation provides the necessary information to use the NBA Stats API. These APIs provide access to NBA season and playoff totals, advanced statistics, shot chart data, and more.
---
# [View API Documentation](https://documenter.getpostman.com/view/24232555/2s93shzpR3)
---
### Base URL
All URLs referenced in this documentation use the following base URL:
>
### Endpoints
Top 20 Scorers by Season
Method: `Get`
>
Success Response:
`Code: 200`
Content:
```
{
"count": 20,
"next": null,
"previous": null,
"results": [
{
"id": 40,
"player_name": "Jayson Tatum",
"age": 24,
"games": 74,
"games_started": 74,
"minutes_played": 2732,
"field_goals": 727,
"field_attempts": 1559,
"field_percent": "0.466",
"three_fg": 240,
"three_attempts": 686,
"three_percent": "0.350",
"two_fg": 487,
"two_attempts": 873,
"two_percent": "0.558",
"effect_fg_percent": "0.543",
"ft": 531,
"fta": 622,
"ft_percent": "0.854",
"ORB": 78,
"DRB": 571,
"TRB": 649,
"AST": 342,
"STL": 78,
"BLK": 51,
"TOV": 213,
"PF": 160,
"PTS": 2225,
"team": "BOS",
"season": 2023
},
{
"id": 20,
"player_name": "Joel Embiid",
"age": 28,
"games": 66,
"games_started": 66,
"minutes_played": 2284,
"field_goals": 728,
"field_attempts": 1328,
"field_percent": "0.548",
"three_fg": 66,
"three_attempts": 200,
"three_percent": "0.330",
"two_fg": 662,
"two_attempts": 1128,
"two_percent": "0.587",
"effect_fg_percent": "0.573",
"ft": 661,
"fta": 771,
"ft_percent": "0.857",
"ORB": 113,
"DRB": 557,
"TRB": 670,
"AST": 274,
"STL": 66,
"BLK": 112,
"TOV": 226,
"PF": 205,
"PTS": 2183,
"team": "PHI",
"season": 2023
},
...
]
}
```
Top 20 Scorers in Playoffs
Method: `Get`
>
Success Response:
`Code: 200`
Content:
```
{
"count": 20,
"next": null,
"previous": null,
"results": [
{
"id": 16,
"player_name": "Jayson Tatum",
"age": 23,
"games": 24,
"games_started": 24,
"minutes_played": 983,
"field_goals": 201,
"field_attempts": 472,
"field_percent": "0.426",
"three_fg": 77,
"three_attempts": 196,
"three_percent": "0.393",
"two_fg": 124,
"two_attempts": 276,
"two_percent": "0.449",
"effect_fg_percent": "0.507",
"ft": 136,
"fta": 170,
"ft_percent": "0.800",
"ORB": 24,
"DRB": 137,
"TRB": 161,
"AST": 148,
"STL": 29,
"BLK": 21,
"TOV": 100,
"PF": 72,
"PTS": 615,
"team": "BOS",
"season": 2022
},
{
"id": 178,
"player_name": "Stephen Curry",
"age": 33,
"games": 22,
"games_started": 18,
"minutes_played": 764,
"field_goals": 202,
"field_attempts": 440,
"field_percent": "0.459",
"three_fg": 91,
"three_attempts": 229,
"three_percent": "0.397",
"two_fg": 111,
"two_attempts": 211,
"two_percent": "0.526",
"effect_fg_percent": "0.563",
"ft": 107,
"fta": 129,
"ft_percent": "0.829",
"ORB": 11,
"DRB": 104,
"TRB": 115,
"AST": 129,
"STL": 29,
"BLK": 8,
"TOV": 57,
"PF": 59,
"PTS": 602,
"team": "GSW",
"season": 2022
},
...
]
}
```
Top 20 Assists by Season
Method: `Get`
>
Success Response:
`Code: 200`
Content:
```
{
"count": 20,
"next": null,
"previous": null,
"results": [
{
"id": 529,
"player_name": "Trae Young",
"age": 24,
"games": 73,
"games_started": 73,
"minutes_played": 2541,
"field_goals": 597,
"field_attempts": 1390,
"field_percent": "0.429",
"three_fg": 154,
"three_attempts": 460,
"three_percent": "0.335",
"two_fg": 443,
"two_attempts": 930,
"two_percent": "0.476",
"effect_fg_percent": "0.485",
"ft": 566,
"fta": 639,
"ft_percent": "0.886",
"ORB": 56,
"DRB": 161,
"TRB": 217,
"AST": 741,
"STL": 80,
"BLK": 9,
"TOV": 300,
"PF": 104,
"PTS": 1914,
"team": "ATL",
"season": 2023
},
{
"id": 203,
"player_name": "Nikola Jokić",
"age": 27,
"games": 69,
"games_started": 69,
"minutes_played": 2323,
"field_goals": 646,
"field_attempts": 1022,
"field_percent": "0.632",
"three_fg": 57,
"three_attempts": 149,
"three_percent": "0.383",
"two_fg": 589,
"two_attempts": 873,
"two_percent": "0.675",
"effect_fg_percent": "0.660",
"ft": 341,
"fta": 415,
"ft_percent": "0.822",
"ORB": 167,
"DRB": 650,
"TRB": 817,
"AST": 678,
"STL": 87,
"BLK": 47,
"TOV": 247,
"PF": 174,
"PTS": 1690,
"team": "DEN",
"season": 2023
},
...
]
}
```
Top 20 Assists in Playoffs
Method: `Get`
>
Success Response:
`Code: 200`
Content:
```
{
"count": 20,
"next": null,
"previous": null,
"results": [
{
"id": 16,
"player_name": "Jayson Tatum",
"age": 23,
"games": 24,
"games_started": 24,
"minutes_played": 983,
"field_goals": 201,
"field_attempts": 472,
"field_percent": "0.426",
"three_fg": 77,
"three_attempts": 196,
"three_percent": "0.393",
"two_fg": 124,
"two_attempts": 276,
"two_percent": "0.449",
"effect_fg_percent": "0.507",
"ft": 136,
"fta": 170,
"ft_percent": "0.800",
"ORB": 24,
"DRB": 137,
"TRB": 161,
"AST": 148,
"STL": 29,
"BLK": 21,
"TOV": 100,
"PF": 72,
"PTS": 615,
"team": "BOS",
"season": 2022
},
{
"id": 179,
"player_name": "Draymond Green",
"age": 31,
"games": 22,
"games_started": 22,
"minutes_played": 703,
"field_goals": 69,
"field_attempts": 144,
"field_percent": "0.479",
"three_fg": 8,
"three_attempts": 39,
"three_percent": "0.205",
"two_fg": 61,
"two_attempts": 105,
"two_percent": "0.581",
"effect_fg_percent": "0.507",
"ft": 30,
"fta": 47,
"ft_percent": "0.638",
"ORB": 26,
"DRB": 133,
"TRB": 159,
"AST": 138,
"STL": 25,
"BLK": 22,
"TOV": 59,
"PF": 87,
"PTS": 176,
"team": "GSW",
"season": 2022
},
...
]
}
```
Top 20 Rebounders (Total Rebounds) by Season
Method: `Get`
>
Success Response:
`Code: 200`
Content:
```
{
"count": 20,
"next": null,
"previous": null,
"results": [
{
"id": 405,
"player_name": "Domantas Sabonis",
"age": 26,
"games": 79,
"games_started": 79,
"minutes_played": 2736,
"field_goals": 577,
"field_attempts": 938,
"field_percent": "0.615",
"three_fg": 31,
"three_attempts": 83,
"three_percent": "0.373",
"two_fg": 546,
"two_attempts": 855,
"two_percent": "0.639",
"effect_fg_percent": "0.632",
"ft": 325,
"fta": 438,
"ft_percent": "0.742",
"ORB": 251,
"DRB": 722,
"TRB": 973,
"AST": 573,
"STL": 65,
"BLK": 39,
"TOV": 230,
"PF": 279,
"PTS": 1510,
"team": "SAC",
"season": 2023
},
{
"id": 346,
"player_name": "Nikola Vučević",
"age": 32,
"games": 82,
"games_started": 82,
"minutes_played": 2746,
"field_goals": 597,
"field_attempts": 1148,
"field_percent": "0.520",
"three_fg": 121,
"three_attempts": 347,
"three_percent": "0.349",
"two_fg": 476,
"two_attempts": 801,
"two_percent": "0.594",
"effect_fg_percent": "0.573",
"ft": 132,
"fta": 158,
"ft_percent": "0.835",
"ORB": 159,
"DRB": 744,
"TRB": 903,
"AST": 265,
"STL": 60,
"BLK": 57,
"TOV": 139,
"PF": 179,
"PTS": 1447,
"team": "CHI",
"season": 2023
},
...
]
}
```
## Plan
1. Data collection - Selenium - live data from dyanic websites. - Beautiful soap/scrapy - historical static data. - Live data - websocket connections or periodic updates.
2. Backend API - Django (Python): A more comprehensive framework that includes an ORM and admin panel out-of-the-box. - Django REST Framework
3. Backend DB
-Initially SQL lite, but it quickly met its limitations when trying to scrape data for 30 teams at once. It could not handle all the simulataneous connections.
- PostgreSQL is the new DB.
4. Frontend - React/Redux - D3.js - Chart.js - Highcharts - Websockets or Server-Sent Events
5. Deployment