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 addtotal,limitandoffsettometa. priceis in millions of pounds (12.5). FPL's rawnow_costis the same in tenths (125), and is kept alongside.- Any
{gw}orgwaccepts a number orcurrent,nextorprevious.teamaccepts an id, a short name (ARS) or a name (Arsenal).positionisGKP,DEF,MIDorFWD. - 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_priceandphoto_url. On/players, passfields=allor 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.staleistruewhen 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,/leaguesand/players/{id}/...requests. Over the limit you get429with aRetry-Afterheader. - 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.
Search
GET /search
Search players, teams and managers by name
Finds players, Premier League teams and FPL managers in one call. Player matching ignores accents and case (odegaard finds Ødegaard) and ranks exact and prefix matches of the short name first, then by ownership. Managers are matched on their real name or their FPL team name and need at least 3 characters. Each result's id is what the other endpoints take: players[].id for /players/{id}, teams[].id for /teams/{team}, managers[].id for /managers/{id}.
| Parameter | In | Description |
|---|---|---|
q | query | What to search for: a player, team, manager or FPL team name. At least 2 characters. |
type | query | Limit to some kinds, comma-separated: player, team, manager. Default all three. |
limit | query | Results per kind, 1 to 50. Default 10. |
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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.
| Parameter | In | Description |
|---|---|---|
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. |