Soccer
Soccer API for Scores, Odds & AI Agents
One event graph for club soccer — kickoff schedules, half-aware live scores, 3-way moneyline across 16 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 |
| Team totals | GET …/team-props | Each team's full-game goals Over/Under + this-event score |
| Period odds | GET …/period-odds | First-half spreads/totals (native 1H) |
| Stats (Data) | GET …/stats | Soccer-native strength, form, H2H, rest, rates, lineups |
| Intelligence | GET …/intelligence | Live for MLS + big-five; UCL returns available: false |
| Splits | GET …/splits | Not available for soccer |
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 |
| Premier League | epl | Yes (in season) | Probability + Price surface |
| La Liga | la_liga | Yes (in season) | Probability + Price surface |
| Serie A | serie_a | Yes (in season) | Probability + Price surface |
| Bundesliga | bundesliga | Yes (in season) | Probability + Price surface |
| Ligue 1 | ligue_1 | Yes (in season) | Probability + Price surface |
| UEFA Champions League | ucl | Yes (in season) | — / available: false |
/stats is soccer-native across these competitions when aggregates resolve.
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 or bookmaker=all = 1 credit.
Player props: goals, assists, shots on target, and fouls committed — catalog. Soccer /odds stays 3-way moneyline / Asian handicap / totals. History: GET /v1/events/{id}/odds/history. Full books: Sports Odds API.
Stats (Data layer)
GET /v1/events/{id}/stats returns soccer-native team aggregates (strength, form, H2H, rest, rates, lineups). No confidence or narrative. Check available. Fields: API reference — stats.
Intelligence
- MLS + big-five (EPL, La Liga, Serie A, Bundesliga, Ligue 1) — customer probability surface + Price overlay (probability / fair_price + fair / edges_by_book / best vs Pinnacle) and main-line ev (Beta). Outcomes in a market sum to 1. Framework plumbing omitted. best.edge is a line-shopping price gap vs Pinnacle. has_recommend stays false until Edge publishes.
- UCL — schedules, scores, odds, and /stats today; intelligence returns available: false.
Tokens: ML_HOME, ML_AWAY, ML_DRAW, SPREAD_HOME, SPREAD_AWAY, OVER, UNDER.
Sportsbooks
Odds keys: pinnacle, fanduel, draftkings, betmgm, caesars, bet365, circa, westgate, wynn, south_point, stations, hardrock, betonline, betr, betrivers, lowvig. Bovada is not on soccer. 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 | ~10 minutes (2-min response cache) | Research / agents — not HFT |
| Stats | After aggregates resolve | Data layer for analysis |
| Intelligence | After publish / analysis runs | MLS + big-five; UCL is available: false |
Pricing
| Call | Credits |
|---|---|
| Most successful GETs (events, score, stats, 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.
For agents: machine-readable twin at /sports/soccer-api.md. MCP: list_events, get_odds, get_stats, get_intelligence, list_ev — /sports-mcp-server.
FAQ
Filter with sport=soccer and optional league (e.g. mls, epl) for schedules, live scores (1H/2H/ET/PKs), teams/players, 3-way moneyline / Asian handicap / totals across 16 books, and soccer-native /stats. Predictive intelligence (bets[]) is live for MLS + the big-five (EPL, La Liga, Serie A, Bundesliga, Ligue 1). UCL returns available: false. 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.
Yes for MLS + the big-five (EPL, La Liga, Serie A, Bundesliga, Ligue 1) — same probability / Price surface. UCL returns available: false. has_recommend stays false until Edge. Fields: API reference.
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.