If the answer you need is not here, the reference lists every
endpoint and the interactive documentation will run a request against your key.
Is there a free football API?
Yes. Every listing has a free tier on RapidAPI with no card required, and the same endpoints as the paid plans, live scores included. Paid plans raise the request limit rather than unlocking data, so you can build the whole thing on the free tier and only pay once you have traffic.
Which competitions are covered?
Twelve: the Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, the Eredivisie, the Primeira Liga, the Süper Lig, the EFL Championship, the UEFA Champions League, the UEFA Europa League and the UEFA Conference League. Every one of them returns the same JSON shape, so supporting a second competition is a change of one path segment.
How often do live scores update?
Every 30 seconds while a match is in play, from kickoff to the final whistle. /matches/{id} refreshes on the same cycle, so the lineups, goals, cards, substitutions, player ratings and xG arrive with the score rather than after the match. With many matches in play at once a round of polling takes longer: across the weekends of 12 and 19 September 2026, half of all updates came within 30 seconds of the one before and nine in ten within 50.
Do you provide lineups, events and player ratings?
Yes. A match detail response carries both lineups with formations and shirt numbers, the event list with minutes and scorers, and a rating per player. Substitutions, cards and goals are all in the same events array.
Do you have expected goals (xG)?
Yes. Every player's season stats carry xG, expected assists, shots, shots on target, key passes, big chances created, passes, tackles, interceptions and, for goalkeepers, saves and goals prevented. Team season stats carry shots and xG for and against. /stats/expected-goals, /stats/expected-assists, /stats/shots, /stats/key-passes, /stats/tackles and /stats/saves rank them. The per-match values are in each lineup entry of a match detail response. The only gap is the early Conference League qualifying rounds, which come with lineups but no detailed stats; detailedAppearances says how many matches a total covers.
How far back does the history go?
The current season and the one before it, for every competition we hold in full. A season we only hold from part-way through is not served at all rather than served incomplete, because a table built from half a season is wrong in a way that is hard to notice.
What does a response look like?
Every response is { data, meta }, and every error is { error: { code, message } }. Timestamps are UTC ISO 8601. Teams and players carry a stable numeric id you can store, plus a slug and an image URL.
Can I use this commercially?
Yes, on any plan including the free one. The data is derived from publicly available match records. Club crests and player photographs are served as URLs for display alongside the data; they remain the property of their owners.
Is there an OpenAPI spec?
Yes, at /openapi.json, with interactive documentation at /docs and a readable reference at /reference. The spec is generated from the same route definitions that serve the requests, so it cannot drift from the API.