Skip to content
pokemontcgapi.com

Coverage

What this Pokémon TCG API covers

Every figure on this page was read from the live API when the page was built, and carries the endpoint that produced it and the moment it was read. Nothing here is a claim we typed in and forgot to revisit — if the database changes, this page changes with it, and where a number could not be read it says so instead of quietly showing an old one.

Read at · same figures as JSON

Not read live

At least one figure below could not be read from the API when this page was built, and falls back to the last published measurement of 2026-08-27. Every figure states which of the two it is, and the endpoint printed next to it returns the current answer right now.
Sets
615
read liveapi.pokemontcgapi.com/v1/status
Cards
52,337
read liveapi.pokemontcgapi.com/v1/status
Illustrators
399
published 2026-08-27api.pokemontcgapi.com/v1/artists?limit=1
Rarity values
67
read liveapi.pokemontcgapi.com/v1/reference

Sets by print region

Each row is one request. The count is meta.total_count on a request that asks for a single set, so the number is the database’s own answer rather than ours — including the row that comes back at zero.

Release window across the whole catalogue

Earliest set

Expansion Pack exp · JP

published 2026-08-27api.pokemontcgapi.com/v1/sets?region=JP&limit=1&orderBy=release_date

Latest set

30th Celebration 30th-celebration · WEST

published 2026-08-27api.pokemontcgapi.com/v1/sets?region=WEST&limit=1&orderBy=-release_date

Locales with translated card names

  • en
  • ja
  • fr
  • de
  • es
  • it

published 2026-08-27Union of the translation locales observed over a 500-card sample — 100 cards from each of five sets (sv3, sv1, swsh1, bs, xy1), requested with ?include=translations. No ko, zh_tw, pt, id or th row appeared anywhere in that sample.

Catalogue totals read from https://api.pokemontcgapi.com/v1/status, the rest from the endpoints stamped above, at . None of these calls needs a key, so every figure on this page can be re-run from a terminal.

The catalogue by print region

Print region is a first-class filter on the API, not a label: ?region= takes WEST, JP, CN or KR on set queries and the count in the table is whatever that request answers today.

Sets, card name locales, release window and price sources for each print region
Print regionSetsCard name localesEarliest releaseLatest releasePrices
WESTWestern print176en, ja, fr, de, es, itBase30th CelebrationEUR · USD3 sources
JPJapanese print379en, ja, fr, de, es, itExpansion PackStorm EmeraldaEUR · USD3 sources
CNSimplified Chinese print60en, ja, fr, de, es, itSun & Moon Chinese: AGem Pack Vol.6no price rows, published 2026-08-27

The locale column repeats the same list on every row that has sets, and that repetition is deliberate: translations hang off the card, not off the print region, so a per-region locale column would be a measurement we have not made dressed up as one we have. Price sources are read from one sampled card per region — the card and the request are printed in the sections below.

Japanese sets

The Japanese print line is the largest single region in the catalogue: 379 sets, from 1996-10-20 to 2026-07-31. It reaches further back than any other region, because the game started there — the oldest set in the whole database is a Japanese one, Expansion Pack, released .

Japanese sets carry the same shape as every other set: a stable code, a slug, a release date, a card total where the upstream publishes one, and a logo image. Cards in them carry Japanese names through ?include=translations, and price rows in both EUR and USD.

every Japanese set
curl -s "https://api.pokemontcgapi.com/v1/sets?region=JP&limit=250&orderBy=release_date"

# meta.total_count is the figure printed above: 379

Simplified Chinese sets

The Simplified Chinese print line is the youngest region we carry: 60 sets, from 2022-10-28 to 2026-08-07. The line itself only started in 2022, so the shallow history is the market’s, not a gap in the import.

One thing to know before you build on it, and it is measured rather than assumed: Simplified Chinese cards carry no price rows today. The sampled card cn-cbb6c-1-v1 returns prices: [] and a null index_eur. Sets, cards, numbering and images are all there; the price series is not, and we would rather you read that here than discover it in production.

the sampled Simplified Chinese card
curl -s "https://api.pokemontcgapi.com/v1/cards/cn-cbb6c-1-v1?include=prices"

# → "print_region": "CN"
# → "prices": []
# → "index_eur": null

Prices in EUR

Every card that has prices carries index_eur, a daily composite in euro computed on our own database, plus last_price_at. Ask for ?include=prices and you also get the individual rows behind it, each one stamped with its own source, basis, capture date and a printable provenance string.

Euro is not a conversion layer bolted on top of dollar figures. The rows quoted in EUR are quoted in EUR at the source, and the rows quoted in USD stay in USD — a silently converted price is a number with an unknown error bar and an unknown rate date.

Distinct sources

3

Counted across the sampled cards, one per print region. Every row names its own source in the source field.

Currencies

  • EUR
  • USD

Each row is quoted in the currency it was captured in. Nothing is silently converted.

Bases

  • DERIVED
  • GUIDE

Whether a figure is a published guide number or one we computed ourselves, on every row.

Every price row carries these 12 fields: source, variant, basis, price, currency, locale, condition, printing, grading, as_of, sample_n, provenance. The provenance field is a printable attribution string, so you can put the credit next to the number in your own product without asking us where it came from.

Where the numbers come from

Which upstream each source is, how long it is delayed, and what we will and will not resell is a separate page, because it is a rights question rather than a coverage one. Read the price methodology.

Sealed products

2,088 sealed products — booster boxes, elite trainer boxes, tins, blisters, collections and eighteen other kinds — each with a stable sku that is also its id, the set it belongs to where that set is in the catalogue, an image on nearly all of them, and names in English, Japanese, Italian, Spanish, German and French. GET /v1/sealed lists and searches them; ?kind= and ?set= narrow the list.

Prices follow the same rules as cards: index_eur on the product, and GET /v1/sealed/{id}/prices for the observations behind it, each with its source, variant, currency, printing language and capture date. Cardmarket observations reach back to November 2024 in six printing languages; TCGplayer and community rows join them, under the same allow-list as cards.

What every card carries

The fields you get back on a card, and how to ask for the ones that are opt-in. The response shape is the same on every card in every region, so a client written against one set reads all of them.

  • IdentityA stable id you can build by hand (set code and number), a legacy_id for older integrations, a slug, and row_version for change tracking through GET /v1/changes.
  • Set and positionset_code, set_name, series, print_region, release_date and set_total on every card, plus number and number_sort so a set lists in printed order.
  • Printing detailssupertype, rarity and regulation_mark as printed, and the illustrator as artist_name and artist_slug, with GET /v1/artists for the reverse lookup.
  • Names in six locales?include=translations returns every name we hold for the card (en, ja, it, es, de, fr, where printed); ?lang= swaps name itself, falling back to English.
  • ImagesFront images in several sizes, per locale, served from img.pokemontcgapi.com with width and height where known.
  • Japanese twinjp_twin_id links a Western printing to its Japanese counterpart and back, on the cards where the pairing is known.
  • Pricesindex_eur and last_price_at on the card; ?include=prices adds every row with source, basis, variant, condition, currency, capture date and a printable provenance; history on paid plans.

The full object, field by field, is on the objects page; the sampled requests in the sections above are the quickest way to see a real one.

The same figures, as JSON

Everything on this page also exists as one small JSON document, with the same provenance stamps and a licence that permits factual reuse with attribution. If you are writing something that cites coverage figures, read that instead of scraping this.

coverage.json
curl -s "https://pokemontcgapi.com/coverage.json" | jq '.regions'

Check any figure on this page

Every endpoint printed above answers without a key. A key is what gets you a rate limit you can plan around, not what gets you the data.