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, andvariants is the list of them. Two fields
on a variant look similar and are not:
string
The printing:
normal, holo, reverse. What was done to the card at the press.string | null
The physical size:
standard, jumbo. How big the piece of cardboard is.variants as the set of
printings you can price.
Prices
Every variant carries one price block:array
USD, one entry per grade tier, each with
grade, price and observed_on. On a card this is the
ungraded tier alone: the price of a raw copy. There is no condition axis. An ungraded
price folds every condition into one figure, so pricing a card takes no question about the state
it is in.integer | null
How many copies of this printing sold in the trailing year. Depth of the market, not money: never
render it as a currency.
null means nothing is matched to this printing, which is a different
fact from 0, meaning nobody bought one.observed_on, the day that price was seen. A printing nothing has
priced comes back with an empty prices array, never a null.
For every grade tier rather than ungraded alone, and for the full daily history rather than the
latest figure, see Get card prices.
Change
array
Present only with
?include=change, and only when this card has a computed price movement. Absent
otherwise, never [].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, which is why card_variant_id rather than printing
is what identifies the entry. That is a different selection from the leaderboard’s:
List biggest gainers and losers 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 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
?include=change and still carries no change key, which is the documented
behaviour rather than an omission: the key is absent both without the parameter and when the card
has no computed movement. Price movement is measured from observed history, and the history
behind it starts on 21.08.2026: the 7d window this card would be ranked in is not computable
until a week of it exists.