<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.