BallDontLie NBA API
api.balldontlie.io · Media
NBA stats API — players, teams, games, and season averages going back to 1979. Free tier available, no credit card required.
Authentication
Sample Requests
Search for NBA players by name.
Hover any highlighted part to learn what it does
| Authorization | Bearer YOUR_API_KEY |
curl -X GET "https://api.balldontlie.io/v1/players?search=lebron" \ -H "Authorization: Bearer YOUR_API_KEY"
import requests
params = {
"search": "lebron"
}
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(
"https://api.balldontlie.io/v1/players",
params=params,
headers=headers,
)
print(response.json())const url = new URL('https://api.balldontlie.io/v1/players');
url.searchParams.set('search', 'lebron');
const response = await fetch(url, {
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.balldontlie.io/v1/players")
q := baseURL.Query()
q.Set("search", "lebron")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.balldontlie.io/v1/players")
uri.query = URI.encode_www_form({
"search" => "lebron"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.balldontlie.io/v1/players?" . http_build_query([
"search" => "lebron"
]);
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Authorization: Bearer YOUR_API_KEY"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Get LeBron James 2023-24 season averages.
Hover any highlighted part to learn what it does
| Authorization | Bearer YOUR_API_KEY |
curl -X GET "https://api.balldontlie.io/v1/season_averages?season=2023&player_ids=237" \ -H "Authorization: Bearer YOUR_API_KEY"
import requests
params = {
"season": "2023",
"player_ids": "237"
}
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(
"https://api.balldontlie.io/v1/season_averages",
params=params,
headers=headers,
)
print(response.json())const url = new URL('https://api.balldontlie.io/v1/season_averages');
url.searchParams.set('season', '2023');
url.searchParams.set('player_ids', '237');
const response = await fetch(url, {
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.balldontlie.io/v1/season_averages")
q := baseURL.Query()
q.Set("season", "2023")
q.Set("player_ids", "237")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.balldontlie.io/v1/season_averages")
uri.query = URI.encode_www_form({
"season" => "2023",
"player_ids" => "237"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.balldontlie.io/v1/season_averages?" . http_build_query([
"season" => "2023",
"player_ids" => "237"
]);
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Authorization: Bearer YOUR_API_KEY"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- Get a free API key at balldontlie.io (no credit card)
- Set Authorization: Bearer YOUR_KEY header
- Search players: GET /v1/players?search=curry
- Season averages: GET /v1/season_averages?season=2023&player_ids={id}
What can you build with BallDontLie NBA API?
BallDontLie NBA API is a Media API. Developers commonly use media APIs for:
- storing and delivering images, video, and audio
- building digital asset management and media libraries
- transcoding and optimising media for the web
- adding video streaming and playback to your app
- automating content tagging and metadata extraction
API Key authentication. You'll receive a key after signing up. Send it with every request — in a header or query parameter. Keep it out of client-side code and never commit it to version control. BallDontLie NBA API is free to use up to a usage limit, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide