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

NFL

NFL API for Scores, Schedules, Odds & AI Agents

One event graph for the NFL — schedules, quarter-aware live scores, nine-book moneyline/spread/totals, public splits, and football-specific bet intelligence agents can reason over.

Available data

Everything below filters on the stable slug sport=nfl (league nfl). Discover seasons with GET /v1/seasons?sport=nfl and teams with GET /v1/teams?sport=nfl.

LayerEndpointNFL notes
Schedule / boardGET /v1/eventssport=nfl; status, date, include_odds / include_scores
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 …/intelligenceSeasonal points model · NFL signal labels
Raw statsGET …/statsNot yet for NFL — use intelligence until a Data path ships

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

Schedules

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

Collapse round trips with include_odds=true or include_scores=true on the list or on GET /v1/events/{id}. Historical lookbacks work year-round; live intelligence is seasonal.

Scores

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

  • GET /v1/events?sport=nfl&status=inprogress&include_scores=true — Sunday 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

NFL markets are two-way: moneyline (h2h), point spreads, and game totals. 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 and open→current deltas on NFL sides and totals. No player props or alternate lines in v1.

Full bookmaker list and normalization notes: Sports Odds API.

Intelligence & splits

NFL uses the points-model intelligence shape (confidence, coverage, signals, validator, narrative/rationale, attribution) — seasonal. Bet tokens: ML_P1 / ML_P2 (home/away), SPREAD_P1 / SPREAD_P2, OVER / UNDER.

Signal columns map to football concepts with human labels in signals._labels, including:

  • QB Edge · Offensive Efficiency · Defensive Strength
  • Situational / Weather · Recent Form · Head-to-Head
  • Market Odds · Research Alignment · Betting Splits

GET /v1/events/{id}/splits feeds the splits signal when sharp-vs-public divergence is significant. Always check available before reading bets — offseason and pre-pipeline games return free empty payloads.

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

Upcoming NFL games with odds inlined:

curl
curl "https://lumify.ai/v1/events?sport=nfl&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="nfl",
    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: "nfl",
  status: "scheduled",
  includeOdds: true,
  limit: 5,
});
events.forEach(e => console.log(e.id, e.name, e.odds));

Intelligence for a kickoff (1 credit when available):

curl
curl "https://lumify.ai/v1/events/4821/intelligence" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
intel = client.events.intelligence(4821)
if intel.get("available"):
    for bet in intel.get("bets") or []:
        print(bet["token"], bet.get("confidence_score"), bet.get("signals", {}).get("_labels"))
TypeScript
const intel = await client.events.intelligence(4821);
if (intel.available) {
  for (const bet of intel.bets ?? []) {
    console.log(bet.token, bet.confidence_score, bet.signals?._labels);
  }
}

Sample odds shape (abridged NFL event):

json
{
  "event_id": 4821,
  "available": true,
  "bookmakers": [
    {
      "bookmaker": "pinnacle",
      "markets": [
        {
          "key": "spreads",
          "label": "spread",
          "outcomes": [
            { "outcome": "Kansas City Chiefs", "price": -110, "point": -3.5 },
            { "outcome": "Buffalo Bills", "price": -110, "point": 3.5 }
          ]
        }
      ],
      "captured_at": "2026-09-14T17:02: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 the game is live
IntelligenceAfter analysis runs (in-season)available: false offseason / pre-run

Pricing

CallCredits
Most successful GETs (events, score, intelligence, splits, …)1
Multi-book odds (bookmaker=all or a list)2
Compound include_odds / include_intelligence+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/nfl-api.md. MCP tools: list_events, get_odds, get_splits, get_intelligence — setup at /sports-mcp-server.

FAQ

What does the NFL API include?

Filter with sport=nfl (league slug nfl) for schedules, live scores (quarters + clock), teams/players, multi-book moneyline/spread/totals, public betting splits, and seasonal bet intelligence (confidence, football-specific signals, rationale). Same event IDs across every layer.

Is NFL intelligence available in the offseason?

Analysis jobs self-skip when there is no slate — expect available: false on /intelligence outside the football season. Schedules, historical events (90-day lookback per request), and odds history still work when data has been ingested.

Do you support NFL player props or fantasy box scores?

No player props, futures, or alternate lines on odds v1. Raw /stats (Data layer) is live for soccer, MLB, and tennis singles today — not NFL yet; use /intelligence for judgment and box-adjacent context until an NFL Data path ships.

How do NFL betting splits work?

GET /v1/events/{id}/splits returns public ticket% vs handle% for NFL pre-game — same coverage class as MLB/NBA/NHL. Splits are not updated once the game goes live. NCAAF splits are not available on this feed.

How is NFL different from NCAAF in the API?

Use sport=nfl vs sport=ncaaf. Both expose schedules, scores, odds, and seasonal points-model intelligence with P1/P2 bet tokens. NFL has betting splits and NFL-labeled signals (QB Edge, etc.); NCAAF uses SP+/efficiency-style signals and has no splits. This page is the NFL landing only.

Start with the NFL API

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