> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cromos.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# The card object

> One printing of one card, and every way it was printed.

A card is one entry in one expansion. Charizard from Base Set is `base1-4`. Its id is the
expansion id and the collector number joined by a hyphen, and it is stable, so it is the id to
store against your own rows.

## Printings

A card exists in more than one physical printing, and `variants` is the list of them. Two fields
on a variant look similar and are not:

<ResponseField name="type" type="string">
  The **printing**: `normal`, `holo`, `reverse`. What was done to the card at the press.
</ResponseField>

<ResponseField name="size" type="string | null">
  The **physical size**: `standard`, `jumbo`. How big the piece of cardboard is.
</ResponseField>

They are different axes. A jumbo card and a holo card are not two options from one list, and
rendering them side by side reads as though they were.

Prices hang off the variant rather than off the card, because they differ per printing. A holo
Charizard and a normal Charizard are not the same object to a buyer.

For some cards this list differs from what other catalogs show. Treat `variants` as the set of
printings you can price.

## Prices

Every variant carries one price block:

<ResponseField name="tcgplayer" type="array">
  USD, one entry per condition, each with `market`, `low`, `high` and `listing_count`. The last of
  those is how many active listings the three figures are computed from. A `listing_count` of 1
  means `market` is a single seller's asking price rather than a market consensus. It caps at 25, so
  25 means 25 or more.
</ResponseField>

Each entry carries its own `observed_on`, the last day that price was seen. A printing nothing has
priced comes back with an empty `tcgplayer` array, never a null.

For the full daily history rather than the latest figure, see
[Get card prices](/cards/prices).

## Change

<ResponseField name="change" type="array">
  Present only with `?include=change`, and only when this card has a computed price movement. Absent
  otherwise, never `[]`.
</ResponseField>

Every entry is for the same printing: this card's headline printing, the one the prices above are
read from. `card_variant_id` says which, and it is the field to match against `variants` above.
`printing` is the `type` axis on its own, and several printings of one card can share it, as the
four `holo` entries in the payload below do. That is a different selection from the leaderboard's:
[List biggest gainers and losers](/cards/movers) can name a different printing for the same card,
because it picks whichever printing moved most in a direction rather than the one this card
displays.

One entry per computed window (`1d`, `7d`, `30d` today), each carrying `card_variant_id`,
`start_cents`, `end_cents`, `change_cents`, `change_bp` (basis points, so +34.20% is `3420`) and
`start_as_of`, the day `start_cents` was actually observed. A window whose start price the
headline printing has no reading for is left out of the array rather than filled from another
printing, so read `window` off each entry instead of assuming all three are there. See
[Telling a held price from a stale one](/cards/movers#telling-a-held-price-from-a-stale-one) for
what a `start_as_of` well before the window's start means.

## Images

`image` is `{ low, high }`, or `null` where no art is available. Both rungs are always complete
and ready to use, and the two may be the same URL where only one rendition exists, so you never
have to branch on it.

`palette` is up to four colours from the card art, most prominent first, as `#rrggbb`, for
tinting a screen the card is on. Colours that appear only around the edge of the card, such as
the printed border, are left out.

Where the art carries a strong colour, `palette[0]` is that colour rather than a grey or a white
the card has more of. A card whose art has no strong colour leads with its most prominent
neutral instead, so check the value rather than assume a hue. It is `null` for a card with no
image, and carries fewer than four entries where the art has fewer.

## Example

```json theme={null}
{
  "data": {
    "id": "base1-4",
    "expansion_id": "base1",
    "number": "4",
    "name": "Charizard",
    "rarity": "Rare",
    "illustrator": "Mitsuhiro Arita",
    "image": {
      "low": "https://assets.cromos.so/cards/base1-4/low.webp",
      "high": "https://assets.cromos.so/cards/base1-4/high.webp"
    },
    "palette": ["#eeca41", "#e4ada3", "#5c1315", "#b47a73"],
    "category": "Pokemon",
    "metadata": {
      "hp": 120,
      "types": ["Fire"],
      "pokedex_numbers": [6],
      "stage": "Stage2",
      "evolve_from": "Charmeleon",
      "description": "Spits fire that is hot enough to melt boulders. Known to unintentionally cause forest fires.",
      "effect": null,
      "trainer_type": null,
      "energy_type": null,
      "retreat": 3,
      "abilities": [
        {
          "kind": "pokemon-power",
          "name": "Energy Burn",
          "text": "As often as you like during your turn (before your attack), you may turn all Energy attached to Charizard into Fire Energy for the rest of the turn. This power can't be used if Charizard is Asleep, Confused, or Paralyzed."
        }
      ],
      "attacks": [
        {
          "cost": ["Fire", "Fire", "Fire", "Fire"],
          "name": "Fire Spin",
          "text": "Discard 2 Energy cards attached to Charizard in order to use this attack.",
          "damage": "100"
        }
      ],
      "weaknesses": [
        {
          "type": "Water",
          "modifier": "x2"
        }
      ],
      "resistances": [
        {
          "type": "Fighting",
          "modifier": "-30"
        }
      ],
      "legality": {
        "expanded": false,
        "standard": false
      }
    },
    "variants": [
      {
        "id": 14,
        "type": "holo",
        "subtype": "unlimited",
        "size": "standard",
        "stamps": [],
        "foil": null,
        "tcgplayer": [
          {
            "condition": "NM",
            "currency": "USD",
            "market": 85242,
            "low": 42650,
            "high": 149965,
            "listing_count": 12,
            "observed_on": "2026-08-17"
          },
          {
            "condition": "LP",
            "currency": "USD",
            "market": 50972,
            "low": 35593,
            "high": 67838,
            "listing_count": 25,
            "observed_on": "2026-08-17"
          },
          {
            "condition": "MP",
            "currency": "USD",
            "market": 38656,
            "low": 34500,
            "high": 46472,
            "listing_count": 25,
            "observed_on": "2026-08-17"
          },
          {
            "condition": "HP",
            "currency": "USD",
            "market": 28147,
            "low": 26900,
            "high": 30000,
            "listing_count": 25,
            "observed_on": "2026-08-17"
          },
          {
            "condition": "DMG",
            "currency": "USD",
            "market": 19690,
            "low": 11877,
            "high": 24800,
            "listing_count": 25,
            "observed_on": "2026-08-17"
          }
        ]
      },
      {
        "id": 15,
        "type": "holo",
        "subtype": "shadowless",
        "size": "standard",
        "stamps": ["1st-edition"],
        "foil": null,
        "tcgplayer": []
      },
      {
        "id": 16,
        "type": "holo",
        "subtype": "shadowless",
        "size": "standard",
        "stamps": [],
        "foil": null,
        "tcgplayer": []
      },
      {
        "id": 17,
        "type": "holo",
        "subtype": "1999-2000-copyright",
        "size": "standard",
        "stamps": [],
        "foil": null,
        "tcgplayer": []
      }
    ],
    "change": [
      {
        "window": "1d",
        "card_variant_id": 14,
        "printing": "holo",
        "start_cents": 82538,
        "end_cents": 85242,
        "change_cents": 2704,
        "change_bp": 328,
        "start_as_of": "2026-08-10",
        "observed_on": "2026-08-17"
      },
      {
        "window": "7d",
        "card_variant_id": 14,
        "printing": "holo",
        "start_cents": 82538,
        "end_cents": 85242,
        "change_cents": 2704,
        "change_bp": 328,
        "start_as_of": "2026-08-10",
        "observed_on": "2026-08-17"
      }
    ]
  },
  "error": null
}
```

This capture used `?include=change`. Without it, the `change` key is absent.
