The Card object
One printing of one card in one language. Every game returns the same fields; what is particular to a game is under gameData.
Returned by GET /v1/sets/{code}, GET /v1/cards and GET /v1/cards/{id}.
Fields
Every field is always present. A field is null only where its type says | null, and a list with nothing in it is [], never null.
| Field | Type | Description |
|---|---|---|
| id | string | Stable identifier, unique across every game. If a set is re-keyed the old id keeps resolving on every by-id endpoint, and the response carries meta.movedFrom. |
| game | string | The game's slug. One of: |
| name | string | The English name, on every language's printing. ?name= searches this. |
| language | string | The language this printing is in, as a code: en, ja, de, zhs and so on. The list endpoints return en unless ?language= asks otherwise. |
| printedName | string | null | The name as printed, in the card's language (Glurak-ex). Null on English printings and where the source list carries no name. |
| englishId | string | null | The English printing this one corresponds to: the same set and number for a translated printing, the same illustration for a card in a set of its own (Japanese Pokémon). Null on English printings and where none has been found. |
| pricesFrom | string | own when prices, gradedPrices and priceStatus are this printing's. englishTwin when they are the English printing's, because the marketplace sells one product across languages.One of: |
| set | CardSet | The set the card was printed in. |
| set.code | string | The set code. Unique within a game and language, not across them. |
| set.name | string | The set name. |
| set.language | string | The set's own language: en for an English set whatever language the printing is in, ja for a set printed only in Japan. |
| set.releasedAt | string | null | Release date, YYYY-MM-DD. |
| collectorNumber | string | The number printed on the card, as printed (6, TG12, OP16-077), without the /total. Where several printings share one printed number (One Piece and Dragon Ball Super parallels and reprints) each carries a suffix after _ that tells them apart: OP05-119_p2, BT15-033_SPR. |
| rarity | string | The publisher's rarity, as each game spells it (Double Rare, uncommon, SR). |
| artist | string | null | The illustrator credit. |
| text | string | null | Rules text. Null on a card with none, and on a Pokémon whose attacks and abilities are structured under gameData instead. |
| images | Images | The card's picture in three widths. On our CDN (cards.tcggraph.io) the URLs end in .webp; the same path ending in .avif serves AVIF. Before a card is mirrored all three are the source's original URL. Image requests cost no credits. |
| images.small | string | null | 244 px wide. |
| images.normal | string | null | 488 px wide. |
| images.large | string | null | 745 px wide. |
| hashes | object | null | Perceptual hashes of the artwork, for matching a photo to a printing yourself. Null until the image has been processed. |
| hashes.phash | string | 64-bit luminance pHash, 16 hex characters. |
| hashes.phashColor | string | null | 192-bit colour pHash, 48 hex characters. |
| prices | Price[] (Price reference) | Every current quote, one per source, list type and finish. Every quote is always returned; ?source= changes which one filters and sorts read, not what comes back. |
| gradedPrices | GradedPrice[] (GradedPrice reference) | What graded copies sell for, one entry per grader and grade the index quotes. Empty when there are none; priceStatus.graded says why. |
| languagePrices | LanguagePrice[] (LanguagePrice reference) | Cardmarket's live listings split by language and finish, with the cheapest copy per condition. Empty until we have read the card's product page, which is not the same as nothing for sale. |
| printings | Printing[] (Printing reference) | prices regrouped by finish: one entry per physical printing, the plain card first, each with its own picture where a marketplace shows one. |
| priceStatus | PriceStatus | Why each source does or does not quote this card. |
| priceStatus.cardmarket | string | null | priced, or the reason Cardmarket has no quote. Null when the card has not been matched yet.One of: |
| priceStatus.tcgplayer | string | null | priced, or the reason TCGplayer has no quote. Always null on Magic, which is priced through MTGJSON.One of: |
| priceStatus.graded | string | null | priced, or the reason the graded index has no quote. Null when the card has not been considered yet.One of: |
| legalities | map<string, string> | Format to status. Formats are each game's own (standard, commander, tcg, core). Statuses are legal, not_legal, banned and restricted, except on Yu-Gi-Oh!, which uses its Forbidden & Limited list: unlimited, semi_limited, limited, forbidden. A format the card has never been legal in may be absent rather than not_legal. Empty on One Piece, Star Wars: Unlimited, Digimon, Grand Archive and Dragon Ball Super, whose catalogue sources publish none. Read it, don't filter on it: /v1/cards has no legality filter, except Yu-Gi-Oh!'s banlist.tcg and banlist.ocg game fields. |
| gameData | object | The game-specific fields: HP and attacks on Pokémon, mana cost and colours on Magic, ATK and DEF on Yu-Gi-Oh!. Each game's fields are listed on its game page and returned by GET /v1/games/{slug} as schema, and each one is a filter on /v1/cards. |
| externalIds | ExternalIds | The marketplace products this printing is sold as, for joining to their data. |
| externalIds.cardmarketId | integer | null | Cardmarket's product id (idProduct). |
| externalIds.tcgplayerId | integer | null | TCGplayer's product id. |
Price
One marketplace quote.
| Field | Type | Description |
|---|---|---|
| source | string | The marketplace the quote was read from. One of: |
| region | string | EU for Cardmarket, NA for the three US sources.One of: |
| listType | string | retail is what a buyer pays. buylist is what a dealer pays you for a copy; only Card Kingdom publishes one, on Magic.One of: |
| finish | string | Which printing of the card the quote is for. A closed list, the same word on every source. One of: |
| currency | string | EUR on Cardmarket, USD everywhere else. Amounts are never converted.One of: |
| market | number | null | The headline price, in major units (8.44 is €8.44). Cardmarket's trend price (so equal to trend); TCGplayer's market price, null on a product with too few sales for one; the listed retail or buylist price on Card Kingdom and Mana Pool. This is the number minPrice, maxPrice and sort=price read. |
| low | number | null | The lowest listing price the source reports. On Cardmarket that spans every language; languagePrices has the cheapest copy per language. Card Kingdom and Mana Pool publish none, so it is null there. |
| trend | number | null | Cardmarket's trend price. Null on the other sources. |
| avg1 | number | null | Cardmarket's average sale price over 1 day. Null elsewhere. |
| avg7 | number | null | Cardmarket's average sale price over 7 days. Null elsewhere. |
| avg30 | number | null | Cardmarket's average sale price over 30 days. Null elsewhere. |
| updatedAt | string | When we last read this quote from the source. ISO 8601 timestamp, UTC. |
Graded price
One slot of the graded index.
| Field | Type | Description |
|---|---|---|
| grader | string | raw is an ungraded copy, any is any company at that grade, the rest are one grading company.One of: |
| grade | string | ungraded pairs with raw; 7 to 9.5 pair with any; 10 pairs with each company.One of: |
| currency | string | Always USD.One of: |
| price | number | What a copy in this slot sells for, in major units. |
| salesVolume | integer | null | Copies of this printing sold in the last year, all grades together, so the same figure repeats on every slot. |
| updatedAt | string | When the graded index was last read for this card. Refreshed daily. ISO 8601 timestamp, UTC. |
Language price
Cardmarket's live listings for one language and finish.
| Field | Type | Description |
|---|---|---|
| source | string | Always cardmarket: these are read from its product pages.One of: |
| language | string | The language of the copies counted: en, de, fr, es, it, ja, ko, pt, ru, zhs or zht. |
| finish | string | The same closed list as prices[].finish.One of: |
| currency | string | Always EUR.One of: |
| low | number | null | Cheapest live copy in this language, any condition. Null when none is for sale. |
| lowNm | number | null | Cheapest Near Mint or Mint copy in this language. Null when none is for sale. |
| market | number | null | Median asking price of the cheapest copies in this language. |
| offers | integer | Live listings counted in this language. 0 is a real answer: none for sale. |
| truncated | boolean | True when the product page showed only its 50 cheapest listings, so dearer copies in this language may exist unseen. |
| truncatedAbove | number | null | On a truncated row, the dearest price the page showed. Null when the read was complete. |
| conditions | object[] | Cheapest copy per condition, best condition first. Only conditions with at least one listing appear. |
| conditions[].condition | string | Mint, Near Mint, Excellent, Good, Light Played, Played, Poor. One of: |
| conditions[].low | number | Cheapest copy in this condition, in EUR. |
| conditions[].offers | integer | Listings in this condition. |
| updatedAt | string | When the product page was read. ISO 8601 timestamp, UTC. |
Printing
One physical printing of a card and its quotes.
| Field | Type | Description |
|---|---|---|
| key | string | The finish value its quotes carry. Stable: key user selections on this.One of: |
| label | string | The finish in words (Reverse holo, Poké Ball pattern). |
| kind | string | What distinguishes the printing: its foil treatment, a pattern, a stamp or an edition marking. One of: |
| images | Images | The printing's own picture where a marketplace shows one, otherwise the card's. |
| images.small | string | null | 244 px wide. |
| images.normal | string | null | 488 px wide. |
| images.large | string | null | 745 px wide. |
| imageFrom | string | Which of the two images is.One of: |
| externalIds | ExternalIds | The product this printing is read from. |
| externalIds.cardmarketId | integer | null | Cardmarket's product id (idProduct). |
| externalIds.tcgplayerId | integer | null | TCGplayer's product id. |
| prices | Price[] (Price reference) | This printing's quotes. |
A real one
From the production API, unedited.
{
"id": "pkm_sv3pt5_6",
"game": "pokemon",
"name": "Charizard ex",
"language": "en",
"printedName": null,
"englishId": null,
"pricesFrom": "own",
"set": {
"code": "sv3pt5",
"name": "151",
"language": "en",
"releasedAt": "2023-09-22"
},
"collectorNumber": "6",
"rarity": "Double Rare",
"artist": "PLANETA Mochizuki",
"text": null,
"images": {
"small": "https://cards.tcggraph.io/sv/pkm_sv3pt5_6/small.webp",
"normal": "https://cards.tcggraph.io/sv/pkm_sv3pt5_6/normal.webp",
"large": "https://cards.tcggraph.io/sv/pkm_sv3pt5_6/large.webp"
},
"hashes": {
"phash": "c35f14b4727b1a8c",
"phashColor": "c35916b46aebb984c35f04a6737b1c8cfb6f84e4d05a1a0b"
},
"prices": [
{
"source": "cardmarket",
"region": "EU",
"listType": "retail",
"finish": "foil",
"currency": "EUR",
"market": 8.62,
"low": 4,
"trend": 8.62,
"avg1": 7.03,
"avg7": 8.8,
"avg30": 8.47,
"updatedAt": "2026-09-24T07:34:30.239Z"
},
{
"source": "tcgplayer",
"region": "NA",
"listType": "retail",
"finish": "foil",
"currency": "USD",
"market": 8.79,
"low": 6,
"trend": null,
"avg1": null,
"avg7": null,
"avg30": null,
"updatedAt": "2026-09-24T07:19:35.232Z"
}
],
"gradedPrices": [
{
"grader": "raw",
"grade": "ungraded",
"currency": "USD",
"price": 8.12,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "7",
"currency": "USD",
"price": 16.76,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "8",
"currency": "USD",
"price": 17.75,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "9",
"currency": "USD",
"price": 25,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "9.5",
"currency": "USD",
"price": 25,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "psa",
"grade": "10",
"currency": "USD",
"price": 125.65,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "bgs",
"grade": "10",
"currency": "USD",
"price": 163,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "cgc",
"grade": "10",
"currency": "USD",
"price": 34.46,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "sgc",
"grade": "10",
"currency": "USD",
"price": 39,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
}
],
"languagePrices": [
{
"source": "cardmarket",
"language": "en",
"finish": "foil",
"currency": "EUR",
"low": 5,
"lowNm": 5,
"market": 5.5,
"offers": 2,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 5,
"offers": 2
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
},
{
"source": "cardmarket",
"language": "it",
"finish": "foil",
"currency": "EUR",
"low": 4,
"lowNm": 4,
"market": 5.49,
"offers": 47,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 4,
"offers": 41
},
{
"condition": "ex",
"low": 4.5,
"offers": 6
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
},
{
"source": "cardmarket",
"language": "de",
"finish": "foil",
"currency": "EUR",
"low": 7.5,
"lowNm": 7.5,
"market": 7.5,
"offers": 1,
"truncated": true,
"truncatedAbove": 7.5,
"conditions": [
{
"condition": "nm",
"low": 7.5,
"offers": 1
}
],
"updatedAt": "2026-09-13T03:15:59.919Z"
},
{
"source": "cardmarket",
"language": "fr",
"finish": "foil",
"currency": "EUR",
"low": 6,
"lowNm": 6,
"market": 6,
"offers": 1,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 6,
"offers": 1
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
}
],
"printings": [
{
"key": "foil",
"label": "Holofoil",
"kind": "surface",
"images": {
"small": "https://cards.tcggraph.io/sv/pkm_sv3pt5_6/small.webp",
"normal": "https://cards.tcggraph.io/sv/pkm_sv3pt5_6/normal.webp",
"large": "https://cards.tcggraph.io/sv/pkm_sv3pt5_6/large.webp"
},
"imageFrom": "card",
"externalIds": {
"cardmarketId": 733601,
"tcgplayerId": 502558
},
"prices": [
{
"source": "cardmarket",
"region": "EU",
"listType": "retail",
"finish": "foil",
"currency": "EUR",
"market": 8.62,
"low": 4,
"trend": 8.62,
"avg1": 7.03,
"avg7": 8.8,
"avg30": 8.47,
"updatedAt": "2026-09-24T07:34:30.239Z"
},
{
"source": "tcgplayer",
"region": "NA",
"listType": "retail",
"finish": "foil",
"currency": "USD",
"market": 8.79,
"low": 6,
"trend": null,
"avg1": null,
"avg7": null,
"avg30": null,
"updatedAt": "2026-09-24T07:19:35.232Z"
}
]
}
],
"priceStatus": {
"cardmarket": "priced",
"tcgplayer": "priced",
"graded": "priced"
},
"legalities": {
"expanded": "legal",
"standard": "legal",
"unlimited": "legal"
},
"gameData": {
"hp": 330,
"types": [
"Fire"
],
"attacks": [
{
"cost": [
"Fire"
],
"name": "Brave Wing",
"text": "If this Pokémon has any damage counters on it, this attack does 100 more damage.",
"damage": "60+",
"convertedEnergyCost": 1
},
{
"cost": [
"Fire",
"Fire",
"Fire",
"Fire"
],
"name": "Explosive Vortex",
"text": "Discard 3 Energy from this Pokémon.",
"damage": "330",
"convertedEnergyCost": 4
}
],
"subtypes": [
"Stage 2",
"ex"
],
"abilities": [],
"supertype": "Pokémon",
"weaknesses": [
{
"type": "Water",
"value": "×2"
}
],
"evolvesFrom": "Charmeleon",
"resistances": [],
"retreatCost": [
"Colorless",
"Colorless"
],
"regulationMark": "G",
"convertedRetreatCost": 2,
"nationalPokedexNumbers": [
6
]
},
"externalIds": {
"cardmarketId": 733601,
"tcgplayerId": 502558
}
}