Skip to content
pokemontcgapi.com

Sealed product price API

Booster box and sealed Pokémon product prices over an API

Booster boxes, cases, Elite Trainer Boxes, tins, blisters and collection boxes as first-class objects, each tied to its set, with names in several languages, an image and current prices.

Kinds
Booster box, case, ETB, tin, blister, collection and more
Search
q, set, kind, lang, sorted by release, name or value
Prices
GET /v1/sealed/{id}/prices, same row format as cards
On the trial
Yes, catalogue and current prices

Sealed product is where a lot of the money in this hobby sits, and it is usually an afterthought in card APIs: a string in a notes field, if anything. Here a sealed product has an id, a kind, the set it belongs to, a pack count where that makes sense, an image, and its own price route.

GET /v1/sealed?set=evs&kind=BOOSTER_BOX answers "what does an Evolving Skies booster box cost" in one call. With include=index every row in the list carries index_eur and last_price_at, so a portfolio of sealed product has one comparable figure per line without a request per product.

One call, and what comes back

Searching sealed products. The response is a real one from production: note `kind`, `set_code` and `pack_count` next to the price fields.

GET/v1/sealed1 credit · from Trialfull reference
curl -s -G "https://api.pokemontcgapi.com/v1/sealed" \
  --data-urlencode "q=evolving skies" \
  --data-urlencode "kind=BOOSTER_BOX" \
  --data-urlencode "limit=2" \
  -H "X-Api-Key: $PTCG_API_KEY"
response.json
{
  "data": [
    {
      "id": "evolving-skies-6-booster-box-case",
      "sku": "evolving-skies-6-booster-box-case",
      "slug": "evolving-skies-6-booster-box-case",
      "name": "Evolving Skies 6 Booster Box Case",
      "kind": "BOOSTER_BOX",
      "set_code": "evs",
      "set_name": "Evolving Skies",
      "image_url": "https://media.rarebit.app/boxes/evolving-skies-6-booster-box-case-normal.webp",
      "release_date": null,
      "pack_count": 216,
      "languages": [],
      "index_eur": 15495,
      "last_price_at": "2026-09-02T00:38:55.286Z",
      "created_at": "2026-05-23T12:43:56.128Z",
      "updated_at": "2026-09-02T15:56:54.473Z"
    },
    {
      "id": "evolving-skies-booster-box",
      "sku": "evolving-skies-booster-box",
      "slug": "evolving-skies-booster-box",
      "name": "Evolving Skies Booster Box",
      "kind": "BOOSTER_BOX",
      "set_code": "evs",
      "set_name": "Evolving Skies",
      "image_url": "https://media.rarebit.app/boxes/evolving-skies-booster-box-normal.webp",
      "release_date": null,
      "pack_count": 36,
      "languages": [],
      "index_eur": 1750,
      "last_price_at": "2026-09-02T00:36:37.317Z",
      "created_at": "2026-05-23T12:43:56.069Z",
      "updated_at": "2026-09-02T15:56:54.473Z"
    }
  ],
  "meta": {
    "limit": 2,
    "count": 2,
    "total_count": 3,
    "has_more": true
  },
  "links": {
    "next": "https://api.pokemontcgapi.com/v1/sealed?cursor=eyJrIjpbbnVsbF0sImlkIjoiZXZvbHZpbmctc2tpZXMtYm9vc3Rlci1ib3giLCJzIjoicmVsZWFzZV9kYXRlOmRlc2Msc2t1OmFzYyJ9&kind=BOOSTER_BOX&limit=2&q=evolving+skies"
  }
}

Prices, and what they cost you

A product's current prices come from GET /v1/sealed/{id}/prices for 2 credits, in the same row format as cards: source, variant, basis, currency, date. A list is 1 credit, plus 1 per 50 rows when you ask for the index. A single product always carries its index.

The trial key is 800 credits, granted once and valid for 30 days, with no credit card. It reaches every catalogue route and the current prices, with 7 days of price history.

Cards and sealed in one portfolio

Because a sealed product points at its set by set_code, the same set page in your app can show the cards, the products that contain them and what each is worth. The /v1/changes feed reports sealed products too, so a mirror stays current without re-reading the list.

What it is not

Read this before you build on it. Every line here is a support ticket somebody else already opened.

Pokémon only
The sealed catalogue is filtered to Pokémon TCG products. Other games are not served.
Release dates are partial
release_date is null on many products. Sort by name or by value when the date matters to your UI, or fall back to the release date of the set.
Fewer sources than cards
Not every price source covers sealed product. Read GET /v1/sealed/{id}/prices for what exists rather than assuming the card sources apply.

Questions people ask before signing up

Is there an API for Pokémon booster box prices?
Yes. GET /v1/sealed lists sealed products, filterable by set and kind, and GET /v1/sealed/{id}/prices returns the current price rows for one product, each with its source, basis and date.
Which sealed product types are covered?
Booster boxes and cases, Elite Trainer Boxes, tins, blisters, collection boxes and similar retail products, each with a kind field you can filter on. The live count is on GET /v1/status. Coverage, measured live
Can I track the value of a sealed collection?
Yes. Ask for the list with include=index to get one comparable EUR figure per product, store it daily, and you have a value series. It costs 1 credit per 50 products on top of the list call. Use case: price tracker
Is sealed product available on the free trial?
Yes, both the catalogue and the current prices: 800 credits, once, valid 30 days, no card. Free trial key

Keep reading