List a card’s printings

GET /api/v1/pokemon/cards/{id}/printings read:catalog 1 credit

Every printing that shares this card’s code — the base art, each alternate and special art, and the same set in every language it was printed in. Each one is a full Card object with its own id, its own images and (with `include=prices`) its own price: in One Piece the spread across one code reaches 1000×, so which printing you mean is a purchase decision, not a display detail. Prefer this over guessing at id suffixes.

`variants[]` on a card describes that one row’s finish, not its siblings — this endpoint is how you find the siblings.

Order is canonical and does not depend on which printing you asked by: the anchor’s language first, then the rest alphabetically, then id — which puts a base art ahead of its own parallels. `EB01-001vaa` returns the same page, in the same order, as `EB01-001`.

Every language is returned by default, since a code names the same card in each one; pass `language=ja` (or a comma list) to narrow, and read `language_code` per row. `total_count` is the true family size even if the 50-row cap truncated the page.

This one is not paginated. It answers in a single request — `page` and `page_size` are not read, and the envelope always reports `page: 1, page_size: 50`. There is no second page to walk: narrow with `language` if a family is large enough to hit the cap.

Try it GET /api/v1/pokemon/cards/swshp_ja-104vh/printings?include=prices

These inputs are shared across all docs pages, so an id entered here carries over.

response
200 24ms preloaded server-side with the default context
object · 6 keys
{
  "success": true,
  "data": [
    {
      "id": "svp_ja-104vrh",
      "name": "Basic Psychic Energy",
      "number": "104",
      "printed_number": "104",
      "images": [
        {
          "type": "front",
          "small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/svp_ja/104vrh.small.webp",
          "medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/svp_ja/104vrh.large.webp",
          "large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/svp_ja/104vrh.large.webp"
        }
      ],
      "expansion": {
        "id": "svp_ja",
        "name": "Scarlet & Violet Promos",
        "total": 303,
        "language": "Japanese",
        "language_code": "ja",
        "series": "Scarlet & Violet",
        "code": "PROMO",
        "printed_total": 303,
        "release_date": "2022/11/01",
        "logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/svp_ja.logo.png",
        "symbol": "https://api.rip.fun/storage/v1/object/public/tcg/sets/svp_ja.symbol.png",
        "translation": {
          "en": {
            "name": "Scarlet & Violet Promos"
          }
        }
      },
      "language": "Japanese",
      "language_code": "ja",
      "tcgplayer_id": null,
      "variants": [
        {
          "name": "reverseHolofoil",
          "images": [
            {
              "type": "front",
              "small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/svp_ja/104vrh.small.webp",
              "medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/svp_ja/104vrh.large.webp",
              "large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/svp_ja/104vrh.large.webp"
            }
          ]
        }
      ],
      "supertype": "Energy",
      "rarity": "Promo",
      "pricing": {
        "currency": "USD",
        "market": 3.82,
        "is_stale": false,
        "conditions": [
          {
            "condition": "NM",
            "price": 3.82
          }
        ],
        "graded": [],
        "market_updated_at": "2026-09-21T02:56:34.515Z",
        "trend_7d": {
          "direction": "down",
          "percent": -16.23
        }
      }
    },
    {
      "id": "swshp_ja-104vh",
      "name": "Charizard VMAX",
      "number": "104",
      "printed_number": "104",
      "images": [
        {
          "type": "front",
          "small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/swshp_ja/104vh.small.webp",
          "medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/swshp_ja/104vh.large.webp",
          "large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/swshp_ja/104vh.large.webp"
        }
      ],
      "expansion": {
        "id": "swshp_ja",
        "name": "Sword & Shield Promos",
        "total": 340,
        "language": "Japanese",
        "language_code": "ja",
        "series": "Sword & Shield",
        "code": "PROMO",
        "printed_total": 340,
        "release_date": "2019/11/01",
        "logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/swshp_ja.logo.png",
        "symbol": "https://api.rip.fun/storage/v1/object/public/tcg/sets/swshp_ja.symbol.png",
        "translation": {
          "en": {
            "name": "Sword & Shield Promos"
          }
        }
      },
      "language": "Japanese",
      "language_code": "ja",
      "tcgplayer_id": null,
      "variants": [
        {
          "name": "holofoil",
          "images": [
            {
              "type": "front",
              "small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/swshp_ja/104vh.small.webp",
              "medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/swshp_ja/104vh.large.webp",
              "large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/swshp_ja/104vh.large.webp"
            }
          ]
        }
      ],
      "supertype": "Pokémon",
      "subtypes": [
        "VMAX"
      ],
      "types": [
        "Fire"
      ],
      "hp": "330",
      "attacks": [
        {
          "cost": [
            "Colorless",
            "Colorless",
            "Colorless"
          ],
          "converted_energy_cost": 3,
          "name": "Claw Slash",
          "damage": "100"
        },
        {
          "cost": [
            "Fire",
            "Fire",
            "Fire",
            "Colorless",
            "Colorless"
          ],
          "converted_energy_cost": 5,
          "name": "G-Max Wildfire",
          "text": "Discard 2 Energy from this Pokémon.",
          "damage": "300"
        }
      ],
      "weaknesses": [
        {
          "type": "Water",
          "value": "×2"
        }
      ],
      "rarity": "Promo",
      "artist": "aky CG Works",
      "pricing": {
        "currency": "USD",
        "market": 4586.4,
        "is_stale": false,
        "conditions": [
          {
            "condition": "NM",
            "price": 4586.4
          }
        ],
        "graded": [
          {
            "company": "BGS",
            "grade": "10",
            "value": 11100,
            "low": 11100,
            "high": 11100,
            "confidence": "med",
            "value_kind": "blended",
            "sold_count": 1
          },
          {
            "company": "BGS",
            "grade": "9",
            "value": 3120,
            "low": 2652,
            "high": 3588,
            "confidence": "low",
            "value_kind": "feed",
            "sold_count": 0
          },
          {
            "company": "PSA",
            "grade": "10",
            "value": 9900,
            "low": 7660,
            "high": 9940,
            "confidence": "med",
            "value_kind": "sold",
            "sold_count": 3
          }
        ],
        "market_updated_at": "2026-09-21T02:28:31.895Z",
        "trend_7d": {
          "direction": "down",
          "percent": -2
        }
      }
    }
  ],
  "page": 1,
  "page_size": 50,
  "total_count": 2,
  "language": "all"
}
tracks the inputs above
curl -X GET 'https://service.rip.fun/api/v1/pokemon/cards/swshp_ja-104vh/printings?include=prices' \
  -H 'X-API-Key: rip_…'

Request fields

FieldTypeRequiredDescription
languagestringNarrow to one or more languages. Unlike the search endpoints this does NOT default to English — a code spans languages by definition.
includestringSet to `prices` to embed the pricing object on every returned object. **No surcharge** — metering is a flat 1 credit per request whatever the response carries, so hydrating a page of 100 with prices costs the same as without, and strictly less than a second call per row.

Response fields (data)

FieldDescription
data[].idCard id (variant printings carry a suffix, e.g. `…vh` for holofoil, `…vrh` for reverse holofoil)
data[].name / supertype / subtypesCard identity + classification
data[].rarity / number / printed_number / artistPrint metadata
data[].images[]`{ type, small, medium, large }`, `type` always `front`. Use `small` for grids and `large` for detail views. Two caveats: `medium` is always an alias of `large` (only two sizes are stored), and on cards whose source supplied a single rendition `small` is an alias too — it points at the same file as `large`. Compare the two URLs before assuming `small` is cheap; where they differ it is roughly 6× smaller.
data[].language / language_codeCard language: `English`/`en`, `Japanese`/`ja`, `Chinese`/`zh`. Chinese splits into Simplified (`zh-Hans`) and Traditional (`zh-Hant`). Each printing is its own object.
data[].tcgplayer_idTCGplayer product id for cross-referencing, or null when we don’t have one
data[].expansionNested expansion object (id, name, series, total, release_date, logo, symbol, …)
data[].variants[]`{ name, images[] }`, one self-describing element per card printing
data[].pricingPresent only with `include=prices` — and then always present, even where we hold nothing: `market` comes back `null` and the two arrays empty rather than the key being dropped. `{ currency, market, market_updated_at, is_stale, trend_7d, conditions[], graded[] }`, with every amount a **number** rather than a decimal string. `trend_7d` is `{ direction, percent }`, and it is the only trend window there is. See the Pricing data guide.
data[].pricing.conditions[]`{ condition, price }` raw ladder (NM/LP/MP/HP/DMG) for the card’s variant — those two fields only
data[].pricing.graded[]Reconciled graded value per company+grade: `{ company, grade, value, low, high, confidence, value_kind, sold_count, trend? }`

Errors

StatusCodeWhen
404not_foundno such object for this game (a Pokémon id on `/onepiece` is "not found")

See Errors for the response envelope and the full code list.