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, injuries and minute-stamped incidents — plus the competition and fixture layer underneath them.
Player scoring is supported. Squads, lineups with formations and shirt numbers, per-player match statistics, injuries and suspensions, and minute-by-minute incidents are all live endpoints, alongside the competition, season, team and fixture layer a league calendar is built on.
A fantasy product needs three things in order: who is available, who actually started, and what they did. Those map to the squad endpoint, the lineups endpoint, and per-player match statistics. Read them in that sequence and the scoring engine has every input it needs without inference.
One real gap: season-aggregate player statistics are not published yet. Per-match player rows are, so a season total is a sum you compute and store on your side. That is more work at first, but it means your scoring rules — not ours — decide what counts, which is usually what a fantasy product wants anyway.
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, duels and expected goals for each 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, per-player match statistics, injuries and incidents are live endpoints. What you compute yourself is the season aggregate, which means your scoring rules decide what counts.
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 →