If you searched for a SofaScore API, a FlashScore API, or a FotMob API, this is that feed as JSON. The Live Scores API exposes all three brands under one Hub subscription: matches in play, fixtures for a date, match detail, and statistics. SofaScore and FlashScore also return a timeline of goals, cards, and substitutions. Take the match ID from the live list or from fixtures, then load the detail on the same brand. Coverage is football only. There are no betting odds.
Zyla API Hub lists more than 10,000 public APIs. You subscribe per listing (monthly or annual, with an included quota). There is no Free Plan. Your first Hub API includes a 7-day free trial (up to 50 requests). First-level support intermediates with the provider. Listings that fail continuous monitoring are discontinued.
Use cases
- Live scoreboard (SofaScore, FlashScore, or FotMob). Poll that brand’s live list and render
home,away,score, andstatus. Official SofaScore sample: Mozambique U20 3–0 Mauritius U20, status1st half,source_event_id17068223. Live FotMob sample on2026-09-23: Japan U23 3–0 Thailand U23, status74’,source_event_id6052479. - Match center. Pass that
source_event_idinto the same brand’s detail and statistics. SofaScore and FlashScore also have incidents. Official SofaScore detail: Real Oviedo 0–0 Osasuna, LaLiga, statusEnded, event14083104. Live FotMob detail: AFC Bournemouth 0–1 Liverpool, Premier League,match_id5795455. - Push / editorial alerts. On SofaScore or FlashScore, filter incidents by
type(goal,card,substitution,period). Same Oviedo fixture prints 16 incidents, including a 90'FTperiod marker and late substitutions. FotMob has no incidents path in this listing. - Fixture planner. SofaScore: list categories, then tournaments, then fixtures for a date. Official Premier League sample for
unique_tournament_id=17on2026-09-21includes Bournemouth 0–1 Liverpool FC,source_event_id16363648. FotMob fixtures take a UTCdate=YYYY-MM-DDand return that day’s board (paginated), including scheduled matches. - Three brands, one subscription — three ID namespaces. SofaScore IDs are integers (
14083104). FlashScore IDs are strings such as2DZAXwBl. FotMob IDs are integers too (5795455) but they are not SofaScore IDs. Do not pass a SofaScore event into a FlashScore or FotMob path, or the reverse.
1. Live board — SofaScore
SofaScore Football Live Matches requires sport=football. Official docs sample below (first match, selected fields).
API request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://zylalabs.com/api/13865/live+scores+api/31890/sofascore+football+live+matches?sport=football"
JSON response
{
"source": "sofascore",
"count": 38,
"matches": [
{
"source": "sofascore",
"source_event_id": 17068223,
"sport": "football",
"status": "1st half",
"status_code": 6,
"start_timestamp": 1790082000,
"home": { "id": 336931, "name": "Mozambique U20", "short_name": "Mozambique U20" },
"away": { "id": 273621, "name": "Mauritius U20", "short_name": null },
"score": { "home": 3, "away": 0, "period": null },
"tournament": {
"id": 139176,
"unique_tournament_id": 23669,
"name": "COSAFA U20 Championship, Group A",
"country": "Africa"
}
}
]
}
2. Match center — detail, stats, incidents
Official docs example event: 14083104. The Hub listing’s generated curl sometimes writes &event_id=Required; the working query is ?event_id=14083104.
API request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://zylalabs.com/api/13865/live+scores+api/31895/sofascore+match+detail+by+event+id?event_id=14083104"
SofaScore Match Detail by Event ID official sample:
JSON response
{
"source": "sofascore",
"source_event_id": 14083104,
"sport": "football",
"status": "Ended",
"status_code": 100,
"start_timestamp": 1762200000,
"home": { "id": 2851, "name": "Real Oviedo", "short_name": "Oviedo" },
"away": { "id": 2820, "name": "Osasuna", "short_name": "Osasuna" },
"score": { "home": 0, "away": 0, "period": null },
"tournament": {
"id": 36,
"unique_tournament_id": 8,
"name": "LaLiga",
"country": "Spain"
}
}
SofaScore Match Statistics by Event ID on the same event (Match overview, selected items):
JSON response
{
"source": "sofascore",
"source_event_id": 14083104,
"statistics": [
{
"period": "ALL",
"group": "Match overview",
"items": [
{ "name": "Ball possession", "home": "53%", "away": "47%", "key": "ballPossession" },
{ "name": "Expected goals", "home": "0.96", "away": "0.82", "key": "expectedGoals" },
{ "name": "Total shots", "home": "8", "away": "11", "key": "totalShotsOnGoal" },
{ "name": "Corner kicks", "home": "4", "away": "2", "key": "cornerKicks" }
]
}
]
}
SofaScore Match Incidents by Event ID official sample (count 16; first two rows):
JSON response
{
"source": "sofascore",
"source_event_id": 14083104,
"count": 16,
"incidents": [
{
"time": 90,
"added_time": 999,
"type": "period",
"text": "FT",
"home_score": 0,
"away_score": 0
},
{
"id": 125073971,
"time": 86,
"type": "substitution",
"player": null
}
]
}
This fixture ended 0–0, so the printed types are period markers and substitutions, not goals. Live calls replace the event.
3. Fixtures by league — Premier League
Walk SofaScore List Football Categories → List Tournaments by Category → Fixtures by Date and League. There is no “full world” fixtures call: you must pass category_id or unique_tournament_id.
API request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://zylalabs.com/api/13865/live+scores+api/31894/sofascore+fixtures+by+date+and+league?date=2026-09-21&unique_tournament_id=17"
JSON response
{
"source": "sofascore",
"count": 13,
"matches": [
{
"source_event_id": 16363648,
"status": "Ended",
"home": { "name": "Bournemouth" },
"away": { "name": "Liverpool FC" },
"score": { "home": 0, "away": 1 },
"tournament": {
"unique_tournament_id": 17,
"name": "Premier League",
"country": "England"
}
}
]
}
4. FlashScore live — same job, different IDs
FlashScore Football Live Matches needs no sport query. Official sample count 211. One in-play row with a score (slugs vietnam / uzbekistan):
API request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://zylalabs.com/api/13865/live+scores+api/31898/flashscore+football+live+matches"
JSON response
{
"source": "flashscore",
"count": 211,
"matches": [
{
"source_event_id": "2DZAXwBl",
"sport": "football",
"status_code": 3,
"is_live": true,
"home": { "id": "pp1OoFY8", "short_code": "VIE", "slug": "vietnam" },
"away": { "id": "bJcArLW4", "short_code": "UZB", "slug": "uzbekistan" },
"score": { "home": 0, "away": 2 }
}
]
}
Official FlashScore display names in that dump can be in the feed locale. Use slug / short_code if you need a stable Latin key. Then call FlashScore Match Detail by Match ID, Match Statistics, or Match Summary with match_id from source_event_id. Official summary fixture: zs3PZaZa (15 incidents; labels in the feed locale).
5. FotMob live, fixtures, detail, and stats
FotMob Football Live Matches takes an optional UTC date=YYYY-MM-DD (defaults to today) and returns only in-play football. Live origin sample on 2026-09-23 (count 2; first match):
API request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://zylalabs.com/api/13865/live+scores+api/32069/fotmob+football+live+matches?date=2026-09-23"
JSON response
{
"source": "fotmob",
"count": 2,
"matches": [
{
"source": "fotmob",
"source_event_id": 6052479,
"sport": "football",
"status": "74’",
"status_code": 3,
"start_timestamp": 1790159400,
"home": { "id": 298067, "name": "Japan U23", "short_name": "Japan U23" },
"away": { "id": 623768, "name": "Thailand U23", "short_name": "Thailand U23" },
"score": { "home": 3, "away": 0 },
"tournament": { "id": 944005, "name": "Asian Games Grp. A", "country": "INT" },
"meta": { "is_live": true }
}
]
}
FotMob Fixtures by Date uses the same date and returns the full UTC day, including scheduled matches (paginated). Then pass source_event_id as match_id. The Hub listing’s generated curl sometimes writes &match_id=Required; the working query is ?match_id=5795455.
API request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://zylalabs.com/api/13865/live+scores+api/32085/fotmob+match+detail+by+match+id?match_id=5795455"
FotMob Match Detail by Match ID live origin sample (docs fixture 5795455):
JSON response
{
"source": "fotmob",
"source_event_id": "5795455",
"sport": "football",
"status": "Finished",
"start_timestamp": 1789909200,
"home": { "id": 8678, "name": "AFC Bournemouth", "short_name": "AFC Bournemouth" },
"away": { "id": 8650, "name": "Liverpool", "short_name": "Liverpool" },
"score": { "home": 0, "away": 1 },
"tournament": { "id": 47, "name": "Premier League", "country": "ENG" },
"meta": { "is_live": false }
}
That Bournemouth–Liverpool result is the same score as the SofaScore Premier League fixture above, on a different ID. Do not reuse 16363648 on a FotMob path.
FotMob Match Statistics by Match ID on the same match (count 141; first three Top stats). The array is empty when the match has no stats coverage.
API request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://zylalabs.com/api/13865/live+scores+api/32093/fotmob+match+statistics+by+match+id?match_id=5795455"
JSON response
{
"source": "fotmob",
"source_event_id": 5795455,
"count": 141,
"statistics": [
{ "period": "All", "group": "Top stats", "name": "Ball possession", "home": "46", "away": "54" },
{ "period": "All", "group": "Top stats", "name": "Expected goals (xG)", "home": "0.79", "away": "1.65" },
{ "period": "All", "group": "Top stats", "name": "Total shots", "home": "9", "away": "12" }
]
}
What this API does not return
- Betting odds, a momentum tracker, tennis, NBA, or other sports.
- A single ID that works on SofaScore, FlashScore, and FotMob. SofaScore
14083104is not a FlashScorematch_idand is not a FotMobmatch_id. - FotMob incidents (goals / cards / substitutions as a timeline). Use SofaScore or FlashScore for that job.
MCP
Connect https://mcp.zylalabs.com/mcp. get_api_info and call_api take the Hub listing number for this API (13865) and an endpoint id (live SofaScore is 31890, live FlashScore is 31898, live FotMob is 32069). That is the only place the number matters. Billing is still the Hub subscription plus quota, not pay-per-call.
Go live
1. Register — 7-day trial on the first Hub API (or 50 requests).
2. Subscribe on the Live Scores API page.
3. GET live on the brand you want: SofaScore with sport=football, the FlashScore live path, or FotMob live with date=YYYY-MM-DD.
4. Reuse source_event_id for detail and statistics on that same brand (plus incidents on SofaScore / FlashScore).
Is Hub billing pay-per-call?
No. Hub billing is a subscription plus quota per API. MCP call_api uses that same subscription.