Skip to content
pokemontcgapi.com
Documentation

Set

An expansion: codes, totals, release date, print region and the artwork that identifies it.

object14 fields

id is the set code, not an internal UUID. Set codes are short strings like bs and sv3 — human-readable, stable and guessable, which is exactly what a UUID would take away from every id you already store.

The catalogue spans three print regions. /v1/sets carries meta.total_count and /v1/status the live totals, so you can read the number yourself rather than trusting a sentence that ages.

Fields

Set fields
FieldTypeNullDescription
idstringnoSame value as code. Present so code that stores one id field keeps compiling.
codestringnoCanonical code, e.g. bs. The natural key across every importer.
slugstringnoURL-safe name, e.g. base. Resolves anywhere code resolves.
legacy_idstringyesAlternate string id for the set, e.g. base1 for bs. Null on sets that never had one — most Japanese and Chinese print lines.
namestringnoPrinted set name.
seriesstringyesSeries name, e.g. Base. Null where the series is not mapped.
regionstringnoWEST (176 sets), JP (380) or CN (96), counted 2026-09-18. KR is valid in the schema and matches no rows. The region decides which upstream is authoritative and which prices are comparable.
release_datedateyesYYYY-MM-DD. The catalogue runs from 1996-10-20 to 2026-09-16.
totalintegeryesCards present in the catalogue, including secret rares but excluding variants such as reverse holos. Null when the set has no cards.
printed_totalintegeryesThe number printed on the card, e.g. 102 of a 134-card set.
ptcgo_codestringyesCode used by the game client, e.g. BS.
symbol_urlstringyesExpansion symbol. Null on every set, without exception: our upstream carries the logo and not the symbol, so nothing is written here. Use logo_url, which is present on all but ten sets (measured 2026-09-17: 641 of 651). (This row read "frequently null" until 2026-09-03, which was a kinder word than the data deserved.)
logo_urlstringyesSet logo.
updated_attimestampnoISO 8601, UTC.

Example

set.json
{
  "id": "bs",
  "code": "bs",
  "slug": "base",
  "legacy_id": "base1",
  "name": "Base",
  "series": "Base",
  "region": "WEST",
  "release_date": "1999-01-09",
  "total": 134,
  "printed_total": 102,
  "ptcgo_code": "BS",
  "symbol_url": null,
  "logo_url": "https://img.pokemontcgapi.com/media/sets/BASE/logo-normal.webp?e=1791763200&s=7HgT2wKp0bNxYr4uEv1cLz",
  "updated_at": "2026-08-26T17:47:39.900Z"
}

Asian print lines are separate sets

A Japanese set is its own set, with its own code, its own numbering and its own release date — not a translation of a Western one. region is how you keep the two apart, and ?region=JP on /v1/sets is a real filter that returns 379 rows.

lang on the card endpoints is a different thing entirely: it translates a printed name and does not change which set you are looking at.

view this page as markdown