Football (Soccer) API
The Football (Soccer) API covers the Premier League, La Liga, the Bundesliga, Serie A, Ligue 1, the UEFA Champions League, the UEFA Europa League and MLS: get fixtures and match schedules, live scores with the match minute on paid plans, results with goals per half, extra time, penalty shootouts and the aggregate score of two-legged ties, league tables with the qualification and relegation places, and every club's squad. The free plan covers the current season's fixtures, results, tables and squads.
Every match, table row and club has sport: soccer and its competition in league. Looking for American football? See the American Football API.
Available endpoints:
- /v1/soccermatches - Fixtures, live scores and results
- /v1/soccerstandings - League tables
- /v1/soccerclubs - Clubs and venues
- /v1/soccerplayers - Squads and player profiles
League guides: Premier League API, La Liga API, Bundesliga API, Serie A API, Ligue 1 API, Champions League API, Europa League API and MLS API. One API key works for every sports API.
Soccer data at a glance
| Fixtures and results | /v1/soccermatches returns each match as a fixture before kick-off (status=scheduled), live while it is played, and as a result once it is final |
|---|---|
| Club ids | One id per club in every competition: soccer-arsenal plays Premier League and Champions League matches under the same id, and keeps it through promotion and relegation |
| Draws | A drawn match has equal scores and winner: null; tables count draws |
| Halves and extra time | period is 1 or 2, then 3 and 4 for extra time; clock is the match minute, e.g. 90'+3' |
| Penalties | decided_in is regulation, extra_time or penalties. A shootout's score is in penalty_scores, not in the match score, and its winner is the match winner |
| Cup rounds | round (e.g. Round of 16, Final), leg (1 or 2) and aggregate_scores for two-legged ties |
| Tables | points, draws, goal_difference, points_deducted, league_rank with each competition's tiebreakers, and qualification (e.g. Champions League, Relegation); MLS adds conference ranks |
| Seasons | European seasons are named by their start year: season=2026 is 2026-27. MLS seasons are calendar years |
| Match day | date is the date in the competition's home time zone: UK time for the Premier League, Central European time for the other European competitions, US Eastern for MLS |
Competitions
| League | What you get | League value |
|---|---|---|
| Premier League | English top division: fixtures, live scores and results, the table with European and relegation places, clubs and squads | epl |
| La Liga | Spanish top division: fixtures, live scores and results, the table, clubs and squads | laliga |
| Bundesliga | German top division: fixtures, live scores and results, the table with the relegation playoff place, clubs and squads | bundesliga |
| Serie A | Italian top division: fixtures, live scores and results, the table, clubs and squads | seriea |
| Ligue 1 | French top division: fixtures, live scores and results, the table, clubs and squads | ligue1 |
| Champions League | League phase and knockout fixtures, two-legged ties with aggregate scores, extra time and penalties, the league phase table | ucl |
| Europa League | League phase and knockout fixtures, two-legged ties with aggregate scores, extra time and penalties, the league phase table | uel |
| MLS | Regular season and MLS Cup playoff fixtures, live scores and results, conference standings, clubs and squads | mls |
https://api.api-ninjas.com/v1/soccermatches
Returns fixtures, live scores and results. Ask for one day, a team's season or one match; with only league you get today's matches. Paid plans see matches in progress with the score, half and match minute updated throughout the match; the free plan sees their status and the final score once they end. The free plan covers the current season. Developer plans add the three previous seasons, and the Business tier and above gets the full season archive.
Parameters
Provide league, unless you pass game_id or a team id such as soccer-arsenal.
leagueoptionalepl,laliga,bundesliga,seriea,ligue1,ucl,uelormls.dateoptionalMatch day in the league's home time zone (YYYY-MM-DD). Defaults to today when no team or season is given.
teamoptionalTeam id, abbreviation or name (e.g.
ARS): that team's matches in the season.seasonoptionalSeason, as the year it starts (
2026= 2026-27 in Europe). Defaults to the current season. On its own, returns the season's matches 50 per page; useoffsetfor the next page.season_typeoptionalOnly matches of this part of the season.
statusoptionalOnly matches with this status.
game_idoptionalReturn one match.
limitoptional Premium onlyMatches per page (1-500). Default
50.offsetoptionalMatches to skip, for paging. Default
0.
Headers
X-Api-KeyrequiredAPI Key associated with your account.
Response
The /v1/soccermatches endpoint returns a JSON array of matches in start order, or an error.
game_idUnique id of the game, e.g.
epl-20261025-new-cry. It never changes, even when a game is moved to another date.leagueepl,laliga,bundesliga,seriea,ligue1,ucl,uelormls.sportAlways
soccer.seasonSeason, as the year it starts:
2026is the 2026-27 season of the European competitions and the 2026 MLS season.season_labelDisplay form of the season, e.g.
2026or2026-27.season_typeregularfor league matches,postseasonfor the MLS Cup playoffs, andleague_phase,knockoutorgroup_stage(seasons with groups) for the UEFA competitions.roundThe stage of a cup or playoff match, e.g.
Round of 16,QuarterfinalsorFinal, or the group (e.g.Group C) in seasons with a group stage.nullfor league matches and the UEFA league phase.leg1or2for the first or second leg of a two-legged knockout tie, otherwisenull.dateMatch day in the competition's home time zone (YYYY-MM-DD): UK time for the Premier League, Central European time for La Liga, the Bundesliga, Serie A, Ligue 1 and the UEFA competitions, and US Eastern for MLS.
start_timeScheduled start in UTC (ISO 8601).
statusscheduled,in_progress,final,postponed,canceled,suspended(including abandoned matches) ordelayed(e.g. a baseball rain delay).status_detailPremium onlyDuring a game:
halftime,extra_time_breakorpenalties(while a shootout is under way). Otherwisenull. While a game is in progress, the free plan seesThis field is for premium subscribers only.periodLive values: PremiumCurrent half, or the last one played once the game is final:
1and2, then3and4for the two halves of extra time. While a game is in progress, the free plan seesThis field is for premium subscribers only.clockPremium onlyWhile a match is in progress: the match minute, e.g.
67'or90'+3'. The free plan seesThis field is for premium subscribers only.home_team, away_teamThe clubs:
team_id,nameandabbreviation. A club keeps one id in every competition, e.g.soccer-arsenal.home_score, away_scoreLive values: PremiumCurrent or final score (goals, not counting a penalty shootout);
nullbefore the game starts. While a game is in progress, the free plan seesThis field is for premium subscribers only.period_scoresLive values: PremiumScore per half for
homeandaway, with both halves of extra time when played. Shootout goals are inpenalty_scores, not here. While a game is in progress, the free plan seesThis field is for premium subscribers only.penalty_scoresLive values: PremiumThe penalty shootout score,
homeandaway, when a match is decided on penalties; otherwisenull.aggregate_scoresLive values: PremiumThe aggregate score of a two-legged tie after this match,
homeandawayas in this match;nullfor single matches.decided_inFor final games:
regulation,extra_timeorpenalties.winnerteam_idof the winner once the game is final, including the shootout winner of a match decided on penalties;nullbefore that and for a draw.venueWhere the game is played:
name,city,stateandcountry(ISO 3166-1 alpha-2).neutral_sitetruewhen neither team is at home, e.g. the Champions League and Europa League finals.original_dateFor a game moved to another date: the date it was first scheduled for. Otherwise
null.updated_atWhen any field of the game last changed (UTC).
Live Demo
Get a free API key to get started — no credit card required.
Code Examples
curl -X GET "https://api.api-ninjas.com/v1/soccermatches?league=epl" \
-H "X-Api-Key: YOUR_API_KEY"https://api.api-ninjas.com/v1/soccerstandings
Returns the table for a season, ordered by league rank, or by conference or division rank when you filter. Tables update throughout the season, shortly after each match ends. The free plan covers the current season. Developer plans add the three previous seasons, and the Business tier and above gets the full season archive.
Parameters
leaguerequiredepl,laliga,bundesliga,seriea,ligue1,ucl,uelormls.seasonoptionalSeason, as the year it starts. Defaults to the current season.
conferenceoptionalOnly this conference, e.g.
Eastern(MLS).
Headers
X-Api-KeyrequiredAPI Key associated with your account.
Response
The /v1/soccerstandings endpoint returns a JSON array of team rows, or an error. Fields that do not apply to a league are left out.
league, sport, season, season_labelLeague, sport and season of the table.
teamteam_id,nameandabbreviation, named as they were that season.conference, divisionMLS: the club's conference (
EasternorWestern).nullin the European competitions.groupUEFA competitions in seasons with a group stage: the group, e.g.
Group C.games_played, wins, lossesRecord.
drawsDrawn matches.
pointsPoints: three for a win, one for a draw.
goals_for, goals_againstGoals scored and conceded.
goal_difference, points_deductedGoal difference, and any points deducted by the competition.
league_rank, conference_rank, division_rankleague_rankis the table position with the competition's tiebreakers applied; MLS addsconference_rank.group_rankUEFA group stage: position in the group.
qualificationWhat the table position leads to, e.g.
Champions LeagueorRelegation; left out for mid-table positions.finaltrueonce the regular season or league phase is over and the table no longer changes.
Live Demo
Code Examples
curl -X GET "https://api.api-ninjas.com/v1/soccerstandings?league=epl" \
-H "X-Api-Key: YOUR_API_KEY"https://api.api-ninjas.com/v1/soccerclubs
Lists clubs with their domestic league, country and home venue. Available on every plan.
Parameters
leagueoptionalOnly this league:
epl,laliga,bundesliga,seriea,ligue1,ucl,uelormls. Without it, every club of the sport is listed.teamoptionalTeam id, abbreviation or name (e.g.
ARS): return one club.activeoptionalfalselists former teams that appear in past seasons.
Headers
X-Api-KeyrequiredAPI Key associated with your account.
Response
The /v1/soccerclubs endpoint returns a JSON array of clubs, or an error. A club that plays in several competitions is listed once.
team_idUnique id, e.g.
soccer-arsenal, the same in every competition. Use it, the abbreviation or the name in other endpoints.leagueThe club's domestic league (e.g.
epl), ornullfor a club from another country's league that plays in the UEFA competitions.sportAlways
soccer.abbreviation, name, cityIdentity of the team.
short_name, countryShort name and country (ISO 3166-1 alpha-2).
venueHome venue:
name,city,state,country.activetruefor current clubs.
Live Demo
Code Examples
curl -X GET "https://api.api-ninjas.com/v1/soccerclubs?league=epl" \
-H "X-Api-Key: YOUR_API_KEY"https://api.api-ninjas.com/v1/soccerplayers
Returns current squads and player profiles, by team or by name. Rosters refresh every day. Available on every plan.
Parameters
Provide league with team or name, or a player_id.
leagueoptionalepl,laliga,bundesliga,seriea,ligue1,ucl,uelormls.teamoptionalTeam id, abbreviation or name: that club's current squad.
nameoptionalFull or partial player name. Case and accents are ignored.
player_idoptionalReturn one player.
positionoptionalOnly this position, e.g.
F.limitoptional Premium onlyPlayers per page (1-500). Default
50.offsetoptionalPlayers to skip, for paging. Default
0.
Headers
X-Api-KeyrequiredAPI Key associated with your account.
Response
The /v1/soccerplayers endpoint returns a JSON array of players, or an error. League-specific fields are left out where they do not apply.
player_idUnique id, e.g.
soccer-p-34d3e18f49. It stays the same when a player changes teams or leagues.leagueLeague of the player's current roster.
teamCurrent team:
team_id,nameandabbreviation;nullfor a player whoseroster_statusisnot_on_roster.name, first_name, last_namePlayer name.
position, jersey_numberPosition abbreviation (
G,D,MorF) and jersey number.height_in, height_cm, weight_lb, weight_kgHeight and weight.
birth_dateDate of birth.
roster_statusactive,suspendedornot_on_roster.nationalityNationality, e.g.
England.
Live Demo
Get a free API key to get started — no credit card required.
Code Examples
curl -X GET "https://api.api-ninjas.com/v1/soccerplayers?league=epl&team=ARS" \
-H "X-Api-Key: YOUR_API_KEY"Frequently Asked Questions
Can I use the Football (Soccer) API for commercial purposes?
Yes, but you must have a premium subscription. Commercial use of the Football (Soccer) API is not permitted on the free tier. See our pricing page to choose a plan that fits your needs.How do I get an API key and start using the Football (Soccer) API?
Sign up for a free account to instantly get your API key, then pass it in theX-Api-Keyheader on every request. The documentation above includes ready-to-run examples in cURL, Python, JavaScript, Node.js, and more.What happens if I exceed my quota for the month?
Your API requests will simply be denied once you hit your monthly quota — you will never be charged more than the plan you signed up for. To increase your quota, you can upgrade your plan any time on our pricing page.What happens if a request to the Football (Soccer) API fails?
The API responds with a standard HTTP status code and a JSON error message describing the problem. See our error codes reference for the full list of codes and how to resolve each one, or contact support if you need help.Is there a free football (soccer) API?
Yes. The free plan covers the current season of the Premier League, La Liga, the Bundesliga, Serie A, Ligue 1, the Champions League, the Europa League and MLS: fixtures, results, league tables, clubs and squads. Paid plans add live scores with the match minute and the three previous seasons.Which competitions are covered?
The Premier League (epl), La Liga (laliga), the Bundesliga (bundesliga), Serie A (seriea), Ligue 1 (ligue1), the UEFA Champions League (ucl), the UEFA Europa League (uel) and MLS (mls). Pass the value asleague; names such aspremier leaguealso work.How do I get today's fixtures and results?
Call/v1/soccermatches?league=eplfor today's matches, or adddate=YYYY-MM-DDfor another match day. Fixtures havestatus=scheduled, matches being playedin_progressand resultsfinal.Does a club keep the same id in every competition?
Yes.soccer-arsenalis Arsenal in the Premier League, the Champions League and any other competition, and the id survives promotion and relegation./v1/soccermatches?team=soccer-arsenalreturns its matches this season, and each match'sleaguetells you the competition.How are draws, extra time and penalty shootouts shown?
A draw has equal scores andwinner: null. A cup match decided after extra time hasdecided_in=extra_time; one decided on penalties hasdecided_in=penalties, the shootout score inpenalty_scoresand the shootout winner inwinner. Two-legged ties addlegandaggregate_scores.Is American football included?
In its own API: the NFL is served by the American Football API. The same API key works for both.
Explore API integration use cases for recommended APIs and workflow examples.
API Ninjas is not affiliated with or endorsed by the NFL, the NBA, the NHL or any other league, competition or team. League, competition and team names are trademarks of their owners and are used only to identify them.