Data
Sports Data API — Scores, Schedules, Odds & Intelligence
One agent-ready sports API for schedules, live scores, multi-book odds, and explainable bet intelligence — structured JSON you can reason over, not scrapes or opaque feeds.
Coverage
Discover sports and seasons programmatically, then filter every other endpoint with stable slugs:
- GET /v1/sports — catalog of sport slugs
- GET /v1/seasons — season windows (current_only=true)
- GET /v1/teams / GET /v1/players — entity lookups
- GET /v1/events — the schedule and live board
Intelligence (probability / fair price / Price overlay) is live for MLB, NFL, NCAAF, tennis, and soccer (MLS + big-five). Other sports still expose schedules, scores, and odds where ingested — check available and docs coverage tables rather than assuming every league has every layer.
Schedules
List events with sport, league, status, and date filters. Historical lookbacks are capped at 90 days per request. Pagination uses cursor-style after_id / limit.
Common filters: sport, league, status (scheduled / inprogress / final), date or from/to, plus include_odds / include_scores to collapse round trips.
Live scores
Three ways to keep a board fresh:
- GET /v1/events?status=inprogress&include_scores=true — discover live games with scores inlined
- GET /v1/events/{id}/score — lightweight poll (~15s cache while live)
- GET /v1/events/{id}/stream — SSE push (event: score) or signed webhooks
Scores include participants, period_label, and clock when available. Keep API keys server-side — see the live scoreboard use case for a cloneable demo.
Odds
Moneyline, spread, and totals across 17 sportsbooks on the same event IDs — plus line-movement history. Default single-book calls use Pinnacle; bookmaker=all is the same 1 credit.
Full sportsbook list, market shape, and history examples: Sports Odds API. Embed odds on event detail with ?include_odds=true.
Intelligence & stats
Lumify splits Data from judgment:
- GET /v1/events/{id}/stats — raw, reproducible aggregates (soccer, MLB, tennis singles, NFL, NCAAF, NBA, NCAAB, NHL today). Sport-native payloads; no scoring or narrative.
- GET /v1/events/{id}/player-props — NFL/NCAAF/NBA/NCAAB/NHL/MLB/soccer settleable player-prop mains + live box progress.
- GET /v1/events/{id}/intelligence — predictive probability, fair price, and Price overlay. Main-line ev (Beta) on soccer, MLB, tennis, NFL, and NCAAF.
- GET /v1/intelligence/ev — sport-level pregame main-line EV scan (MCP list_ev, market=h2h|spreads|totals). Same number as bets[].ev.
- GET /v1/intelligence/forecasts — daily board of forecasted player-prop wagers (MCP list_forecasts), ranked by conviction. Also on /intelligence as forecasts[]. How to read: /docs/understanding-odds#forecasts.
- GET /v1/events/{id}/splits — public ticket% vs handle% (MLB/NBA/NHL/NFL in-season).
Agents that need “why,” not just “what,” call intelligence on the same IDs they already use for schedules and scores.
Examples
Today’s MLB schedule with odds inlined:
curl "https://lumify.ai/v1/events?sport=mlb&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="mlb", 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: "mlb", status: "scheduled", includeOdds: true, limit: 5, }); events.forEach(e => console.log(e.id, e.name, e.odds));
Live games with scores:
curl "https://lumify.ai/v1/events?status=inprogress&include_scores=true&sort=status" \
-H "Authorization: Bearer YOUR_API_KEY"
live = client.events.list( status="inprogress", include_scores=True, sort="status", ) for event in live["events"]: print(event["id"], event["name"], event.get("period_label"))
const { events: live } = await client.events.list({ status: "inprogress", includeScores: true, sort: "status", }); live.forEach(e => console.log(e.id, e.name, e.period_label));
SDKs & MCP
Official clients: pip install lumify-sdk · npm i @lumifyai/sdk. Hosted Streamable-HTTP MCP at https://lumify.ai/mcp exposes the same surface as tools (list_events, get_live_score, get_odds, get_intelligence, list_ev, …) with per-call credit metering.
Free POST /v1/estimate / MCP estimate_cost before spending. Agent setup: /docs/ai.
For agents: machine-readable twin at /sports-data-api.md.
Pricing
| Call | Credits |
|---|---|
| Most successful GETs (events, score, intelligence, …) | 1 |
| Multi-book odds (bookmaker=all or a list) | 1 |
| available: false / errors | 0 |
Free Tier: 1,000 credits that never expire. Instant trial: 100 credits / 14 days, no signup. Details: /pricing.
FAQ
A single REST + MCP surface for schedules, live scores, teams/players, multi-book odds, betting splits, raw /stats, and explainable /intelligence. One event graph — agents do not reconcile three vendors.
Schedules, scores, and odds across major US and global sports (MLB, NBA, NHL, NFL, NCAAF, NCAAB, tennis, soccer, and more via GET /v1/sports). Predictive intelligence is live today for MLB, NFL, NCAAF, tennis, and soccer (MLS + big-five). Forecasts cover MLB, NFL, NCAAF, NBA, NCAAB, and NHL. UCL returns available: false.
Scores refresh about every 1 minute (SSE/webhooks for push). Odds ingest about every 10 minutes. Use the Sports Odds API page for book/market detail.
Many feeds optimize for raw breadth. Lumify is built for agents: hosted metered MCP, instant trial keys, free cost estimates, and predictive intelligence (probability, fair price, Price overlay) on the same IDs as schedules and scores.
Yes — Free Tier includes 1,000 credits that never expire (20 req/min). Instant trial keys (100 credits, 14 days) need no signup. Most successful calls cost 1 credit. See pricing.
Start with the Sports Data API
Create a free key — or use an instant trial key with no signup — and list today’s events in under a minute.