Public Player API

A read-only API for looking up the FIFA Ultimate Team player data held by The Coin Printer. Search with filters, fetch a player by id, and read BIN history — no accounts, no trading tools.

Overview

The public API lets approved partners search our player database by name and filters (version, rating, positions, league, team, nationality), with optional sort/order, load a single player, and retrieve BIN history for console or PC. Responses include metadata, current prices, previous BIN, and momentum for both platforms. All requests are made over HTTPS and return JSON. Results are scoped to the current FIFA year.

Base URL: https://api.thecoinprinter.com

Endpoints:

  • GET /api/v1/public/players/search — search or list recently updated players (Gold versions by default; filter by name, rating, positions, league, team, nationality; sort with sort/order)
  • GET /api/v1/public/players/:id — player detail
  • GET /api/v1/public/players/:id/previous-values — BIN history for a platform

Authentication

Every request must include your API key as a bearer token in the Authorization header:

Authorization: Bearer tcp_your_api_key

API keys are issued by The Coin Printer — there is no self-serve signup. To request access, contact us at contact@thecoinprinter.com. We'll email you a secure payment link for your plan; your key is generated and emailed automatically once payment is complete. Treat your key like a password; requests with a missing, invalid, or revoked key return 401 Unauthorized.

Rate limits

Each API key is limited to 60 requests per minute. Exceeding the limit returns 429 Too Many Requests with a message indicating when you can retry.

Search players

GET /api/v1/public/players/search

Filter the catalogue with optional attribute filters and optional sorting. By default results are ordered by most recently updated (updated_at desc). Pass sort / order to override. By default only Gold card versions are included (REGULAR, GOLD, NORMAL); pass version=all to include specials and other types.

Query parameters

ParameterTypeRequiredDescription
namestringNoPlayer name filter (min 2 characters, case-insensitive contains).
versionstringNoCard version / type filter. Default "gold" (REGULAR, GOLD, NORMAL). Use "all" for every type, or a concrete group_type (e.g. ICON, HERO, TOTW) for an exact case-insensitive match.
min_ratingintegerNoInclusive minimum overall rating (1–99). Must not be greater than max_rating.
max_ratingintegerNoInclusive maximum overall rating (1–99). Must not be less than min_rating.
positionsstringNoOne or more position codes, comma-separated (case-insensitive). Matches primary or alternate position. See Positions below. Example: ST or ST,CM,LW.
leaguestringNoLeague name (case-insensitive exact match).
teamstringNoClub / team name (case-insensitive exact match).
nationalitystringNoNation name (case-insensitive exact match).
sortstringNoOptional sort field. See Sort keys below. Default: updated_at.
orderstringNoSort direction: "asc" or "desc". Default "desc". Applies to sort, or to updated_at when sort is omitted.
pageintegerNoPage number, 1-indexed. Default 1.
takeintegerNoResults per page. Default 20, maximum 50.

Positions

Pass one or more of these codes as positions (comma-separated). Matching is case-insensitive and includes both the player's primary position and alt_positions. Multiple values are OR'd — a player matches if any requested position appears on the card.

ParameterTypeRequiredDescription
GKgoalkeeper—Goalkeeper
CBdefence—Centre back
LBdefence—Left back
RBdefence—Right back
LWBdefence—Left wing back
RWBdefence—Right wing back
CDMmidfield—Central defensive midfielder
CMmidfield—Central midfielder
CAMmidfield—Central attacking midfielder
LMmidfield—Left midfielder
RMmidfield—Right midfielder
LWattack—Left winger
RWattack—Right winger
CFattack—Centre forward
STattack—Striker

Sort keys

Pass one of these values as sort. Combine with order=asc or order=desc (default desc). When sort is omitted, results use updated_at.

ParameterTypeRequiredDescription
updated_atdatetime—When the player record was last updated (default).
namestring—Player display name (alphabetical).
ratinginteger—Overall card rating.
popularityinteger—Internal popularity score.
console_priceinteger—Current console BIN.
pc_priceinteger—Current PC BIN.
paceinteger—Pace attribute.
shootinginteger—Shooting attribute.
passinginteger—Passing attribute.
dribblinginteger—Dribbling attribute.
defendinginteger—Defending attribute.
physicalinteger—Physical attribute.

Example request

curl "https://api.thecoinprinter.com/api/v1/public/players/search?name=mbappe&min_rating=85&max_rating=92&positions=ST,CF&sort=rating&order=desc&page=1&take=20" \
  -H "Authorization: Bearer tcp_your_api_key"

Example response

{
  "data": [
    {
      "id": "8f3c1e2a-...",
      "name": "Kylian Mbappé",
      "rating": 91,
      "image": "https://.../player.png",
      "group_type": "REGULAR",
      "console_price": 1250000,
      "pc_price": 1180000,
      "console_previous_price": 1190000,
      "pc_previous_price": 1140000,
      "console_momentum_pct": 5.0,
      "pc_momentum_pct": 3.5,
      "league": "LaLiga EA Sports",
      "team": "Real Madrid",
      "nationality": "France",
      "position": "ST",
      "alt_positions": ["LW", "CF"],
      "pace": 97,
      "shooting": 90,
      "passing": 82,
      "dribbling": 92,
      "defending": 38,
      "physical": 78,
      "year": 27,
      "popularity": 984,
      "updated_at": "2026-08-01T12:00:00.000Z"
    }
  ],
  "pagination": { "page": 1, "take": 20, "total": 3 }
}

Get player

GET /api/v1/public/players/:id

Returns the same player object as a search hit: metadata, current console/PC BIN, previous BIN, and momentum for both platforms. Unknown ids return 404.

Path parameters

ParameterTypeRequiredDescription
idstringYesPlayer UUID.

Example request

curl "https://api.thecoinprinter.com/api/v1/public/players/8f3c1e2a-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer tcp_your_api_key"

Example response

{
  "id": "8f3c1e2a-...",
  "name": "Kylian Mbappé",
  "rating": 91,
  "image": "https://.../player.png",
  "group_type": "REGULAR",
  "console_price": 1250000,
  "pc_price": 1180000,
  "console_previous_price": 1190000,
  "pc_previous_price": 1140000,
  "console_momentum_pct": 5.0,
  "pc_momentum_pct": 3.5,
  "league": "LaLiga EA Sports",
  "team": "Real Madrid",
  "nationality": "France",
  "position": "ST",
  "alt_positions": ["LW", "CF"],
  "pace": 97,
  "shooting": 90,
  "passing": 82,
  "dribbling": 92,
  "defending": 38,
  "physical": 78,
  "year": 27,
  "popularity": 984,
  "updated_at": "2026-08-01T12:00:00.000Z"
}

BIN history

GET /api/v1/public/players/:id/previous-values

Append-only lowest-BIN snapshots for one platform, newest first. Each item is { value, createdAt } where value is the BIN and createdAt is when it was captured.

Path parameters

ParameterTypeRequiredDescription
idstringYesPlayer UUID.

Query parameters

ParameterTypeRequiredDescription
platformstringYesCONSOLE or PC.
limitintegerNoMax snapshots to return. Default 500, maximum 2000.
fromstringNoInclusive lower bound on capture time (ISO 8601 date-time).
tostringNoInclusive upper bound on capture time (ISO 8601 date-time).

Example request

curl "https://api.thecoinprinter.com/api/v1/public/players/8f3c1e2a-0000-0000-0000-000000000000/previous-values?platform=CONSOLE&limit=500" \
  -H "Authorization: Bearer tcp_your_api_key"

Example response

{
  "previous_values": [
    { "value": 1250000, "createdAt": "2026-08-28T12:00:00.000Z" },
    { "value": 1190000, "createdAt": "2026-08-27T12:00:00.000Z" }
  ]
}

Player object

Search items and the get-player response share this shape. Attribute fields may be null until a player has been scraped after that data was added. Previous BIN and momentum are null when there is not enough history.

FieldTypeDescription
idstringPlayer UUID.
namestringDisplay name.
ratingnumberOverall rating.
imagestring | nullPlayer card image URL.
group_typestringCard version / type (e.g. REGULAR, GOLD, NORMAL, ICON). Filterable via the version query param on search.
console_pricenumber | nullCurrent console lowest BIN.
pc_pricenumber | nullCurrent PC lowest BIN.
console_previous_pricenumber | nullPrevious console BIN from history (used for momentum). Null when there is no prior snapshot.
pc_previous_pricenumber | nullPrevious PC BIN from history. Null when there is no prior snapshot.
console_momentum_pctnumber | nullPercent change from console previous BIN to current console price, 1 decimal place. Null when it cannot be computed or the change is not plausible.
pc_momentum_pctnumber | nullPercent change from PC previous BIN to current PC price, 1 decimal place. Null when it cannot be computed or the change is not plausible.
leaguestring | nullLeague name.
teamstring | nullClub name.
nationalitystring | nullPlayer nation (e.g. France).
positionstring | nullPrimary position (e.g. ST, CM, GK).
alt_positionsstring[]Secondary positions.
pacenumber | nullMain pace attribute (0–99).
shootingnumber | nullMain shooting attribute (0–99).
passingnumber | nullMain passing attribute (0–99).
dribblingnumber | nullMain dribbling attribute (0–99).
defendingnumber | nullMain defending attribute (0–99).
physicalnumber | nullMain physical attribute (0–99).
yearnumber | nullFIFA year (e.g. 27).
popularitynumber | nullInternal popularity score.
updated_atstringISO 8601 timestamp of last player record update.

Errors

Errors are returned as JSON with an HTTP status code and a human-readable message.

StatusMeaning
400Bad request — a parameter is invalid (e.g. name shorter than 2 characters, min_rating greater than max_rating, invalid sort/order, or platform missing / not CONSOLE or PC).
401Unauthorized — missing, invalid, or revoked API key.
404Player not found — the id on GET /api/v1/public/players/:id does not exist.
429Too many requests — you have exceeded the rate limit.
API Documentation | The Coin Printer