# Sealed product

> A booster box, elite trainer box, tin, blister or collection: the unit a shop sells and a collector keeps shrink-wrapped.

Source: https://pokemontcgapi.com/docs/objects/sealed

Returned by `GET /v1/sealed` and `GET /v1/sealed/{id}`. The catalogue holds 2,088 of them (measured 2026-09-02 on `GET /v1/status`), 1,883 with a slug, 2,057 with an image, and names in up to six locales.

`id` is the `sku`: a readable, stable string that is also the path segment of the product’s routes. There is no separate numeric or UUID id to keep, and none is exposed.

## Fields

| Field | Type | Null | Description |
| --- | --- | --- | --- |
| `id` | string | no | Equal to `sku`. The value that opens `/v1/sealed/{id}` and `/v1/sealed/{id}/prices`. |
| `sku` | string | no | Unique across the catalogue, e.g. `evolving-skies-booster-box`. |
| `slug` | string | yes | URL slug, present on most products and usually equal to the sku. Also resolves on the single-product routes. |
| `name` | string | no | English by default; `?lang=` swaps it for the requested locale with an English fallback. |
| `kind` | string | yes | Product kind as catalogued: `BOOSTER_BOX`, `ETB`, `TIN`, `BLISTER`, `COLLECTION`, `BOOSTER_PACK`, `BOOSTER_BUNDLE`, `STARTER_DECK`, `BUILD_AND_BATTLE`, `PREMIUM_COLLECTION`, `SLEEVED_BOOSTER` and twelve more. Filterable with `?kind=`. |
| `set_code` | string | yes | The set the product belongs to, when it is in the catalogue; opens `/v1/sets/{code}`. Null for products that span sets or whose set is not carried. |
| `set_name` | string | yes | English name of that set. |
| `image_url` | string | yes | Product image, where one exists. |
| `release_date` | date | yes | `YYYY-MM-DD`, where known. |
| `pack_count` | integer | yes | Booster packs inside, for the products that contain them. |
| `languages` | string[] | no | Languages the product physically exists in — the printing, not the name. Empty when not catalogued. |
| `index_eur` | number | yes | Catalogue price in euros, where one is known. Sortable with `orderBy=-index_eur`. |
| `last_price_at` | timestamp | yes | When a market price was last observed for this product. |
| `created_at` | timestamp | no | When the product entered the catalogue. |
| `updated_at` | timestamp | no | Last change to any field above. |

## Example

`sealed.json`

```json
{
  "id": "SV2a-booster-box",
  "sku": "SV2a-booster-box",
  "slug": null,
  "name": "Pokemon Card 151 Booster Box",
  "kind": "BOOSTER_BOX",
  "set_code": "sv2a",
  "set_name": "Pokemon Card 151",
  "image_url": "https://media.rarebit.app/boxes/SV2a-booster-box-normal.webp",
  "release_date": "2023-06-16",
  "pack_count": null,
  "languages": [
    "ja"
  ],
  "index_eur": null,
  "last_price_at": "2026-06-23T01:24:42.794Z",
  "created_at": "2026-06-12T10:29:43.290Z",
  "updated_at": "2026-09-02T15:56:54.473Z"
}
```
