Player Search API

A read-only API for looking up the FIFA Ultimate Team player data held by The Coin Printer. It exposes player search only — no accounts, no trading tools.

Overview

The public API lets approved partners search our player database by name and read the metadata, prices, nationality, positions, and main play stats we track for the current FIFA year. All requests are made over HTTPS and return JSON.

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

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

Query parameters

ParameterTypeRequiredDescription
qstringNoPlayer name search term (min 2 characters, case-insensitive). When omitted, the most recently updated players are returned.
pageintegerNoPage number, 1-indexed. Default 1.
takeintegerNoResults per page. Default 20, maximum 50.

Example request

curl "https://api.thecoinprinter.com/api/v1/public/players/search?q=mbappe&page=1&take=20" \
  -H "Authorization: Bearer tcp_your_api_key"

Response fields

FieldTypeDescription
nationalitystring | nullPlayer nation (e.g. France).
teamstring | nullPlayer team (e.g. Real Madrid).
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).

Attribute fields may be null until a player has been scraped after this data was added. Existing fields (id, name, rating, prices, league, etc.) are unchanged.

Example response

{
  "data": [
    {
      "id": "8f3c1e2a-...",
      "name": "Kylian Mbappé",
      "rating": 91,
      "image": "https://.../player.png",
      "group_type": "REGULAR",
      "console_price": 1250000,
      "pc_price": 1180000,
      "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": 26,
      "popularity": 984,
      "updated_at": "2026-08-01T12:00:00.000Z"
    }
  ],
  "pagination": { "page": 1, "take": 20, "total": 3 }
}

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. q provided but shorter than 2 characters).
401Unauthorized — missing, invalid, or revoked API key.
429Too many requests — you have exceeded the rate limit.