Catalog feed

The catalog feed lists every product in a game — cards and sealed products — without prices. Prices live in the prices feed, which refreshes on a different schedule.

Get the download link from GET /v1/feeds/{gameId}/catalog, then read it as described in the feeds overview. One product per line.

Records use the same field names as the Products endpoints — id, productType, nameSlug, externalIds mean the same thing here and on GET /v1/products/{productId}.

Record shape

{
  "id": 50212,
  "productType": "card",
  "name": "Black Lotus",
  "nameSlug": "black-lotus",
  "slug": "alpha-black-lotus",
  "expansionId": 42,
  "expansionSlug": "alpha",
  "printNumber": "232",
  "variant": null,
  "rarity": "Rare",
  "finishes": ["Standard"],
  "languages": ["en"],
  "imageUrl": "https://ik.imagekit.io/cardnexus/prod/alpha/black-lotus.jpg",
  "imageBackUrl": null,
  "productCategory": null,
  "externalIds": {
    "cardmarket": [{ "finish": "Standard", "id": 5748 }],
    "tcgplayer": [{ "finish": "Standard", "id": 1148 }],
    "scryfallId": "ff1b8fc5-604a-4449-a73d-861e53642a70",
    "scryfallOracleId": "b7ad39b3-5d10-45a4-99ae-30972ea6ac42"
  },
  "translations": {
    "fr": { "name": "Lotus Noir" }
  },
  "attributes": {
    "color": [],
    "colorIdentity": [],
    "types": ["Artifact"],
    "description": "{T}, Sacrifice Black Lotus: Add three mana of any one color."
  }
}
Field Type Description
id number The product's stable identifier — the same id the Products and Pricing endpoints use. The prices feed references it as productId.
productType string card or sealed.
name string The product's name.
nameSlug string URL-safe slug of the product's name. Every printing of the same card, across expansions and variants, shares one nameSlug. Accepted as the nameSlug filter on POST /v1/products/search.
slug string URL-safe identifier of this exact printing, unique within the game. Two printings of the same card share a nameSlug but never a slug. The changelog identifies products by this slug.
expansionId number | null The expansion this product belongs to. Matches id in the expansions feed.
expansionSlug string | null The expansion's slug.
printNumber string | null Collector / print number within the expansion.
variant string | null Variant label, when the product is a variant of another printing.
rarity string | null The card's rarity. Values are game-specific. null for sealed products and for cards without a rarity.
finishes string[] The finishes this product exists in (e.g. Standard, Foil).
languages string[] Language codes the product is printed in.
imageUrl string | null Absolute image URL, or null when there's no image.
imageBackUrl string | null Absolute URL of the card's back image — double-faced cards and similar — or null.
productCategory string | null What kind of sealed product this is (e.g. booster_box, booster_pack, bundle). null for cards.
externalIds object | null The product's ids on Cardmarket and TCGplayer (one entry per finish) and in the game's card database (e.g. scryfallId and scryfallOracleId for Magic: The Gathering, konamiId for Yu-Gi-Oh!) — the same shape as externalIds on the Products endpoints. null when the product has no external mapping at all.
translations object | null Per-locale overrides, keyed by language code.
attributes object Game-specific fields (see below).

slug vs nameSlug

They are different fields and only sometimes carry the same value. nameSlug (black-lotus) groups every printing of a name; slug (alpha-black-lotus) pins one exact printing. When searching by name on POST /v1/products/search, use nameSlug. When matching changelog entries, use slug.

Game-specific attributes

attributes holds the gameplay fields that are specific to a game — they differ from one game to the next. A Magic: The Gathering card carries color, colorIdentity, types, and description; a Pokémon card carries different keys. Treat attributes as an open object and read the keys you need; don't assume a fixed set across games. The keys and values are the same ones the Products endpoints return in attributes.

The common fields above (name, nameSlug, finishes, languages, …) are consistent across every game, and external card-database ids live in externalIds, not here.