FPL Rivals API

Base URL https://api.fplrivals.org/api/v1. No key, no sign-up. The machine-readable spec is at openapi.json, which is what AI agents and connectors should read.

curl "https://api.fplrivals.org/api/v1/search?q=haaland"

Free, keyless JSON API for Fantasy Premier League (FPL): players, prices, fixtures, gameweeks, live scores, managers and leagues. It is built on the official FPL API, cached so it stays fast and does not overload FPL, with names, positions and prices in pounds joined in so you rarely need a second lookup.

Typical flows

Look up a manager. Call GET /search?q=<name or team name>&type=manager. Each result in data.managers has an id: that is the manager id (FPL calls it the entry id). Use it with GET /managers/{id} for their season summary and rank, GET /managers/{id}/history for every gameweek, GET /managers/{id}/picks/current for the current squad with live points, GET /managers/{id}/transfers and GET /managers/{id}/chips.

Explore a mini-league. Take a manager id, call GET /managers/{id}/leagues and pick a league id. GET /leagues/{league_id}/standings returns the table, and each row's entry is a manager id you can pass straight back to /managers/{id}/picks/current to compare rivals. Head-to-head leagues also have GET /leagues/{league_id}/matches.

Research a player. Call GET /search?q=<player name>&type=player to get a player id. GET /players/{id} gives current price, form, ownership, expected stats, availability and the next five fixtures. GET /players/{id}/history has every match this season, GET /players/{id}/price-history the price by gameweek, and GET /players/compare?ids=<id>,<id> puts up to five side by side.

Plan a gameweek. GET /game has the next deadline. Then GET /injuries, GET /fixtures/difficulty?next=5, GET /fixtures/blanks-doubles, GET /analytics/captaincy, GET /transfers/trending and GET /prices/changes.

Follow a live gameweek. GET /gameweeks/current/live has every player's points so far, GET /fixtures?gw=current the scores, and GET /managers/{id}/picks/current a manager's points pick by pick.

Find the best players by any stat. GET /players?sort=<field>&position=<GKP|DEF|MID|FWD>&limit=10, for example sort=form, sort=expected_goals or sort=selected_by_percent, with max_price to cap the budget.

Conventions

  • Every success is { "data": ..., "meta": { "generated_at", "stale", "source" } }. Lists that page add total, limit and offset to meta.
  • price is in millions of pounds (12.5). FPL's raw now_cost is the same in tenths (125), and is kept alongside.
  • Any {gw} or gw accepts a number or current, next or previous. team accepts an id, a short name (ARS) or a name (Arsenal). position is GKP, DEF, MID or FWD.
  • FPL sends many decimals as strings, e.g. "form": "5.3" and "selected_by_percent": "41.2". They are passed through as FPL sends them.
  • Player objects keep every FPL field and add team_name, team_short_name, position, price, start_price and photo_url. On /players, pass fields=all or a comma-separated list to choose what comes back.

Freshness, limits and errors

  • Responses are cached for 60 seconds, and the FPL data behind them for up to 5 minutes (30 for per-player history). meta.stale is true when FPL was down and the last good copy was served instead, which is common for an hour or so while FPL scores a gameweek.
  • No key or sign-up. Up to 600 requests per minute per IP, and 60 per minute for uncached /managers, /leagues and /players/{id}/... requests. Over the limit you get 429 with a Retry-After header.
  • Errors are { "error": { "code", "message" } }: bad_request (400), not_found (404), rate_limited (429), fpl_unavailable (502).

Data comes from the official Fantasy Premier League game. FPL Rivals is not affiliated with the Premier League.

Endpoints

Meta

GET /

List every endpoint

The API's name, links to these docs and the OpenAPI spec, the rate limits, and every endpoint with a one-line summary. A good first call for an agent.

GET /openapi.json

This OpenAPI spec

The full OpenAPI 3.1 description of this API, including the typical flows above. Not wrapped in the data envelope.

Game

GET /game

Current season and gameweek state

The season (e.g. 2026/27), the current and next gameweek with deadlines, how many gameweeks there are, the total number of FPL players, the upcoming nightly price-change deadlines, and FPL's event status (whether bonus points have been added and leagues updated).

GET /rules

Game rules, positions and chips

Squad rules per position (how many to pick and play), the chips with the gameweeks each can be played in, the season phases, and FPL's raw game_settings and game_config (budget, transfer rules, scoring and more).

Gameweeks

GET /gameweeks

Every gameweek of the season

One row per gameweek: id, name, deadline, whether it is finished, current or next, the average and highest score.

GET /gameweeks/{gw}

One gameweek in detail

Everything FPL records about a gameweek: average and highest scores, chip plays, transfers made, and the most selected, captained, vice-captained and transferred-in players plus the top scorer, each resolved to a name (*_player). Includes the gameweek's fixtures.

ParameterInDescription
gw required path Gameweek number (1 to 38), or current, next or previous.

GET /gameweeks/{gw}/live

Live player points for a gameweek

Every player's points and underlying stats (minutes, goals, assists, clean sheets, saves, bonus, BPS, defensive contributions, expected stats) for the gameweek, highest first. Updates during matches. Pass include=explain for FPL's per-fixture breakdown of how the points were earned.

ParameterInDescription
gw required path Gameweek number (1 to 38), or current, next or previous.
team query Team id, short name (ARS) or name (Arsenal).
position query GKP, DEF, MID or FWD.
include query explain adds the per-fixture points breakdown.
limit query Page size, 1 to 1000.
offset query Rows to skip, for paging.

GET /gameweeks/{gw}/dream-team

Team of the week

The highest-scoring XI of a finished gameweek and its top player, with points.

ParameterInDescription
gw required path Gameweek number (1 to 38), or current, next or previous.

Fixtures

GET /fixtures

Fixtures and results

Every fixture of the season, or those matching the filters: kickoff time, both teams with their score and FPL difficulty rating (1 easiest to 5 hardest), and whether it has started or finished.

ParameterInDescription
gw query Only this gameweek: a number, current, next or previous.
team query Team id, short name (ARS) or name (Arsenal).
finished query Only finished (true) or unfinished (false) fixtures.

GET /fixtures/{id}

One fixture with match stats

A single fixture with its per-player stats: goals, assists, cards, saves, bonus and BPS, each with the player's name.

ParameterInDescription
id required path Fixture id, from /fixtures.

GET /fixtures/difficulty

Fixture difficulty for every team

Each team's upcoming run of fixtures with FPL difficulty ratings, total and average difficulty and any blank gameweeks, easiest run first. The standard way to find teams with good fixtures.

ParameterInDescription
next query How many gameweeks to look ahead, 1 to 10. Default 5.
from query First gameweek of the window. Default the next gameweek.

GET /fixtures/blanks-doubles

Blank and double gameweeks

For every remaining gameweek that has them, which teams have no fixture (blank) and which have two or more (double), plus fixtures not yet scheduled into a gameweek.

Teams

GET /teams

The 20 Premier League teams

Every team with FPL's strength ratings (overall, attack and defence, home and away) and badge URL.

GET /teams/{team}

One team: squad, fixtures and results

A team's strength ratings, its full FPL squad by position, its next six fixtures with difficulty, and its last five results.

ParameterInDescription
team required path Team id, short name (ARS) or name (Arsenal).

GET /table

Premier League table

The league table computed from finished fixtures: played, won, drawn, lost, goals, goal difference, points and the last five results.

Players

GET /players

List, filter and sort players

All players, filterable by team, position, price, availability and name, sortable by any numeric FPL field. Returns a compact set of the most useful fields by default; use fields for more or fewer. Examples: top scorers sort=total_points; in-form midfielders position=MID&sort=form; cheap defenders position=DEF&max_price=4.5&sort=total_points; most owned sort=selected_by_percent.

ParameterInDescription
q query Name contains, accent-insensitive.
team query Team id, short name (ARS) or name (Arsenal).
position query GKP, DEF, MID or FWD.
min_price query Minimum price in £m.
max_price query Maximum price in £m.
status query FPL availability codes, comma-separated: a available, d doubtful, i injured, s suspended, u unavailable, n not eligible.
available query true for available players only, false for everyone else.
sort query Field to sort by: price or any player field, e.g. total_points (default), form, ep_next, selected_by_percent, expected_goals, expected_assists, points_per_game, bonus, web_name.
order query asc or desc. Default desc for numbers, asc for names.
fields query all for every field, or a comma-separated list, e.g. id,web_name,price,form.
limit query Page size, 1 to 1000.
offset query Rows to skip, for paging.

GET /players/compare

Compare players side by side

Two to five players with every field plus their next five fixtures, in the order given.

ParameterInDescription
ids required query 2 to 5 player ids, comma-separated.

GET /players/{id}

One player in full

Every FPL field for a player: price and price changes, points, form, ownership, expected goals and assists, ICT index, set-piece order, availability with status_label and news, plus their next five fixtures with difficulty.

ParameterInDescription
id required path Player id, from /search or /players.

GET /players/{id}/history

A player's match-by-match season

One row per match this season (points, minutes, goals, assists, bonus, expected stats, price, ownership, transfers, opponent), and a summary of each past season.

ParameterInDescription
id required path Player id, from /search or /players.

GET /players/{id}/price-history

A player's price by gameweek

Start-of-season and current price, and one row per gameweek with price, ownership and transfers in and out.

ParameterInDescription
id required path Player id, from /search or /players.

GET /injuries

Injured, doubtful and suspended players

Every player not fully available, with FPL's news, when it was added, chance of playing this and next round, and a plain status_label. Most owned first.

ParameterInDescription
team query Team id, short name (ARS) or name (Arsenal).
position query GKP, DEF, MID or FWD.
limit query Page size, 1 to 1000.
offset query Rows to skip, for paging.

GET /transfers/trending

Most transferred in and out

The players most transferred in and most transferred out by all FPL managers in the current gameweek, with net transfers.

ParameterInDescription
limit query How many of each, 1 to 50. Default 10.

Prices

GET /prices

Every player's current price

Current price, start-of-season price and change, this gameweek's change, ownership and transfers for every player, most expensive first. Takes the same filters and sorting as /players.

ParameterInDescription
team query Team id, short name (ARS) or name (Arsenal).
position query GKP, DEF, MID or FWD.
min_price query Minimum price in £m.
max_price query Maximum price in £m.
sort query Default price. Also e.g. cost_change_start for biggest risers since the season began.
order query asc or desc.
fields query all for every field, or a comma-separated list, e.g. id,web_name,price,form.
limit query Page size, 1 to 1000.
offset query Rows to skip, for paging.

GET /prices/changes

Predicted and recent price changes

FPL's own price-change projections: players likely to rise or fall at the next nightly deadline (likelihood 4 or 5 either way), each with progress towards a change (100 is the line), a likelihood per upcoming deadline, and players who have already risen or fallen this gameweek. deadlines lists the upcoming nightly price-change times.

Analytics

GET /analytics/captaincy

Captain candidates

Players likely to play next gameweek ranked by ep_next, FPL's own expected points for the next gameweek, with their fixture(s) that gameweek. A double gameweek shows two.

ParameterInDescription
team query Team id, short name (ARS) or name (Arsenal).
position query GKP, DEF, MID or FWD.
limit query Page size, 1 to 1000.
offset query Rows to skip, for paging.

GET /analytics/differentials

Low-owned players in form

Players likely to play whose ownership is at or below max_ownership percent, ranked by form then expected points.

ParameterInDescription
max_ownership query Ownership ceiling in percent. Default 10.
team query Team id, short name (ARS) or name (Arsenal).
position query GKP, DEF, MID or FWD.
limit query Page size, 1 to 1000.
offset query Rows to skip, for paging.

GET /analytics/value

Best value players

Points per million this season, highest first, with form per million alongside.

ParameterInDescription
min_minutes query Ignore players with fewer minutes than this. Default 1.
team query Team id, short name (ARS) or name (Arsenal).
position query GKP, DEF, MID or FWD.
limit query Page size, 1 to 1000.
offset query Rows to skip, for paging.

Managers

GET /managers/{id}

A manager's season summary

Name, FPL team name, country, overall points and rank, this gameweek's points and rank, team value and bank, and the year they started. Leagues are at /managers/{id}/leagues.

ParameterInDescription
id required path Manager (entry) id, from /search?type=manager, a league's standings, or the number in an FPL team URL.

GET /managers/{id}/history

A manager's gameweek-by-gameweek season

current: every gameweek's points, total, gameweek and overall rank, transfers and their cost, bench points, team value and bank. past: each previous season's points and final rank. chips: chips played.

ParameterInDescription
id required path Manager (entry) id, from /search?type=manager, a league's standings, or the number in an FPL team URL.

GET /managers/{id}/picks/{gw}

A manager's squad for a gameweek

The 15 players picked for a gameweek in squad order (slots 1 to 11 start, 12 to 15 are the bench), captain and vice, multipliers, each player's live points, the chip played, automatic substitutions and the gameweek summary. Use current for the squad right now.

ParameterInDescription
id required path Manager (entry) id, from /search?type=manager, a league's standings, or the number in an FPL team URL.
gw required path Gameweek number (1 to 38), or current, next or previous.

GET /managers/{id}/transfers

Every transfer a manager has made

All transfers this season, newest first: gameweek, time, the players in and out with names, and the prices paid and received.

ParameterInDescription
id required path Manager (entry) id, from /search?type=manager, a league's standings, or the number in an FPL team URL.

GET /managers/{id}/chips

Chips played and still available

Chips the manager has played (with gameweek) and those still available, each with the gameweek window it can be used in.

ParameterInDescription
id required path Manager (entry) id, from /search?type=manager, a league's standings, or the number in an FPL team URL.

GET /managers/{id}/leagues

Leagues a manager is in

Every classic and head-to-head league the manager has joined, with their rank in each, plus the cup. Each league's id works with /leagues/{id}/standings.

ParameterInDescription
id required path Manager (entry) id, from /search?type=manager, a league's standings, or the number in an FPL team URL.

Leagues

GET /leagues/{id}/standings

League table

A classic or head-to-head league's standings, 50 per page: rank, last rank, manager name, FPL team name, gameweek and total points. Each row's entry is a manager id for /managers/{id}. League 314 is the overall global league.

ParameterInDescription
id required path League id, from /managers/{id}/leagues or the number in an FPL league URL.
type query classic or h2h. Default: try classic, then head-to-head.
page query Page of 50 standings, from 1.

GET /leagues/{id}/matches

Head-to-head league matches

Match results for a head-to-head league, optionally for one gameweek, with both managers, their points and the winner.

ParameterInDescription
id required path League id, from /managers/{id}/leagues or the number in an FPL league URL.
gw query Only this gameweek: a number, current, next or previous.
page query Page of results, from 1.