API key Sign in, or get an instant trial key below — no signup required.

NBA

NBA API for Scores, Schedules, Odds & AI Agents

One event graph for the NBA — tip-off schedules, quarter-aware live scores, nine-book moneyline/spread/totals, and public betting splits agents can act on without scraping a board.

Available data

Everything below filters on the stable slug sport=nba (league nba). Discover seasons with GET /v1/seasons?sport=nba and teams with GET /v1/teams?sport=nba (optional conference=Eastern / Western).

LayerEndpointNBA notes
Schedule / boardGET /v1/eventssport=nba; status, date, include_odds / include_scores
TeamsGET /v1/teamsConference / division filters (e.g. conference=Eastern)
Live scoreGET /v1/events/{id}/score · SSEPeriods 14 / OT; clock when available
OddsGET …/odds · …/odds/historyTwo-way h2h, spreads, totals · 9 books
SplitsGET …/splitsPre-game ticket% vs handle% (in-season)
IntelligenceGET …/intelligenceNot yet — expect available: false
Raw statsGET …/statsNot yet for NBA

NBA API / NBA odds API intent lives here. Odds are an H2 on this page — there is no separate thin /odds/nba-odds-api until Search Console shows distinct demand. Cross-sport odds depth: /sports-odds-api.

Schedules

List the slate with GET /v1/events?sport=nba. Narrow by status (scheduled / inprogress / final), date or from/to (max 90 days per request), and paginate with after_id / limit.

NBA tip-off volume is dense — use date windows and include_odds=true / include_scores=true to keep night-of boards to one round trip. Historical lookbacks work year-round (including summer league / playoffs when ingested).

Scores

NBA score payloads use basketball period labels — "1""4" and "OT" — plus a game clock when the feed has it (e.g. "8:42", "0:00").

  • GET /v1/events?sport=nba&status=inprogress&include_scores=true — live board
  • GET /v1/events/{id}/score — lightweight poll (~15s cache while live)
  • GET /v1/events/{id}/stream — SSE event: score or signed webhooks

Cloneable pattern: live scoreboard use case (keep keys server-side).

Odds

NBA markets are two-way: moneyline (h2h), point spreads, and game totals (often mid-200s). American odds integers; point is null on moneyline sides. Default single-book call is Pinnacle (1 credit); bookmaker=all is 2 credits.

GET /v1/events/{id}/odds/history returns recorded price/point moves between ingest cycles — useful for steam on NBA sides and totals. No player props, team totals, or alternate lines in v1.

Full bookmaker list and normalization notes: Sports Odds API.

Splits

NBA is one of the sports with public betting splits in-API — ticket% vs handle% on moneyline, spread, and total, with a cross-book consensus and per-book breakdown.

Call GET /v1/events/{id}/splits (1 credit when available). Data is pre-game only; once tip-off starts, expect frozen or unavailable updates. Always check available before reading consensus / books.

Without NBA intelligence yet, splits are the main sharp-vs-public signal on the same event IDs as odds and scores — pair with /odds for line context.

Sportsbooks

Odds keys: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, betonline. Availability varies by event — check each bookmaker entry.

Splits use the same bookmaker slugs as odds under bookmakers[].bookmaker (e.g. draftkings, fanduel).

Examples

Tonight’s NBA games with odds inlined:

curl
curl "https://lumify.ai/v1/events?sport=nba&status=scheduled&include_odds=true&limit=5" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
from lumify import Lumify

client = Lumify(api_key="YOUR_API_KEY")
page = client.events.list(
    sport="nba",
    status="scheduled",
    include_odds=True,
    limit=5,
)
for event in page["events"]:
    print(event["id"], event["name"], event.get("odds"))
TypeScript
import { Lumify } from "@lumifyai/sdk";

const client = new Lumify({ apiKey: "YOUR_API_KEY" });
const { events } = await client.events.list({
  sport: "nba",
  status: "scheduled",
  includeOdds: true,
  limit: 5,
});
events.forEach(e => console.log(e.id, e.name, e.odds));

Eastern Conference teams:

curl
curl "https://lumify.ai/v1/teams?sport=nba&conference=Eastern" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
page = client.teams.list(sport="nba", conference="Eastern")
for team in page.get("data") or []:
    print(team["id"], team.get("name"))
TypeScript
const { data: east } = await client.teams.list({
  sport: "nba",
  conference: "Eastern",
});
east.forEach(t => console.log(t.id, t.name));

Sample odds shape (abridged NBA event — totals market):

json
{
  "event_id": 4812,
  "available": true,
  "bookmakers": [
    {
      "bookmaker": "pinnacle",
      "markets": [
        {
          "key": "totals",
          "label": "total",
          "outcomes": [
            { "outcome": "Over", "price": -108, "point": 224.5 },
            { "outcome": "Under", "price": -112, "point": 224.5 }
          ]
        }
      ],
      "captured_at": "2026-05-13T23:05:00Z"
    }
  ]
}

Freshness

FeedCadenceFit
Live scores~1 minute (+ SSE/webhooks)Scoreboards, in-game agents
Odds ingest~30 minutes (2-min response cache)Research, line shop, alerts — not HFT
SplitsPre-game ingestStops updating once tip-off is live
IntelligenceNot available for NBA yet

Pricing

CallCredits
Most successful GETs (events, score, splits, teams, …)1
Multi-book odds (bookmaker=all or a list)2
Compound include_odds+1–2
available: false / errors0

Free Tier: 1,000 credits that never expire. Instant trial: 100 credits / 14 days, no signup. Details: /pricing.

For agents: machine-readable twin at /sports/nba-api.md. MCP tools: list_events, list_teams, get_odds, get_splits — setup at /sports-mcp-server.

FAQ

What does the NBA API include?

Filter with sport=nba (league slug nba) for schedules, live scores (quarters + clock), teams/players (including conference filters), multi-book moneyline/spread/totals, and public betting splits. Same event IDs across every layer.

Is NBA bet intelligence available?

Not yet. GET /v1/events/{id}/intelligence returns available: false for NBA today. Schedules, scores, odds, and splits are live. Intelligence is already shipping for MLB, NFL, NCAAF, tennis, FIFA World Cup soccer, and MLS — NBA is on the roadmap.

Do you support NBA player props or player game logs?

No player props, futures, or alternate lines on odds v1. Raw /stats (Data layer) is live for soccer, MLB, and tennis singles — not NBA yet. Use schedules, scores, odds, and splits until those layers ship.

How do NBA betting splits work?

GET /v1/events/{id}/splits returns public ticket% vs handle% for NBA pre-game — same coverage class as MLB/NHL/NFL. Splits stop updating once tip-off goes live. Useful for sharp-vs-public divergence without waiting on an intelligence pipeline.

How is NBA different from NCAAB in the API?

Use sport=nba vs sport=ncaab. Both expose schedules, scores, and odds. NBA has betting splits; NCAAB does not on this feed. Neither has Lumify intelligence yet. This page is the NBA landing only.

Start with the NBA API

Create a free key — or use an instant trial key with no signup — and list tonight’s NBA slate in under a minute.