Skip to content
pokemontcgapi.com
Documentation

Price stats

Low, high, median, first, last and the percentage change of the composite index over a window.

GET/v1/cards/{id}/prices/stats2 creditsfree plan

Cache-Control: public, max-age=300

Objects returned

Always computed on PTCG_INDEX, in EUR — the one series that exists for every priced card and is comparable across them. sample_n is the number of index points in the window; zero means the card had no index in that period, and every other field is null.

Two credits, not five: a stats call reads the index rows of one card, which is a fraction of what a history call touches.

Path parameters

Path parameters
NameTypeDefaultDescription
id requiredstringCard id or alternate id.

Query parameters

Query parameters
NameTypeDefaultDescription
windowstring30d7d, 30d, 90d or 365d. A window longer than the plan’s history is UPGRADE_REQUIRED, with details.plan_window_days.
localestringRestrict the index to one printing language.

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/cards/base1-4/prices/stats" \
  --data-urlencode "window=30d" \
  -H "X-Api-Key: $PTCG_API_KEY"

Example response

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

response.json
{
  "data": {
    "window": "30d",
    "from": "2026-08-03",
    "to": "2026-09-02",
    "low": 431.41,
    "high": 431.41,
    "median": 431.41,
    "first": 431.41,
    "last": 431.41,
    "change_pct": 0,
    "sample_n": 1,
    "currency": "EUR"
  },
  "meta": {
    "card_id": "base1-4",
    "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.
403UPGRADE_REQUIREDA parameter asks for more than the plan allows: a window longer than the plan’s history, for example. details.plan_window_days says how much the plan gives.

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

view this page as markdown