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, position, league, team, nationality), 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 rating, position, league, team, nationality)GET /api/v1/public/players/:id— player detailGET /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_keyAPI 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
Case-insensitive name search with optional attribute filters. With q, results are ordered by popularity then rating. Without q, the most recently updated players are returned. By default only Gold card versions are included (REGULAR, GOLD, NORMAL); pass version=all to include specials and other types.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | No | Player name search term (min 2 characters, case-insensitive). When omitted, the most recently updated players are returned. |
| version | string | No | Card 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_rating | integer | No | Inclusive minimum overall rating (1–99). Must not be greater than max_rating. |
| max_rating | integer | No | Inclusive maximum overall rating (1–99). Must not be less than min_rating. |
| position | string | No | Primary or alternate position (case-insensitive), e.g. ST, CM, CB, GK. |
| league | string | No | League name (case-insensitive exact match). |
| team | string | No | Club / team name (case-insensitive exact match). |
| nationality | string | No | Nation name (case-insensitive exact match). |
| page | integer | No | Page number, 1-indexed. Default 1. |
| take | integer | No | Results per page. Default 20, maximum 50. |
Example request
curl "https://api.thecoinprinter.com/api/v1/public/players/search?q=mbappe&min_rating=85&max_rating=92&position=ST&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
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Player 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Player UUID. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| platform | string | Yes | CONSOLE or PC. |
| limit | integer | No | Max snapshots to return. Default 500, maximum 2000. |
| from | string | No | Inclusive lower bound on capture time (ISO 8601 date-time). |
| to | string | No | Inclusive 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.
| Field | Type | Description |
|---|---|---|
| id | string | Player UUID. |
| name | string | Display name. |
| rating | number | Overall rating. |
| image | string | null | Player card image URL. |
| group_type | string | Card version / type (e.g. REGULAR, GOLD, NORMAL, ICON). Filterable via the version query param on search. |
| console_price | number | null | Current console lowest BIN. |
| pc_price | number | null | Current PC lowest BIN. |
| console_previous_price | number | null | Previous console BIN from history (used for momentum). Null when there is no prior snapshot. |
| pc_previous_price | number | null | Previous PC BIN from history. Null when there is no prior snapshot. |
| console_momentum_pct | number | null | Percent 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_pct | number | null | Percent change from PC previous BIN to current PC price, 1 decimal place. Null when it cannot be computed or the change is not plausible. |
| league | string | null | League name. |
| team | string | null | Club name. |
| nationality | string | null | Player nation (e.g. France). |
| position | string | null | Primary position (e.g. ST, CM, GK). |
| alt_positions | string[] | Secondary positions. |
| pace | number | null | Main pace attribute (0–99). |
| shooting | number | null | Main shooting attribute (0–99). |
| passing | number | null | Main passing attribute (0–99). |
| dribbling | number | null | Main dribbling attribute (0–99). |
| defending | number | null | Main defending attribute (0–99). |
| physical | number | null | Main physical attribute (0–99). |
| year | number | null | FIFA year (e.g. 27). |
| popularity | number | null | Internal popularity score. Search results are ranked by this. |
| updated_at | string | ISO 8601 timestamp of last player record update. |
Errors
Errors are returned as JSON with an HTTP status code and a human-readable message.
| Status | Meaning |
|---|---|
| 400 | Bad request — a parameter is invalid (e.g. q shorter than 2 characters, min_rating greater than max_rating, or platform missing / not CONSOLE or PC). |
| 401 | Unauthorized — missing, invalid, or revoked API key. |
| 404 | Player not found — the id on GET /api/v1/public/players/:id does not exist. |
| 429 | Too many requests — you have exceeded the rate limit. |