September 2026
New public overview pages for football stats and player stats
New public overview pages for football stats and player stats
- Football Stats API — player and team statistics, xG, shotmaps, per-tier archive depth, and the endpoints behind each data group.
- Football API — live scores, fixtures, lineups, statistics and odds overview.
- Player Stats API — season and per-match stat lines, ratings, transfers, national-team data.
August 2026
Football coverage refreshed: 6,400 competitions, amateur categories and per-tier archive depth
Football coverage refreshed: 6,400 competitions, amateur categories and per-tier archive depth
- Amateur tiers are separate categories —
Netherlands Amateur(categoryId1587, 38 competitions) andGermany Amateur(122, 367 competitions) are not returned under the main country categories 35 and 30. - Archive depth by tier, measured per competition: Tweede Divisie 9 seasons (18/19), Derde Divisie 6 (21/22), Vierde Divisie 5 (22/23), Regionalliga Nord/West 19 (08/09), Regionalliga Südwest/Nordost 15 (12/13), Bayern 14 (12/13), Oberliga level 19 (08/09). Dutch 1e–5e Klasse and German Kreisliga levels are current season only.
- Friendlies and continental depth: International Friendlies 24 seasons (2003), Club Friendlies 17 (2010), UEFA Champions League 31 (96/97).
- “Hoofdklasse” does not exist as a named competition; that level maps to Vierde Divisie and regional 1e Klasse divisions.
- A copy-paste script that maps seasons-available for every league worldwide via
/api/tournaments→/api/tournaments/{id}/seasons.
Odds WebSocket guarantees documented: provider scope, snapshot semantics, real cadence
Odds WebSocket guarantees documented: provider scope, snapshot semantics, real cadence
match:{matchId}:odds, measured in production on 31 August 2026:- Provider: bet365 (provider 1) only — the upstream call is
odds/1/all. No provider selector, no multi-provider stream; aproviderparameter is ignored. Multi-bookmaker odds remain REST-only on V4 (179-book catalogue). - Frames are complete snapshots, never deltas — full
{ markets[], eventId, liveStreamUrl }on every frame. - Cadence corrected: ~300ms after a match event via the NATS-triggered fetch, otherwise a change-gated ~30s refresh. The previous “sub-second” claim for odds was inaccurate; measured gaps were 24–30s while prices moved and 63–149s while they did not.
timestampis our server fetch/emit time in epoch ms, not a bookmaker-side fetch time.- Suspension/closure:
suspended: trueon the market object inside the next snapshot; removal frommarkets[]means closed. No dedicated suspend frame. - Missed updates: no sequence number or replay buffer — resubscribe and the immediate
snapshotis authoritative. Recommended watchdog: re-establish iflastFrameAtexceeds ~90s during a live match. - Player props: no WebSocket channel and no usable REST feed today. The retired V1
/bets/propositionpage is now marked as such.
New Football Coverage page: full competition catalogue and plan-independence confirmed
New Football Coverage page: full competition catalogue and plan-independence confirmed
/api/tournaments (flat catalogue), /api/countries, /api/countries/all, /api/categories/{categoryId}/tournaments, /api/leagues?country={slug}, /api/live-tournaments and /api/scheduled-tournaments/{date}, plus a copy-paste CSV export script.Path-form routing fixed for V3 sports and Water Polo V2; new quota-free sport-slug catalogue
Path-form routing fixed for V3 sports and Water Polo V2; new quota-free sport-slug catalogue
- V3 sports —
https://api.sportsapipro.com/v3/{sport}/{today|live|yesterday|tomorrow}dropped the sport segment when rewriting to the upstream feed, so period windows returned404. The sport is now re-injected for every V3 route except the sport-less globals (sports,match/{id},search). - Water Polo V2 —
https://api.sportsapipro.com/v2/waterpolo/...returned404because the service did not accept the/apiprefix emitted by the path form. Both/liveand/api/livenow resolve identically. - Upstream timeouts — proxy timeouts previously surfaced as
502. They now return504withcode: "upstream_timeout", so retry logic can distinguish a slow upstream from a genuine bad-gateway failure.
GET /reference/sports — a quota-free, key-free catalogue of every sport slug per version, including the version-specific spellings (waterpolo on V2/V6 vs water-polo on V3, hockey vs ice-hockey on V4).Motorsport V2 exposes the winner only — no per-driver classification
Motorsport V2 exposes the winner only — no per-driver classification
40, season 214140) confirmed that motorsport stages and sub-stages carry winner and nothing else. There is no results[] array, no positions 2-N, no gaps, lap times, grid or per-race championship points, and /results, /classification, /standings, /laps and /startgrid all return 404.The motorsport race reference previously implied a finishing results[] block was embedded in the stage payload. That was inaccurate and has been corrected. Top-N settlement is not supportable on Motorsport V2 today; only “who won” is. Constructor championship tables remain available at the season level.V6 images and logos now served from an authenticated V6 image endpoint
V6 images and logos now served from an authenticated V6 image endpoint
logo / image / photo values as bare filenames (e.g. 3315dd709ea94735a8a138478133a2a3.png!w80). The reference previously told you to prefix them with https://img.sportsapipro.com/...; that host was not serving traffic and returned a Cloudflare 522 for every request. There was no other V6 image route.V6 images are now served from the same host as your V6 data:{type}:teams,competitions,tournaments,players,coaches,referees,venues,countries.- The
!w80thumbnail suffix is passed through and works. - Omit the type (
/v6/{sport}/images/{filename}) to have the asset type resolved automatically. - Authenticated and quota-counted, like V2 images. Cached 24 hours. Missing assets return
404 {"error":"Image not found upstream"}; unknown types return400.
img.sportsapipro.com host is retired and the V6 reference has been corrected.Manager career endpoint path corrected to /career-history
Manager career endpoint path corrected to /career-history
GET /api/managers/{managerId}/career. That route does not exist and returns 404 for every manager ID. The working endpoint is:/career and /career-history return 404 — those pages now carry an explicit note. Manager details (/api/managers/{id}), manager images and manager events endpoints are unaffected on every sport.Also corrected in openapi-football-v2.json and the dashboard Live Demo endpoint list.Cycling documentation corrected: race results are on V3, V2 is entity-only
Cycling documentation corrected: race results are on V3, V2 is entity-only
tournament/*, players/*, manager/*, venue/*, rider history sub-routes). Those endpoints were never live for cycling and return 404. They have been removed.What is accurate now:- Race and stage content is served by V3:
GET https://v3.cycling.sportsapipro.com/api/v1/cycling/{today|live|yesterday|tomorrow}. Each league is a classification (... - Overall= General Classification,... - Stage N= that stage’s result) and each event is one rider’s placing, wherehomeTeam.nameis the rider andhomeTeam.shortNameis the position.awayTeamand score objects are unused. - V2 cycling is an entity feed only:
/api/search,/api/countries,/api/countries/alland/api/teams/{id}. Riders are modelled as teams (Tadej Pogačar is307884); there is no/api/players/{id}for cycling. - V2
/api/live,/api/today,/api/schedule/{date},/api/live-tournamentsand/api/scheduled-tournaments/{date}answer200with empty arrays on every date, including Grand Tour dates. Treat them as unavailable for cycling. - Not available on any version: live GPS/telemetry, power and gradient data, per-rider in-stage splits, cycling odds, and multi-season historical backfill. V1, V4 and V6 do not carry cycling.
V6 baseball match sub-resources now return a clear 501 instead of 502
V6 baseball match sub-resources now return a clear 501 instead of 502
/lineups, /stats, /incidents, /h2h, /commentary and /tables previously hit the origin and surfaced a misleading Cloudflare 502 Bad Gateway, which looked like an outage or an authentication problem.They now return 501 with an explicit body naming the limitation and the working alternative:/match/{matchId}, /team-stats and /odds are unchanged and fully supported. Other sports are unaffected.Baseball V2 lineups: pre-game vs confirmed documented
Baseball V2 lineups: pre-game vs confirmed documented
GET /api/match/{matchId}/lineups returns a data.confirmed flag. Before the card is posted, confirmed is false and the player arrays contain only the announced probable starting pitcher — a 200 response with one player is expected pre-game, not an error. Once confirmed is true you get the full batting order, pitchers and substitutes plus per-player statistics and supportStaff.Recommended cadence: poll every 5 minutes from ~3 hours before first pitch and stop when confirmed flips to true. Lineups are published when received from the upstream feed; there is no fixed publication-delay SLA.Coverage: confirmed lineups are available for MLB. KBO and CPBL return an upstream 404 for /lineups, and NPB is not currently carried. Schedules, scores and odds are unaffected for those leagues.V6 Football statistic ID mapping corrected
V6 Football statistic ID mapping corrected
/api/v1/match/{matchId}/team-stats) were verified against live fixtures and corrected. Two IDs were previously documented reversed.- The
matchStatsobject keys —0,1,2— are the authoritative period indicators (full match, 1st half, 2nd half). The innerperiodfield is always0and is an upstream artifact; ignore it. - An absent stat ID means the metric was not provided for that fixture. A present
"0"is a real zero. 183duplicates128(total shots), and123/124remain unconfirmed.
103 and 104; no other migration is needed.Machine-readable statistic ID dictionary endpoint (V6)
Machine-readable statistic ID dictionary endpoint (V6)
- No API key required and it does not count against your daily quota.
- Response:
{ version, sport, endpoint, notes, stats }, wherestatsmaps each ID to{ name, unit, confirmed }. - Cached for one hour. Pin against
versionand refresh when it changes. - IDs are append-only: new IDs may appear, existing meanings never change.
May 2026
FIFA World Cup 2026 Endpoints (Football V2)
FIFA World Cup 2026 Endpoints (Football V2)
tournamentId / seasonId first.New convenience endpoints (base: https://api.sportsapipro.com/v2/football):GET /api/world-cup-2026— tournament infoGET /api/world-cup-2026/info— season info (host countries, 48-team format)GET /api/world-cup-2026/teams— all 48 qualified teamsGET /api/world-cup-2026/groups— all 12 groups with standingsGET /api/world-cup-2026/matches?page=0— upcoming matches (30/page)GET /api/world-cup-2026/matches/round/:round— matches by roundGET /api/world-cup-2026/rounds— round structureGET /api/world-cup-2026/knockout— bracket / draw tree
GET /api/tournament/:tournamentId/season/:seasonId/teamsGET /api/tournament/:tournamentId/season/:seasonId/events/next/:page
tournamentId=16, seasonId=58210. First match June 11, 2026 — Mexico vs South Africa.June 2025
MCP Server Migration
MCP Server Migration
May 2025
LLM Context Files for AI Integration
LLM Context Files for AI Integration
- Full context: docs.sportsapipro.com/llms-full.txt
- Short context: docs.sportsapipro.com/llms.txt
April 2025
V2 API Expanded to 25+ Sports
V2 API Expanded to 25+ Sports
- Cycling, Motorsport, Esports, Aussie Rules
- Floorball, Bandy, Minifootball
- Beach Volleyball, Water Polo
/match, /tournament, /team, /player, /manager, /global.Standardized V2 Terminology
Standardized V2 Terminology
- Events (not “games”)
- homeTeam / awayTeam (not “competitors”)
- tournament (not “competition”)
- startTimestamp (Unix epoch integer)
March 2025
WebSocket Support for Football V2
WebSocket Support for Football V2
February 2025
AI Tools Setup Guide
AI Tools Setup Guide
Fantasy Endpoints for Football V2
Fantasy Endpoints for Football V2