Skip to content
Prepaid, no subscription trap. Top up a balance and we draw the monthly fee from it.
tcggraph

List sealed products

Booster boxes, packs, ETBs and the rest, every game, with TCGplayer and Cardmarket prices.

GEThttps://api.tcggraph.com/v1/sealed2 credits · metering

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.

ParameterTypeDescription
gamestringOnly this game. Needed with set.

One of: pokemon, magic-the-gathering, one-piece, yugioh, disney-lorcana, star-wars-unlimited, digimon, grand-archive, dragon-ball-super

Default: every game

setstringA 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.
typestringOne 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: booster-box, pack, etb, bundle, collection, tin, blister, deck, case, other

languagestringThe 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: en, de, fr, it, es, pt, ja, ko, ru, zhs, zht, th, id, ph, qya, dw, grc, he, ar, la, sa, all

Default: en, or all with upc, tcgplayerId or cardmarketId

namestringWords 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.
upcstringA 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.
tcgplayerIdintegerTCGplayer's product id.
cardmarketIdintegerCardmarket's product id (idProduct).
releasedAfterstringReleased on or after this day, YYYY-MM-DD. Products without a date are excluded.
releasedBeforestringReleased 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.
presalebooleantrue for preorders only, false to leave them out.
sortstring- 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: -released, released, name, -name

Default: -released

pageintegerPage number, from 1. Below 1 reads as 1. A page past the end returns an empty data with hasMore: false.

Default: 1

limitintegerRows per page, 1 to 100. Out-of-range values are clamped, not refused; meta.limit reports the size used.

Default: 20

Response

200 A page of sealed products.

FieldTypeDescription
dataSealed[] (Sealed reference)The products.
metaobjectPaging.
meta.pageintegerThe page returned.
meta.limitintegerThe page size used.
meta.totalCountintegerProducts matching, across every page.
meta.totalPagesintegerAt least 1.
meta.hasMorebooleanWhether 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.

StatusCodeWhen
400invalid_requestset without game.
400invalid_requestA game, type, language or sort outside its list, or a parameter this endpoint does not take.
400invalid_requestA 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.