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.
| Layer | Endpoint | NFL notes |
|---|---|---|
| Schedule / board | GET /v1/events | sport=nfl; status, date, include_odds / include_scores |
| Live score | GET /v1/events/{id}/score · SSE | Periods 1–4 / OT; clock when available |
| Odds | GET …/odds · …/odds/history | Two-way h2h, spreads, totals · 9 books |
| Splits | GET …/splits | Pre-game ticket% vs handle% (in-season) |
| Intelligence | GET …/intelligence | Seasonal points model · NFL signal labels |
| Raw stats | GET …/stats | Not 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 "https://lumify.ai/v1/events?sport=nfl&status=scheduled&include_odds=true&limit=5" \
-H "Authorization: Bearer YOUR_API_KEY"
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"))
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 "https://lumify.ai/v1/events/4821/intelligence" \
-H "Authorization: Bearer YOUR_API_KEY"
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"))
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):
{
"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
| Feed | Cadence | Fit |
|---|---|---|
| Live scores | ~1 minute (+ SSE/webhooks) | Scoreboards, in-game agents |
| Odds ingest | ~30 minutes (2-min response cache) | Research, line shop, alerts — not HFT |
| Splits | Pre-game ingest | Stops updating once the game is live |
| Intelligence | After analysis runs (in-season) | available: false offseason / pre-run |
Pricing
| Call | Credits |
|---|---|
| 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 / errors | 0 |
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
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.
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.
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.
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.
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.