Soccer
Soccer API for Scores, Odds & AI Agents
One event graph for club and tournament soccer — kickoff schedules, half-aware live scores, 3-way moneyline across nine books, soccer-native stats, and intelligence where each league’s pipeline is live.
Available data
Filter with sport=soccer and a league slug when you care about one competition. Discover seasons with GET /v1/seasons?sport=soccer.
| Layer | Endpoint | Soccer notes |
|---|---|---|
| Schedule / board | GET /v1/events | sport=soccer + optional league |
| Live score | GET …/score · SSE | 1H / 2H / ET* / PKs; clock e.g. 67' |
| Odds | GET …/odds · history | 3-way h2h (+ Draw), spreads, totals |
| Stats (Data) | GET …/stats | Soccer-native strength, form, H2H, rest, rates, lineups |
| Intelligence | GET …/intelligence | Live for MLS + FIFA WC; check available elsewhere |
| Splits | GET …/splits | Not available for soccer |
Soccer API / football API intent lives here. Major leagues are sections of this page — not separate thin URLs (no /sports/epl-api yet). Cross-sport odds depth: /sports-odds-api.
Leagues
One page, many slugs. Use league= to narrow; omit it to list across soccer.
| Competition | Slug | Schedules / scores / odds | Intelligence |
|---|---|---|---|
| MLS | mls | Yes (in season) | Probability + Price surface |
| FIFA World Cup | fifa_world_cup | Yes (tournament window) | Points model (WC signals) |
| Premier League | epl | Yes (in season) | Data+odds; check available |
| La Liga | la_liga | Yes (in season) | Data+odds; check available |
| Serie A | serie_a | Yes (in season) | Data+odds; check available |
| Bundesliga | bundesliga | Yes (in season) | Data+odds; check available |
| Ligue 1 | ligue_1 | Yes (in season) | Data+odds; check available |
| UEFA Champions League | ucl | Yes (in season) | Data+odds; check available |
/stats is soccer-native across these competitions when aggregates resolve. World Cup TBD placeholders (e.g. “Round of 32 Winner”) return available: false on odds until teams are known.
Schedules
GET /v1/events?sport=soccer — add league=mls (or epl, …). Narrow by status, date or from/to (max 90 days/request), paginate with after_id / limit.
Compound with include_odds=true / include_scores=true for matchday boards in one round trip.
Scores
Soccer period labels: "1H", "2H", "ET1", "ET2", "PKs". Clock examples: "45'+2", "67'".
- GET /v1/events?sport=soccer&status=inprogress&include_scores=true
- GET /v1/events/{id}/score — lightweight poll
- GET /v1/events/{id}/stream — SSE or signed webhooks
Demo: live scoreboard use case.
Odds
Soccer moneyline is 3-way: home, away, and Draw under h2h. Spreads use Asian-style goal lines (e.g. -0.5 / +0.5). Totals are Over/Under. Default Pinnacle = 1 credit; bookmaker=all = 2.
No player props, futures, or alternate lines in v1. History: GET /v1/events/{id}/odds/history. Full books: Sports Odds API.
Stats (Data layer)
GET /v1/events/{id}/stats — soccer-native aggregates: team strength (league table PPG or FIFA rank for WC), recent form, H2H, rest days, home/away splits, boxscore rates, SOS, lineups. No confidence or narrative. Always check available.
Intelligence
Two shapes under one sport — branch correctly:
- MLS — probability model + Price surface (fair / edges_by_book / best vs Pinnacle). Outcomes in a market sum to 1. Price gap ≠ EV.
- FIFA World Cup — points model with confidence, signals._labels (FIFA Ranking Edge, Tournament Context, Travel/Neutral, …), rationale.
- EPL / big-five / UCL — schedules, scores, odds, and /stats today; treat intelligence as available: false until that league’s overlay is live.
Tokens: ML_HOME, ML_AWAY, ML_DRAW, SPREAD_HOME, SPREAD_AWAY, OVER, UNDER.
Sportsbooks
Odds keys: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, hardrock, betonline. Per-event availability varies — especially on EU club fixtures. MLS Price soft set is narrower than the full odds list; always read the payload.
Examples
MLS slate with odds:
curl "https://lumify.ai/v1/events?sport=soccer&league=mls&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="soccer", league="mls", status="scheduled", include_odds=True, limit=5, ) for event in page["events"]: print(event["id"], event["name"])
import { Lumify } from "@lumifyai/sdk"; const client = new Lumify({ apiKey: "YOUR_API_KEY" }); const { events } = await client.events.list({ sport: "soccer", league: "mls", status: "scheduled", includeOdds: true, limit: 5, }); events.forEach(e => console.log(e.id, e.name));
Premier League weekend board:
curl "https://lumify.ai/v1/events?sport=soccer&league=epl&status=scheduled&include_odds=true&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
epl = client.events.list( sport="soccer", league="epl", status="scheduled", include_odds=True, limit=10, )
const { events: epl } = await client.events.list({ sport: "soccer", league: "epl", status: "scheduled", includeOdds: true, limit: 10, });
Sample 3-way moneyline (abridged):
{
"event_id": 9201,
"available": true,
"bookmakers": [
{
"bookmaker": "pinnacle",
"markets": [
{
"key": "h2h",
"label": "moneyline",
"outcomes": [
{ "outcome": "Inter Miami CF", "price": 145, "point": null },
{ "outcome": "Draw", "price": 240, "point": null },
{ "outcome": "LAFC", "price": 175, "point": null }
]
}
],
"captured_at": "2026-08-10T18:00:00Z"
}
]
}
Freshness
| Feed | Cadence | Fit |
|---|---|---|
| Live scores | ~1 minute (+ SSE/webhooks) | Matchday boards |
| Odds ingest | ~30 minutes (2-min response cache) | Research / agents — not HFT |
| Stats | After aggregates resolve | Data layer for analysis |
| Intelligence | After publish / analysis runs | MLS + WC first; check available |
Pricing
| Call | Credits |
|---|---|
| Most successful GETs (events, score, stats, intelligence, …) | 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/soccer-api.md. MCP: list_events, get_odds, get_stats, get_intelligence — /sports-mcp-server.
FAQ
Filter with sport=soccer and optional league (e.g. mls, epl, fifa_world_cup) for schedules, live scores (1H/2H/ET/PKs), teams/players, 3-way moneyline / Asian handicap / totals across nine books, and soccer-native /stats. Intelligence is live for MLS and FIFA World Cup today — other club leagues may be data+odds until their overlay ships. No betting splits for soccer.
Soccer h2h includes Home, Away, and Draw. Intelligence tokens are ML_HOME / ML_AWAY / ML_DRAW (plus spreads and totals). ML_DRAW is match-level — team_id is null so you can sum exposure by team without double-counting the draw.
MLS uses the probability / market-anchor shape with a Price surface (fair / edges_by_book / best vs Pinnacle — price gap ≠ EV). FIFA World Cup uses the points model (confidence, soccer signal labels, rationale). Always branch on league / presence of probability vs confidence_score.
Not yet. EPL, La Liga, Serie A, Bundesliga, Ligue 1, and UCL are sections of this page — filter with league=epl (etc.). Thin per-league micros ship only if Search Console shows distinct demand after this landing ranks.
No. Public ticket%/handle% splits cover MLB/NBA/NHL/NFL only. For soccer, use odds, /stats, and intelligence (where available) on the same event IDs.
Start with the Soccer API
Create a free key — or use an instant trial key with no signup — and list an MLS or EPL slate in under a minute.