Get a card

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

Fetch a single Azuki TCG card by its id. This is the cheapest way to hydrate a card you already know. Add `include=prices` for the embedded pricing object. Ids are matched case-insensitively, so `OPPR-681242` finds the card stored as `oppr-681242`; the response always carries the stored spelling.

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

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

response
200 34ms preloaded server-side with the default context
object · 2 keys
{
  "success": true,
  "data": {
    "id": "AZK01-006",
    "name": "Gus",
    "number": "006",
    "printed_number": "006",
    "images": [
      {
        "type": "front",
        "small": "https://static-content.azuki.com/tcg/card_art/S1-AZK01-006_Gus_E_R_die.jpg",
        "medium": "https://static-content.azuki.com/tcg/card_art/S1-AZK01-006_Gus_E_R_die.jpg",
        "large": "https://static-content.azuki.com/tcg/card_art/S1-AZK01-006_Gus_E_R_die.jpg"
      }
    ],
    "expansion": {
      "id": "azk-01",
      "name": "Gates Awakened",
      "total": 154,
      "language": "English",
      "language_code": "en",
      "series": "Azuki TCG",
      "code": "AZK-01",
      "printed_total": 129,
      "release_date": "2026/06/29",
      "logo": "https://tcg.azuki.com/azuki_tcg_logo.svg",
      "symbol": "https://tcg.azuki.com/azuki_tcg_logo.svg"
    },
    "language": "English",
    "language_code": "en",
    "tcgplayer_id": null,
    "variants": [
      {
        "name": "normal",
        "images": [
          {
            "type": "front",
            "small": "https://static-content.azuki.com/tcg/card_art/S1-AZK01-006_Gus_E_R_die.jpg",
            "medium": "https://static-content.azuki.com/tcg/card_art/S1-AZK01-006_Gus_E_R_die.jpg",
            "large": "https://static-content.azuki.com/tcg/card_art/S1-AZK01-006_Gus_E_R_die.jpg"
          }
        ]
      }
    ],
    "supertype": "Entity",
    "subtypes": [
      "Beanz",
      "Trickster"
    ],
    "types": [
      "Neutral"
    ],
    "hp": "1",
    "rarity": "Rare",
    "pricing": {
      "currency": "USD",
      "market": null,
      "is_stale": false,
      "conditions": [],
      "graded": []
    }
  }
}
tracks the inputs above
curl -X GET 'https://service.rip.fun/api/v1/azuki/cards/swshp_ja-104vh?include=prices' \
  -H 'X-API-Key: rip_…'

Request fields

FieldTypeRequiredDescription
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`. 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? }`

Azuki card fields

Game fields on the Card object, on top of the shared ones above. All are optional and are omitted when we have no value, so a missing key means unknown.

FieldWhat it holds
supertypeThe card’s category — what the game calls its Card Type: Entity, Leader, Gate, IKZ, Spell or Weapon. Ingested into the shared `supertype` column, so it arrives under that name rather than a `category` of its own.
typesA one-element array holding the card’s Element: Fire, Water, Earth, Lightning or Neutral. Same overloading — one Azuki concept riding a Pokémon-shaped column.
subtypesPrinted traits, verbatim from the official gallery.
hpHealth, as a string, and emitted only when greater than zero — the 72 cards that print no Health at all (Gates, IKZ, Spells) carry no key rather than a `"0"`. Health is the only one of the four printed numbers you get: Attack, IKZ cost and Gate power have no column to ride and are not returned.
abilities`{ type, name, text }` per printed ability, but only `name` carries information: the gallery publishes ability names without their rules text, so `text` is always the empty string and `type` is always `"ability"`. Do not render the empty text as "no effect".
rarityThe expanded label rather than the printed code: Common, Uncommon, Rare, Super Rare, Leader, Gate, IKZ, each optionally starred — `Super Rare ★` is an alt art and `★★` a portrait rare. The short code (`SR ★`) is stored but not returned.
numberThe number after the group prefix, and the printing letter is part of it: `AZK01-106A` numbers `106A`, where Pokémon and One Piece put the printing in the id suffix and leave the number alone. Range queries (`number:[1 TO 50]`) compare the leading digits.

Printed on the card, not in the API

These values are printed on the physical card but no endpoint returns them today, and nothing in the response lets you derive them. Don't infer them — see the notes below.

FieldWhy it's missing
ikz_cost / attack / gate_powerThree of the four numbers printed on the card (Health is the fourth, and is returned as `hp`). All three are ingested and sit on the row, but no field registry exposes them, so no endpoint emits them and no `q` key filters on them.
card_textThe printed rules paragraph. Ingested, not serialized. `abilities[].name` is the only rules-adjacent string you get, and it is a name, not an effect.
errata / errata_before / errata_afterThe published correction for a card, and its before/after text. Ingested, not serialized — so the API cannot tell you a card has been errata’d.
printed_inEvery set a printing appears in. A card can ship in the booster and a starter deck; the response carries only its home `expansion`, so a set’s cards endpoint under-reports shared printings.
rarity_codeThe gallery’s short code (`SR ★`). Only the expanded label is returned; map back yourself if you need the code.
artistAzuki publishes no illustrator credits, so the column is empty and the key is omitted — absent here means unpublished, not unknown to us.

Filtering on these fields

Each concept filters under the name it comes back as — that is the Query as column, and the one to write today. Also accepts is an older spelling from when q resolved only against physical columns; it still works, and a there just means the field never had one. A concept whose Query as is is not searchable at all; filter it client-side after fetching. Querying an unknown field returns 400 invalid_query with a suggested name rather than an empty result.

ConceptReturned asQuery asAlso accepts
Elementtypestypes:Fire
Card typesupertypesupertype:Gate
Traitsubtypessubtypes:Beanz
Healthhphp:[5 TO *]
Rarityrarityrarity:"Super Rare ★"
Ability nameabilities[].nameabilities.name:Charge
Ability text
IKZ cost
Attack
Gate power

Every game field is optional and is omitted rather than sent as null, so a missing key means unknown — not zero and not empty.

There are no Azuki prices, and there is no date by which there will be. No marketplace has a TCGplayer or Scrydex catalog for AZK-01 and no sold comps exist, so nothing feeds the pricing engine: every card stores a raw price of 0.00, which the API reports as `pricing.market: null` rather than a $0 card, and no card has a `trend_7d`. Do not build a price chart, a portfolio value or a "biggest movers" list on Azuki — it will be a chart of zeros, and it will not fill in on its own.

The six sealed products are the exception, and only just. Each carries the MSRP its distributor published, flagged `price_basis: "msrp"` on the row, and it reaches you as `msrp` — never as `pricing.market`, which stays `null`. That split is deliberate: a list price echoed back under a `market` key would chart as a flat line indistinguishable from a real one, so there is no market figure to plot, no `trend_7d`, and no meaningful "vs MSRP" premium. Show the MSRP as an MSRP, or not at all.

`images[].small` is the same URL as `large` on every Azuki card — the gallery publishes one rendition per card and we store it in both columns. Resize on your side rather than pulling a full-size file into a grid.

Four of the seven sets are starter decks, and their sealed products come back as `product_type: "other"` rather than a `starter_deck` value, which does not exist — the product enum has no member for it and One Piece’s 64 starter decks are filed the same way. Match on the product name if you need to separate them.

Alt arts do not stay in their base card’s set: a starter-deck leader’s alt art is a booster pull, and four `AZK01-*` alt arts exist only in the Alpha run. A variant hunt scoped to one expansion will miss most of them — search the game, not the set.

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.