Skip to content
pokemontcgapi.com
Documentation

Movers

The cards whose composite index rose or fell the most over a window.

GET/v1/prices/movers3 creditsgrowth plan

Cache-Control: public, max-age=300

Objects returned

From Developer up. On the trial the route answers 403 PLAN_REQUIRED rather than an empty list, so a client can tell "not allowed" from "nothing moved".

from and to are the index at the two ends of the window, in EUR; change_pct is computed from them. The ranking is over the whole catalogue in one query, which is why it is the heaviest price route and priced accordingly.

Query parameters

Query parameters
NameTypeDefaultDescription
windowstring30d7d, 30d, 90d or 365d.
directionstringgainersgainers or losers.
min_valuenumber1Ignore cards whose index at the end of the window is below this many euros. Percentages on a ten-cent card are noise.
localestringRestrict to one printing language.
limitinteger20Rows to return, 1 to 250.

Headers

Headers
NameTypeDefaultDescription
X-Api-Key requiredstringYour API key. Authorization: Bearer <key> is accepted as an alias.
If-None-MatchstringSend back the ETag you stored. The API returns a strong ETag on every catalogue response, and a 304 is a header exchange: no body, no database row read.

Example request

curl -s -G "https://api.pokemontcgapi.com/v1/prices/movers" \
  --data-urlencode "window=90d" \
  --data-urlencode "min_value=5" \
  --data-urlencode "limit=3" \
  -H "X-Api-Key: $PTCG_API_KEY"

Example response

200 OK · Cache-Control: public, max-age=300

response.json
{
  "data": [
    {
      "card_id": "adv1-002",
      "name": "Weezing",
      "set_code": "adv1",
      "from": 7.23,
      "to": 7.23,
      "change_pct": 0,
      "currency": "EUR"
    },
    {
      "card_id": "adv1-003",
      "name": "Sceptile",
      "set_code": "adv1",
      "from": 21.56,
      "to": 21.56,
      "change_pct": 0,
      "currency": "EUR"
    },
    {
      "card_id": "adv1-006",
      "name": "Beautifly",
      "set_code": "adv1",
      "from": 6.73,
      "to": 6.73,
      "change_pct": 0,
      "currency": "EUR"
    }
  ],
  "meta": {
    "window": "90d",
    "from": "2026-06-04",
    "to": "2026-09-02",
    "direction": "gainers",
    "min_value": 5,
    "count": 3,
    "source": "PTCG_INDEX"
  }
}

Errors

Every error body carries error.code, error.message and error.request_id. Switch on the code, never on the message.

Errors returned by this endpoint
StatusCodeWhen
401MISSING_API_KEYNo X-Api-Key header and no bearer token on a route that requires one.
401INVALID_API_KEYThe key does not match any account.
400INVALID_PARAMETERA query parameter has the wrong type or an unsupported value — a non-integer limit, an unknown lang, an unknown region, a sort key that is not sortable.
403PLAN_REQUIREDThe route exists and the key is valid, but the plan does not include this feature. Today that is /v1/prices/movers on the trial.

The full taxonomy, with what to do about each code, is on the errors page.

view this page as markdown