Skip to main content
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:
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.
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:
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.
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.

Change

array
Present only with ?include=change, and only when this card has a computed price movement. Absent otherwise, never [].
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 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

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