Get card

GET /api/v1/cards/unique-id/:unique_id tenant key

Fetches a single card by unique_id with the card and set context attached — the same fields as a List cards row. Scoped to your account: a unique_id that exists but belongs to someone else is a 404, not a 403. Raw cards and graded slabs share one unique_id namespace and both resolve here — you know a card by its CARD-RIP… id and never have to know which kind it is before you ask.

Read sports.record_status before you trust a sports row: "provisional" means it was machine-extracted from the warehouse scan and never catalog-verified, so its player name, parallel and print run can change. See List cards for the full lifecycle.

Try it GET /api/v1/cards/unique-id/CARD-EXAMPLE-1

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

response

Not run yet. Press Run to make a live call against https://service.rip.fun (through this demo's server-side proxy; the API key never reaches the browser).

curl (tracks the inputs above)
curl -X GET 'https://service.rip.fun/api/v1/cards/unique-id/CARD-EXAMPLE-1' \
  -H 'X-API-Key: rip_…'

Response fields (data)

FieldDescription
unique_id / card_idIdentifiers. card_id is null on sports cards — they are not in the TCG catalog
type / gradedtype is "RAW" | "GRADED". graded carries company, grade, grade_numeric (tenths — 100 is a 10), cert_number, cert_url and verification_status, and is present only on a GRADED row — see List cards for the full shape. On a slab, scan_image_url is a photograph of the holder and declared_value, not insured_price, is the figure that reflects the grade
category / gameThe discriminator. category is "tcg" | "sports"; game is pokemon | onepiece | basketball | baseball | football | soccer | hockey | other. Both are null when the row resolves to neither catalog — treat that as unknown, not as TCG
sub_accountWhich of your sub-accounts the card is filed under: { slug, name }, or null when it is in your own inventory — see List cards. There is no ?sub_account= filter here: a single card is already scoped to you, and its label is on the row
name / card_number / set_nameCatalog identity, filled from whichever catalog owns the row. On a sports card, name is the player name and card_number / set_name come from the sports catalog row
release_date / yearSet release date (ISO 8601, always null for sports cards — a sports row carries a season, not a release date) + release year (sports cards use the season start year)
image_url / scan_image_urlCatalog image + your scanned image. image_url is null on sports cards: we hold no licensed product art for them, so scan_image_url is the only image you get
insured_priceCatalog market price (decimal string) — see List cards. Null when our catalog has no price for the card
declared_valueThe value this copy is carried and insured at — see List cards for the shape
sportsSports-catalog identity, present only when category is "sports" (the key is absent otherwise): id, sport, player_name, team, manufacturer, set_name, year, card_number, parallel_name, print_run, is_autograph, is_relic, is_rookie, record_status — see List cards
(not yet identified)A card we hold but have not finished identifying returns 404 here, the same as a card we do not hold, and is counted in pending_identity on List cards. It becomes readable once identified
(removed duplicate)A card we added by mistake and took back out (the same physical card scanned in twice) returns 404 here from then on. If you had fetched it, a card.removed event in GET /inventory/events tells you which unique_id to delete and which copy we kept
created_at / updated_atTimestamps

Errors

StatusCodeWhen
400unique_id requiredmissing unique_id
404not foundcard not part of your account, not yet identified, or removed as a duplicate

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