Skip to main content
Names are <game>.<entity>.<action>. The pokemon. prefix leaves room for another game without renaming anything you have already built against. Every record shape below is the same shape /v1 already serves for that entity. A card in pokemon.cards.updated is exactly what GET /v1/cards/{id} returns inside its data, and so on, so one decoder covers both. A delivery carries these records directly. The { data, error } envelope belongs to a /v1 read, not to a delivery, and nothing below is wrapped in it. A group that changed more than 500 records in one run arrives split across several deliveries, each carrying a chunk: { index, of } field alongside the records. See the delivery body. A smaller group carries no chunk key at all.

Cards

pokemon.cards.updated

Card details changed. A new card appeared, or an existing one’s name, rarity, illustrator, category, metadata or variants changed.

pokemon.cards.deleted

A card was removed. Nothing emits this event today. It stays in the catalogue so a mirror already knows how to handle a card deletion the day one becomes possible, rather than that being a docs change, a console change and your own deploy all at once.

Card variants

pokemon.card_variants.deleted

A card printing was removed. One or more printings no longer exist. Each entry names the card_id the printing belonged to alongside variant_id, that printing’s own numeric id and the same value GET /v1/cards/{id}’s variants[].id carries. The card itself is not necessarily deleted, only that printing of it, and two entries can name different cards in one delivery.

Card prices

pokemon.card_prices.snapshot

Daily card prices published. Card prices rewrite most of their rows every day, so this is not a record of what changed — it is a pointer to a published file holding every current card price. data.currency is always "USD". Fetch url, verify the download against sha256, and read prices from the file itself; nothing about an individual card’s price rides on the event.
rows counts price rows in the file; subjects counts the distinct cards represented, always fewer since one card carries several rows.

Sealed products

pokemon.products.updated

Sealed product details changed. A booster box, ETB, collection or similar changed: its name, number, image, the expansions it belongs to, or its current prices.

pokemon.products.removed

A sealed product was removed. It left the catalogue, or was detached from every expansion it was listed under. product_ids are those products’ own numeric ids.

Sealed product prices

pokemon.product_prices.snapshot

Daily sealed product prices published. The same pointer shape as card_prices.snapshot, naming a published file of current sealed product prices instead of card prices.

Expansions

pokemon.expansions.created

A new expansion appeared. It usually arrives sparse, named and dated, with cards landing over the following days. Treat it as “start watching”, not “fetch everything now”.

pokemon.expansions.updated

Expansion details changed. An expansion’s own name, series, logo, symbol or legality was corrected. Nothing about its cards or prices changes here. Those arrive as their own events.

Series

pokemon.series.created

A new series appeared. The sv series carries 19 expansions. Trimmed to the first three below, still in release-date order, to keep the example short.

pokemon.series.updated

Series details changed. A series’ own name or logo was corrected. Trimmed the same way as above: the first three of sv’s 19 expansions, in release-date order.