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

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.

LayerEndpointSoccer notes
Schedule / boardGET /v1/eventssport=soccer + optional league
Live scoreGET …/score · SSE1H / 2H / ET* / PKs; clock e.g. 67'
OddsGET …/odds · history3-way h2h (+ Draw), spreads, totals
Stats (Data)GET …/statsSoccer-native strength, form, H2H, rest, rates, lineups
IntelligenceGET …/intelligenceLive for MLS + FIFA WC; check available elsewhere
SplitsGET …/splitsNot 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.

CompetitionSlugSchedules / scores / oddsIntelligence
MLSmlsYes (in season)Probability + Price surface
FIFA World Cupfifa_world_cupYes (tournament window)Points model (WC signals)
Premier LeagueeplYes (in season)Data+odds; check available
La Ligala_ligaYes (in season)Data+odds; check available
Serie Aserie_aYes (in season)Data+odds; check available
BundesligabundesligaYes (in season)Data+odds; check available
Ligue 1ligue_1Yes (in season)Data+odds; check available
UEFA Champions LeagueuclYes (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
curl "https://lumify.ai/v1/events?sport=soccer&league=mls&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="soccer",
    league="mls",
    status="scheduled",
    include_odds=True,
    limit=5,
)
for event in page["events"]:
    print(event["id"], event["name"])
TypeScript
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
curl "https://lumify.ai/v1/events?sport=soccer&league=epl&status=scheduled&include_odds=true&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
epl = client.events.list(
    sport="soccer",
    league="epl",
    status="scheduled",
    include_odds=True,
    limit=10,
)
TypeScript
const { events: epl } = await client.events.list({
  sport: "soccer",
  league: "epl",
  status: "scheduled",
  includeOdds: true,
  limit: 10,
});

Sample 3-way moneyline (abridged):

json
{
  "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

FeedCadenceFit
Live scores~1 minute (+ SSE/webhooks)Matchday boards
Odds ingest~30 minutes (2-min response cache)Research / agents — not HFT
StatsAfter aggregates resolveData layer for analysis
IntelligenceAfter publish / analysis runsMLS + WC first; check available

Pricing

CallCredits
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 / 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/soccer-api.md. MCP: list_events, get_odds, get_stats, get_intelligence/sports-mcp-server.

FAQ

What does the Soccer API include?

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.

Why is soccer moneyline 3-way?

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.

How does MLS intelligence differ from World Cup?

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.

Do you have a separate Premier League API page?

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.

Are soccer betting splits available?

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.