Squads and player records
Team rosters and player profiles, keyed by identifiers that stay stable across seasons.
Build fantasy soccer scoring on squads, confirmed lineups, per-player match statistics with started and played flags, injuries and minute-stamped incidents — plus the competition and fixture layer underneath them.
Use squads, lineups, player match and season statistics, injury observations and match incidents where populated. These documented endpoints complement the competition, season, team and fixture records behind a league calendar; individual fields and competitions can have gaps.
Resolve the squad, read confirmed lineups where observed, then join per-player statistics by match and player ID. Apply your scoring rules to supported fields and keep missing observations separate from genuine zeros.
Season totals are published where the source supplied them: the season statistics endpoint returns appearances, minutes, goals, assists and more for a requested season, separated by team after a transfer, and its support_status says whether the numbers are available, were not observed, or were confirmed empty. Per-match rows remain the way to build your own windows, such as the last five matches, because your scoring rules — not ours — decide what counts.
Once a match has been played, the per-player statistics say who started and who played: started is true or false, and played is true, false or null when it cannot be told. Count null as unknown, never as a player who stayed on the bench.
Availability data deserves care. Injuries and suspensions are reported as observed at the last sync rather than continuously, so surface the observation time next to a doubtful flag instead of presenting it as certain. A lineup published an hour before kickoff is the authoritative answer to "is this player starting"; anything earlier is a forecast.
Team rosters and player profiles, keyed by identifiers that stay stable across seasons.
Starting eleven, substitutes, formation and shirt numbers once a team sheet is published.
Goals, assists, cards, minutes, shots, passing and duels where observed for an appearance.
Injuries and suspensions with the observation time attached, so a stale flag reads as stale.
Minute-stamped goals, cards and substitutions for live scoring and match narration.
Filter fixtures and results by team, competition, season, status and UTC date.
Squads, lineups, player match and season statistics, injury observations and incidents have documented endpoints. Season summaries preserve team splits after transfers. Your application defines fantasy points and handles fields that are not observed.
Resolve the league to a stable ID, list the team squad, then read per-player match statistics for each fixture. Player identifiers stay constant across seasons, so a scoring table keeps joining after a transfer window.
Review supported match fields →curl --silent --show-error \
"https://stats-api.com/api/v1/football/competitions?q=Premier%20League" \
-H "Authorization: Bearer ${STATS_API_KEY}" \
-H "Accept: application/json"
curl --silent --show-error \
"https://stats-api.com/api/v1/football/matches?competition_id=${COMPETITION_ID}&status=finished" \
-H "Authorization: Bearer ${STATS_API_KEY}" \
-H "Accept: application/json"
These pages show an enabled league, the exact match contract, current limits, and the stable-ID strategy behind durable joins.
Inspect the exact historical season, team count, match count, and unavailable fields.
Read more → Endpoint referenceUse only the documented competition, season, team, status, and date filters.
Read more → Engineering guideLearn why fantasy URLs and joins should not depend on upstream provider identifiers.
Read more →