List sealed products
Booster boxes, packs, ETBs and the rest, every game, with TCGplayer and Cardmarket prices.
TCGplayer's sealed catalogue is the spine: every sealed product TCGplayer lists, for every game, from the day it opens preorders. Japanese One Piece, which TCGplayer does not sell, comes from Cardmarket. Accessories, lots of singles and code cards are not sealed product and are not listed.
A preorder carries presale: true and its announced release day as releasedAt. Its set is null until the set itself is catalogued, typically on release, so find early products with presale=true or releasedAfter rather than set.
Cardmarket's price is tied to a product by name, within its set where it has one. Where the two marketplaces name a product too differently to tie with confidence, the Cardmarket side is unlisted rather than guessed.
Cardmarket lists one product for every language it is sold in, so its quote on an English product can include copies in German, French or Italian. Its Japanese products are separate.
Sealed products carry no graded prices.
meta carries page, limit, totalCount, totalPages and hasMore, like the card lists, but no priceSource.
Query parameters
Any other query parameter is a 400 naming it and listing these, so a misspelt one is never silently ignored. api_key is accepted on every endpoint as an alternative to the header.
| Parameter | Type | Description |
|---|---|---|
| game | string | Only this game. Needed with set.One of: Default: every game |
| set | string | A set code, whole and case-insensitive, as /v1/sets lists it: set=sv8 is Surging Sparks. Needs game, since set codes are only unique within a game. Products filed under no set, which is most tins and collections, are found by name instead. |
| type | string | One type, or several separated by commas: type=booster-box,etb. Case-insensitive, with spaces and underscores read as hyphens; elite-trainer-box, booster-pack, booster, booster-display, display and starter-deck are read as the type they mean.One of: |
| language | string | The language of the product's cards, or all. Case-insensitive, with jp, kr and sp accepted. Japanese sealed product is listed for Pokémon and One Piece under ja, and a few Magic products in other languages. A product asked for by barcode or marketplace id is found whatever its language unless this says otherwise.One of: Default: en, or all with upc, tcgplayerId or cardmarketId |
| name | string | Words of the product name, case-insensitive. Each word must appear somewhere in the name, in any order: name=sparks box finds Surging Sparks Booster Box. |
| upc | string | A barcode: UPC-A, EAN-8, EAN-13 or GTIN-14. Spaces and dashes are ignored, and so are leading zeros beyond twelve digits, so a GTIN-14 finds the product its UPC-A does. Few products carry one; see upc on the object. |
| tcgplayerId | integer | TCGplayer's product id. |
| cardmarketId | integer | Cardmarket's product id (idProduct). |
| releasedAfter | string | Released on or after this day, YYYY-MM-DD. Products without a date are excluded. |
| releasedBefore | string | Released on or before this day, YYYY-MM-DD. A preorder's date is its announced release day, so a future date includes what is coming. |
| presale | boolean | true for preorders only, false to leave them out. |
| sort | string | - for descending; released is the product's release date. Products without a date sort last either way. Ties break on name, then id.One of: Default: |
| page | integer | Page number, from 1. Below 1 reads as 1. A page past the end returns an empty data with hasMore: false.Default: |
| limit | integer | Rows per page, 1 to 100. Out-of-range values are clamped, not refused; meta.limit reports the size used.Default: |
Response
200 A page of sealed products.
| Field | Type | Description |
|---|---|---|
| data | Sealed[] (Sealed reference) | The products. |
| meta | object | Paging. |
| meta.page | integer | The page returned. |
| meta.limit | integer | The page size used. |
| meta.totalCount | integer | Products matching, across every page. |
| meta.totalPages | integer | At least 1. |
| meta.hasMore | boolean | Whether a later page has rows. |
Examples
Real responses from the production API, recorded on 2026-10-05 by the script that also checks every field above against them. Arrays are shown in full.
Errors
Every error has the same body; switch on error.code. Any endpoint can also answer 401, 402, 403 or 429 for reasons of key, plan or rate; those are on Errors.
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | set without game. |
| 400 | invalid_request | A game, type, language or sort outside its list, or a parameter this endpoint does not take. |
| 400 | invalid_request | A upc that is not 8 or 12 to 14 digits, an id that is not a positive whole number, a date that is not YYYY-MM-DD, or a presale other than true or false. |