API key Sign in, or get an instant trial key — 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, public betting splits, and Stage-1 raw team stats 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 1–4 / OT; clock when available
OddsGET …/odds · …/odds/historyTwo-way h2h, spreads, totals · 17 books
Player propsGET …/player-propsSettleable points / rebounds / assists / steals / blocks + live box progress
SplitsGET …/splitsPre-game ticket% vs handle% (in-season)
IntelligenceGET …/intelligencebets[] not yet — available: false; forecasts[] still populate
ForecastsGET /v1/intelligence/forecastsDaily board of forecasted prop wagers. MCP list_forecasts. How: /docs/forecasts
Raw statsGET …/statsStage-1 team context (record, form, H2H, rest, shooting/rebounding rates)

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; bookmaker=all is the same 1 credit.

GET /v1/events/{id}/odds/history returns recorded price/point moves between ingest cycles — useful for steam on NBA sides and totals. Game markets only — player props are a separate endpoint below. Team totals stay out of v1.

Full bookmaker list and normalization notes: Sports Odds API.

Player props

GET /v1/events/{id}/player-props (1 credit when lines exist; available:false is free) joins persisted player-prop mains to this-event player box counts and grades over / under / push once the game is final.

Market keys and which ones grade: player props catalog. Endpoint fields: API reference.

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.

NBA has no predictive bets[] yet. Splits are the sharp-vs-public signal; pair with /odds and player-prop forecasts on the same event IDs.

Raw stats

GET /v1/events/{id}/stats returns Stage-1 NBA-native team context (record, form, H2H, rest, team box rates). Check available. Fields: API reference — stats.

Sportsbooks

Odds keys: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig, bovada. 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~10 minutes (2-min response cache)Research, line shop, alerts — not HFT
SplitsPre-game ingestStops updating once tip-off is live
StatsScheduled box ingestPersist-then-read Stage-1 team context
Intelligence—Not available for NBA yet

Pricing

CallCredits
Most successful GETs (events, score, splits, teams, …)1
Multi-book odds (bookmaker=all or a list)1
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, get_stats, list_forecasts — 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, public betting splits, and Stage-1 raw /stats. Same event IDs across every layer.

Is NBA bet intelligence available?

Predictive bets[] is not yet live — GET /v1/events/{id}/intelligence returns available: false (no probability / Price overlay). Player-prop forecasts[] still populate on that payload, and the daily board is GET /v1/intelligence/forecasts (MCP list_forecasts). How: /docs/forecasts.

Do you support NBA player props or player game logs?

Yes — GET /v1/events/{id}/player-props (MCP get_player_props). Sport × market catalog (settleable vs returned-not-graded): /docs/player-props. GET /odds stays moneyline/spread/totals. Raw /stats is still Stage-1 team context.

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, odds, Stage-1 basketball-native /stats, player-prop forecasts, first-half period odds, and public splits. Neither has predictive bets[] yet. College landing: /sports/ncaab-api.

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.