Skip to content
Prepaid, no subscription trap. Top up a balance and we draw the monthly fee from it.
tcggraph

Changelog

What shipped, and when

Everything here shipped into /v1 without breaking it: additive unless explicitly marked deprecated, and deprecations get at least six months. There is no version header to pin; a breaking change would be a new path.

  1. French One Piece, 4,121 more French Pokémon cards, and search by the name printed on the card

    French One Piece is in the catalogue: 3,313 printings, each linked to its English card. French Pokémon goes from 16,760 cards to 20,881, among them the Prize Pack and World Championship deck cards Cardmarket sells in French, and German, Spanish and Italian grow by 9,063 between them. ?name= now matches the name printed on the card as well as the English one, so language=fr&name=dracaufeu finds the French Charizards. A card with no scan of its own shows its English twin's picture and says so on a new imageFrom field.

    • addedFrench One Piece: 2,888 printings from Bandai's French card list, parallels included, each linked through englishId to the English printing with the same card number and served its Cardmarket product. 2,669 already carry a French row in languagePrices, the cheapest copies listed in French; ?language=fr lists them.
    • addedFrench, German, Spanish and Italian Pokémon cards with no scan of their own: 2,726 French, 5,390 German, 941 Spanish and 1,062 Italian, among them the Trainer Kits, the Diamond & Pearl sets, Call of Legends, Shining Legends, Dragon Majesty, Hidden Fates and its Shiny Vault, Shining Fates' Shiny Vault, Crown Zenith's Galarian Gallery and the Sun & Moon and Mega Evolution promos. They are bought and sold in their language like any other twin and carry its languagePrices row. The record shows the English twin's picture, says imageFrom: englishTwin, has no hashes, and is never a recognition answer. One is written only when TCGdex's English name for it is the twin's (allowing for LV.X, ☆ and bracketed names).
    • added1,473 French printings no card list carries that Cardmarket sells in French: 1,048 Pokémon (376 Prize Pack cards, 220 from the 2022 to 2024 World Championship decks, 75 McDonald's, 48 Battle Academy, 45 Jumbo, the Celebrations Classic Collection and more) and 425 One Piece (the 120 gold DON!! cards of PRB-01 and PRB-02, parallels and promos). TCGdex has no French list of those product lines and Bandai's French list leaves the DON!! cards out, so a French record is written where Cardmarket lists copies in French on the English card's own product. It shows the English twin's picture with imageFrom: englishTwin and serves the French languagePrices row the English card already carried. Its printedName is that of the card it reprints (838 Pokémon), else the one most French printings of the English name carry, else null (10 Pokémon, 167 One Piece, mostly DON!! cards).
    • fixedA Trainer Kit numbers both decks' cards alike, and a localized printing was matched on set and number alone, so it could sit under the other deck's card: an Italian Glameow under Water Energy, an Italian Bunnelby under Switch. A TCGdex printing is now checked against the English name TCGdex gives it, with a scan or without, and a number two English cards share is settled by that name. The Spanish and Italian kits are relinked to the right cards, 3 rows each with no right card were removed, and 206 French, 165 Spanish and 135 Italian printings the old matching could not place were added: French has 418 Trainer Kit printings, Spanish 335 and Italian 275.
    • fixed86 French, German, Spanish and Italian Pokémon cards linked a TCGdex scan that TCGdex lists but answers 404 for, and the API handed that dead link out as their images. They now show the English twin's picture with imageFrom: englishTwin, and the image mirror clears such a link whenever TCGdex answers 404.
    • fixed111 English Pokémon sets had no French cards, and German, Spanish and Italian were short of what TCGdex lists. TCGdex pads collector numbers (001) where the catalogue does not, and a card reprinted under its own number in a Prize Pack, World Championship deck or Jumbo voted for those sets too, so the expansion it came from fell below the agreement needed to align. Numbers are compared without leading zeros, and agreement is now measured against the cards matched rather than the votes cast. 50 of the 111 have their French printings now, 30th Celebration, Shrouded Fable and Pokémon GO among them. The 61 left are sets TCGdex lists no French cards for: product lines such as Prize Packs, World Championship decks, Jumbo and Battle Academy, whose French copies on Cardmarket now have records of their own (above), and expansions such as Skyridge, Legendary Treasures and Base Set 2, of which Cardmarket lists no French copies. 15 rows per language that TCGdex no longer lists were removed: 14 Scarlet & Violet promos it has dropped from every non-English list, and a Black Bolt card that carried another card's scan.
    • improved?name= on /v1/cards, and name on the GraphQL filter, match the name as printed (printedName) as well as the English name: accents, case, full-width forms and punctuation are ignored, so language=fr&name=dracaufeu finds Dracaufeu-ex and language=ja&name=ルフィ the Japanese One Piece Luffys. A name in Japanese or Korean script had folded to nothing and matched every card; it now matches printed names only. Japanese Pokémon cards carry no printed name and are still found by their English one.
    • addedimageFrom on every card: own for the printing's scan, englishTwin where the picture is its English twin's. On GraphQL, imageFrom: CardImageFrom (OWN, ENGLISH_TWIN). 82,738 Magic printings in other languages that Scryfall shows only in English, whose images were null, now carry the English printing's picture with imageFrom: englishTwin. A card in an own-language set with no scan (1,036 Japanese Pokémon) keeps null images: its englishId is a different card with the same illustration, not a twin.
    • fixedThe metal Mew ex 205/165 from the 151 Ultra-Premium Collection had no record: TCGplayer files it under Scarlet & Violet 151 rather than Miscellaneous Cards & Products, where the other metal cards are. It is now pkm_mcap_205_165, variant "151 Metal Card", with baseCardId pkm_sv3pt5_205, its TCGplayer price and Cardmarket's Mew ex (V4). Cardmarket captions its metal cards "Not Tournament Legal", which kept the metal Arceus V and GameStop Greninja ex off their Cardmarket products; both now carry Cardmarket prices too.
    • fixedAttack costs and abilities on the 5,832 English Pokémon cards built from TCGplayer's list (Prize Packs, World Championship decks, Trainer Kits, Jumbo cards, store exclusives and the other product lines). TCGplayer counts the Colorless in a cost ("[1LL]", "[3]", "[0]" for a free attack), which was read as no cost and left on the attack's name: 2,505 cards had attacks such as "1LL] Electrobullet" with cost []. Abilities written "Ability — Damp" rather than "Ability: Damp", and Pokémon Powers, Poké-Powers and Poké-Bodies in TCGplayer's other spellings, were dropped: those cards carry 1,177 abilities now, up from 192. Their 1,017 French, German, Spanish and Italian printings and 14 Japanese cards are corrected too.
    • fixedA languagePrices row could say offers: 0 and still list conditions: when a read found no copy left in a language, that language's per-condition lows from an earlier read stayed behind. 2,659 rows did, 1,928 of them on One Piece, mostly English and French rows on Japanese cards. The leftover conditions are removed, and a language read as sold out now clears its own.
  2. New plan prices, with every feature still on every plan; current subscribers keep theirs

    Starter is now $29 a month for 10,000 credits, Growth $99 for 100,000 and Scale $299 for 500,000. Every plan keeps every price feed, graded and condition prices, full history, all nine games, both APIs, the image CDN, webhooks and the commercial licence. Accounts subscribed before the change keep the price, credits, rate limit and overage rate they signed up for, for as long as the plan renews.

    • improvedStarter: $29 a month or $290 a year, 10,000 credits (about 5,000 searches), 60 requests a minute, 500 price watches, overage $5 per 1,000 credits.
    • improvedGrowth: $99 a month or $990 a year, 100,000 credits (about 50,000 searches), 300 requests a minute, 25,000 price watches, overage $1.50 per 1,000 credits.
    • improvedScale: $299 a month or $2,990 a year, 500,000 credits (about 250,000 searches), 1,000 requests a minute, 100,000 price watches, overage $0.80 per 1,000 credits. Enterprise starts above 500,000 credits a month.
    • improvedExisting Starter and Growth subscriptions are unchanged: $19 for 25,000 credits and $59 for 150,000, with their overage rates, renewing as before. Dashboard → Billing marks the plan as a kept price. Choosing a different plan moves the account to the current prices, and a plan that lapses comes back at them.
  3. Japanese Pokémon cards priced from Cardmarket's Japanese products, and English subsets taken off them

    Cardmarket sells Japanese Pokémon as products of their own, but tags few of its Japanese expansions as such, so only a handful of Japanese sets were bound to them. 18,748 Japanese cards in 396 of the 453 Japanese sets now carry Cardmarket's EUR quote for their own Japanese product, up from under 800. The same untagged expansions had drawn 93 English cards, Hidden Fates' and Shining Fates' Shiny Vaults and Crown Zenith's Galarian Gallery among them, onto Japanese products; 90 are now on their English product and 3 say ambiguous. Star Wars: Unlimited joins the page crawl for good.

    • fixedEnglish Pokémon cards bound to Japanese or Chinese Cardmarket products. Cardmarket tags a few Japanese expansions ("Forbidden Light JP") but names most of them like any other, as "VSTAR Universe", "Shiny Star V" or "GX Ultra Shiny", and the set matcher, falling back on card overlap, bound English subsets to them: Hidden Fates' Shiny Vault (sma) to GX Ultra Shiny, Shining Fates' (swsh45sv) to Shiny Star V, Crown Zenith's Galarian Gallery (swsh12pt5gg) to VSTAR Universe, Brilliant Stars' Trainer Gallery (swsh9tg) to VMAX Climax, Celebrations' Classic Collection (cel25c) to 25th Anniversary Edition and the EX Trainer Kit (tk1b) to MEGA Start Deck 100 Battle Collection. Hidden Fates Charizard-GX SV49 was served a Japanese product's figure; it is now on its English product at EUR 663.74. Every Cardmarket Pokémon expansion's own code is now read off Cardmarket's expansion list (784 expansions: 240 English, 414 Japanese, 98 Chinese, 24 Indonesian and Thai, 2 French), and an English card is bound only to an English expansion: 90 of the 93 moved to their English product and 252 more English cards in those subsets are bound for the first time. The other 3, two EX Trainer Kit cards Cardmarket lists under one name for both halves and Celebrations' Classic Collection Charizard, say ambiguous rather than carry a guess. Of the 22,950 English Pokémon cards with a Cardmarket product, every one is now on an English product.
    • improvedCardmarket prices on Japanese Pokémon cards. A Japanese set is matched to the Cardmarket expansion carrying its own Japanese code (s4a, sm8b, sv2a) whether or not Cardmarket's name says Japanese, and its cards to the products by name, attacks and page number: 19,691 of the 30,332 Japanese cards are bound to a Japanese product, 18,748 of them quoted, in 396 of the 453 sets. 40 picked at random were checked against the product names by hand and all matched, and no product carries two cards. The Japanese price is not the English one: over 17,094 cards with an English printing of the same illustration, the Japanese trend is a median 1.5 times the English, a tenth percentile 0.4 and a ninetieth 8.9, within 20% for one card in six. 5,319 more are ambiguous, printings Cardmarket names alike without a number, and their 5,662 product pages are queued, where the number each page states settles them; the rest are cards Cardmarket does not list or has no figure for, and say so on priceStatus.cardmarket. 45 cards of the 30th Celebration Premium Deck Set had been on its Simplified Chinese edition: 39 are on the Japanese one and 6 say ambiguous.
    • improvedThe page crawl reads the newly bound products: 19,231 Pokémon products newly bound to a card, the Japanese ones and the English subsets above, are queued at Pokémon's priority, spread over a day, as the World Championship deck cards' 1,687 were earlier the same day. Star Wars: Unlimited, seeded by hand before, is on the crawl's list of games, so its new products are queued every night like the others'.
    • fixedThe docs described the crawl lanes (every 6 hours, daily, every three days, weekly) as how often a card is read. They are what the crawl aims at: on 29 September the six-hour lane's median row was 7 hours old but its ninetieth percentile 66, and the three-day and weekly lanes' median rows 12 and 11 days, while the crawl caught up on the games and sets added this month. The docs and FAQ now say so, and point at updatedAt on every row, which is when it was actually read.
  4. Japan-only One Piece promos priced as the Japanese copy, and image URLs that never change picture

    69 English One Piece rows are promos and parallels sold only in Japan: neither marketplace lists them in English, so they had no price. They now carry the Japanese copy's Cardmarket quote, labelled as such. And a picture we replace now goes out under a new URL, so a cached image is never a stale one. Pokémon's World Championship deck cards gain Cardmarket prices: 1,159 of the 1,715. And a Cardmarket quote is now what the product's page says whenever our crawl has read it lately, not the daily price guide file, whose short averages can lag the page by days; basis says which. That holds for reverse holo and foil rows as well, and a version Cardmarket does not sell, like a normal copy of a Lorcana Enchanted, is no longer priced.

    • improvedCardmarket quotes follow the product page. Cardmarket's daily price guide file is rebuilt every day, but its 1- and 7-day averages often are not: of 3,995 Pokémon products that had sold since 18 September, 1,559 still carried their 18 September figure as the 1-day average on 29 September, and 523 the latest day's. Lugia (Unseen Forces 29, pkm_ex10_29) was served at a 7-day average of EUR 134.93 and a 1-day of EUR 2.17 from the file while its page said EUR 13.76 and EUR 23.33. The crawl now keeps each product page's summary (From, Price Trend, the 30-, 7- and 1-day averages), and a quote on the product's plain figures is rewritten from it the moment the page is read, through the same path as the daily refresh, so price history and watches move with it. The page stands for eight days, one more than the slowest crawl lane, then the file takes over again. In the last eight days the crawl read 23,156 of the 23,466 Pokémon products bound to a card, 8,483 of 9,004 One Piece, 7,376 of 7,396 Dragon Ball Super, all 3,171 Lorcana, 10,776 of 32,284 Yu-Gi-Oh! and 1,326 of 2,857 Star Wars: Unlimited.
    • improvedReverse holo and foil prices follow the product page too. A Cardmarket product sold in two versions has a switch on its page, Foil on Lorcana, Dragon Ball Super and Star Wars: Unlimited and Reverse Holo on Pokémon: the page as served shows the plain version, and switched on it shows the other, whose trend is the price guide file's to the cent (Rhyperior, Primal Clash 77: reverse holo EUR 14.96; Mushu, Stealthy Dragon: foil EUR 14.07). The crawl now reads the switched-on view of every product whose other version we quote, each time it reads the product, and the reverse-holo or foil row is rewritten from it the moment it is read, with basis product-page.
    • fixedNo Cardmarket price for a version Cardmarket does not sell. The price guide file carries plain and foil columns for every product, and on a product sold in one version the other columns are a flat copy or a few mislabelled listings: Freeze the Vine (Lorcana, lor_11_231), sold only as a foil at a trend of EUR 109.76, reads EUR 95.00 four times in its plain columns and was served a normal at EUR 95.00; Aurora, Dreaming Guardian (lor_1_213) a normal at EUR 195.35 beside its foil's EUR 120.18; Dark Magician Girl (ygo_mfc_000) a foil at EUR 161.41 though its page has no foil version. Which versions a product has is now read off its page: the switch where there is one, otherwise the listings, which are then all one version (all foil on a Lorcana Enchanted or a Star Wars: Unlimited foil variant, none on a Yu-Gi-Oh! card, all reverse holo on a Pokémon pattern). A quote on a version the page does not have is withdrawn when the page is read, and the daily refresh no longer writes one; its price history is kept.
    • addedfinish=foil and finish=reverse-holo on /v1/prices/{cardId}/sales (GraphQL Card.sales): the other version's realized sales, which Cardmarket charts only with the page's switch on, from our first read of that view. Without finish, a product sold in two versions has always been the plain version's chart; the docs said product-wide, and now say which. A page filtered to one language shows the same chart, so every language and condition together still holds.
    • addedbasis on every price row, in REST and GraphQL: product-page where the Cardmarket figures are the product page's as our crawl read it at updatedAt, price-guide where they are Cardmarket's daily file's, null on the other marketplaces.
    • improvedCardmarket prices on Pokémon's World Championship deck cards (wcd2004 to wcd2024): 1,159 of the 1,715 are priced in EUR. Cardmarket files each year as a "WCD <year>" expansion whose products name the card but not the deck (WCD 2004 holds three Copycats), and captions each picture with the player, as in "WCD2004ChrisFulop / NotTournamentLegal". A card is paired with the product of its name, and of its attacks where Cardmarket lists them, whose caption names its player and nothing else: 1,685 cards, each on a product of its own. 528 of those are unquoted, since Cardmarket reports only a lowest offer (444) or nothing (84), with no sale to trend from. The 62 cards bound before to listings Cardmarket still keeps inside the regular expansions, none of which had an offer, now stand on their WCD product, bar two whose WCD picture carries no caption and which keep their listing and its price. The other 28 say why on priceStatus.cardmarket: ambiguous where a deck holds a plain and a Gold Signature copy of one product, or the product's picture has no readable caption (15); unlisted where no product of the deck carries the card, as with Vance Kelley's 2023 deck, the LEGEND cards Cardmarket sells as two halves and the Professor's Research it names as another professor than our number (13).
    • addedpricesFrom: localizedTwin and pricesTwin { id, language } on cards, in REST and GraphQL (LOCALIZED_TWIN), and in meta on /v1/prices/{cardId}, its history and its sales. An English printing no marketplace sells in English, with exactly one other-language printing of the same set and number quoted in its own right, is served that printing's quotes, sales and history. All 69 are One Piece, all Japanese, EB01-006's fourth parallel Chopper (EUR 1.11) and EB02-017's 3rd Anniversary Guide Nami (EUR 43.13) among them. Its priceStatus takes the twin's only where the twin is priced: TCGplayer stays unlisted, the English card's own reason.
    • improvedA CDN image URL now names the picture it serves: a picture that is mirrored or replaced is published under a path of its own, and the card's images switch to it. The 1,088 pictures replaced on 2026-09-28 had been written over the old ones at the same URL, where a CDN edge or a client could go on serving the old picture for up to a year. They are now at paths of their own: the 1,087 Japanese cards given pokemon-card.com's picture and the SM Trainer Kit Pikachu.
    • fixedThree English Pokémon cards without a picture now have Cardmarket's photograph of the printing: HGSS18 Tropical Tidal Wave with its Worlds 10 stamp, the EB Games Koraidon and the Prize Pack Victini V. Each was checked by eye among the 26 unpictured cards bound to a pictured Cardmarket product. The other 23 (18 Cosmos Holo reprints, four Build & Battle non-holos, two Jumbos) Cardmarket pictures with the regular card and a caption naming the variant, which is not the printing, so they still have no picture.
    • fixed47 Japanese Pokémon cards no card list pictures now have Bulbapedia's scan of the printing: the 27 Gym Leader and Elite Four Technical Machines of Pokémon VS and Janine's Arbok, and 19 unnumbered promos, among them the Communication Evolution Alakazam, Gengar, Golem and Omastar, the Asobikata Diglett and Dugtrio, Pokémon Illustrator, Trade Please! and Champion's League 2005. Each was checked by eye, and taken only where Bulbapedia files the card as that printing. Most Japanese deck cards are filed as the English expansion's card, the Entry Pack as English Diamond & Pearl and the Quick Starter Gift Set as the Vending cards it reprints without their rarity symbol, so none of those borrows a picture.
    • fixedpriceStatus { tcgplayer } on GraphQL answered an internal error on every card that had a TCGplayer status, and null in data, because the value was not mapped to the TcgplayerStatus enum. It now returns PRICED, UNLISTED and the rest, as cardmarket and graded always did.
  5. Every English printing of a Japanese Pokémon card's artwork, and the unnumbered Japanese cards

    A Japanese Pokémon card named one English printing of its illustration, so a picture English printed again in a World Championship deck, a Prize Pack, a Trainer Kit or as a Jumbo reached only one of them. Cards now carry sameArtwork, every printing of the illustration in the other catalogue. 25,320 of the 26,466 English printings name a Japanese one (96%), up from 17,269, and 28,177 of the 30,332 Japanese cards an English one (93%, from 86%).

    • addedsameArtwork on every card, in REST and GraphQL. On a Japanese card, the English printings of its illustration, nearest first, so englishId is the first. On an English card, the Japanese printings of it. Empty where none has been found, and on games whose languages share set and number.
    • added2,459 Japanese cards that print no number: every card to 2001 (Expansion Pack, Jungle, Fossil, Rocket Gang, Gym, Neo), DP1 to DP5, and the vending machine and CoroCoro promos. Their id carries the name, as in pkm_ja_<set>_<name>. 1,898 of them have an English printing linked. The Japanese catalogue is now 453 sets, and 25,822 of its cards carry a TCGplayer quote.
    • improvedOlder frames and anniversary reprints, which the artwork hash reads apart, are compared by laying one card's art over the other: on the grey levels, and on the line work alone, which a foil or a scan's background does not move. 545 English printings are reached by this alone. Every pair was checked by eye: all scoring 0.80 or more, each from 0.70 to 0.80, where true and false pairs mix, the 489 the line work took, and the 70 just under it, of which 50 were one picture.
    • fixedA second English printing of a name within the artwork hash's reach was linked as the same illustration, though it is often another: the holo and non-holo pictures of an ex-era Pokémon, a full art beside the regular card. Past the nearest, a printing now needs a closer band distance, or a reprint link through its base card, or the pictures to agree.
    • fixedA Japanese card TCGplayer lists without a photo, or photographs as the card beside it, now has the official picture from pokemon-card.com: 1,087 cards. That includes reprints filed under another folder there, such as the Deck Build Box and Premium Trainer Box cards, and the Giratina vs Dialga Deck Kit's Super Scoop Up and Conductive Quarry, which showed the Giratina half's Energy Switch and Miasma Valley.
    • fixed170 English Trainer Kit cards had no picture, TCGplayer having photographed only a few of the XY and SM kits. Every Trainer Kit card from DP to SM now has Scrydex's scan, with TCGplayer's photo as the fallback, and most of them name the Japanese card of their illustration.
    • fixedFour English cards showed TCGplayer's "Image Coming Soon" card as their picture: SM Trainer Kit Pikachu, the State Championships Reverse Valley, the Best Buy Tinkaton and Prize Pack Victini V. The placeholder is now read as no picture. Pikachu has its scan; the other three have no picture until a real one is published.
  6. One Piece event and pack parallels priced from Cardmarket's promo expansions

    Cardmarket lists most One Piece event, tournament and pack parallels in its promo expansions, under the card's plain name and number, and we never looked there. 360 more printings now have a Cardmarket product of their own: 89 English and 271 Japanese. 13 more English and 97 more Japanese cards now have a price.

    • improvedA One Piece printing without a Cardmarket product is compared, by picture, with the products under its name and number in the promo expansions of its language: Unnumbered Promos, Special Tournament Promos, Store Tournament Promos and the rest. EB02-026's Heroines Campaign Dash Pack Vivi is now EUR 4.94, and EB02-017's 3rd Anniversary Guide Nami (Japanese) EUR 43.13.
    • improvedPairing only happens where the picture decides it. Every printing of the number competes, matched ones included, and a pair must be within 40 bits of 256. The same art sold again with a stamp, a signature or a championship frame is left unpaired: 48 printings, whose nearest product was that close only.
    • fixedEB01-003's Offline Regional Participation, Finalist and Champion cards share one artwork. They are now paired by the stamp on each: EUR 10.46, EUR 95.76 and EUR 1,449.07.
  7. One Piece parallels and promos matched to TCGplayer by where they were released

    English One Piece printings are now matched to TCGplayer products using the release each card names, such as [PRB-01], Event Pack Vol.5 or Treasure Cup. TCGplayer coverage went from 83.3% to 87.1% of English printings. 59 more English and 81 more Japanese cards now have a price.

    • improvedA Jolly Roger Foil, Pirate Foil, Manga or promo parallel is matched to the TCGplayer product whose group or name carries the release the card lists. A card whose release names a product line, such as PRB-02 or ST-18, is never matched to a product in another line.
    • fixed117 cards were priced as a later reprint's listing, not their own set's. Base cards now take their own set's product, not the Starter Deck, Demo Deck, Revision Pack or Extra Booster listing that reprinted them: EB02-026 Nefeltari Vivi now reads $6.06 from EB-02 instead of $10.02 from the Heroines Edition. Three PRB-02 Pirate Foils were on Judge Pack products.
    • fixedA PRB-01 parallel whose picture is the same file as a claimed reprint is not given a second product under the same number.
  8. No daily cap: spend a plan at whatever pace you need

    Plans no longer stop at a tenth of the monthly allowance per day, so an initial import of a whole game can run in one go. Past the allowance, requests and scans keep succeeding as overage drawn from the prepaid balance, and every credit and scan of it is billed at the plan's published overage rate.

    • improvedThe daily cap is gone from every data and recognition plan. A 429 is now only the per-minute rate limit (details.limit rate_limit) or, when you have switched on the hard cap, the monthly allowance (monthly_allowance, scan_hard_cap). daily_cap and scan_daily_cap are no longer returned.
    • improvedOverage no longer stops accruing at the plan price. It is billed per credit or scan for as long as the balance covers it, and 402 balance_empty is returned when it does not.
    • addedA hard cap for the data API in Dashboard → Billing, alongside the one recognition already had: switched on, requests past the monthly allowance return 429 monthly_allowance and no overage is drawn.
    • deprecatedX-Daily-Limit and X-TCGGraph-Scans-Daily-Limit now read unlimited, and the dailyLimit field of the scan socket's usage frame does too. X-Daily-Remaining and X-TCGGraph-Scans-Daily-Remaining are no longer sent.
  9. Cardmarket sales before 2024 for Yu-Gi-Oh!, Dragon Ball Super and One Piece

    The archived product pages that took Pokémon's sales back to 2019 exist for other games too. 4,877 English Yu-Gi-Oh! cards, 2,463 Dragon Ball Super and 25 One Piece now have sales from before 2024.

    • added183,390 older daily points in /v1/prices/{cardId}/sales: Yu-Gi-Oh! 127,693 from 4,700 archived pages, Dragon Ball Super 54,779 from 2,055, One Piece 918 from 21 (all from 2023; Cardmarket's One Piece pages were rarely archived). Read the same way as Pokémon's: the product from the page's own idProduct field, a capture used only when its address names the card.
    • improvedPages about a product none of our cards is bound to are not used: 1,504 Yu-Gi-Oh! and 835 Dragon Ball Super captures, mostly printings our catalog does not yet pair with a Cardmarket product. Magic, Digimon, Flesh and Blood and Lorcana are not read yet.
  10. Cardmarket sales: Pokémon back to 2019, and each printing's own chart

    Cardmarket's product chart holds about the last 30 days on which a copy sold and has no way to ask for more. The Wayback Machine kept copies of those pages from 2019 to 2023, each with the chart as it stood that day, so 3,606 English Pokémon cards now have sales from before 2024; Base Set Charizard has 520 days of them.

    • added504,652 older daily points in /v1/prices/{cardId}/sales for Pokémon, from 7,271 archived product pages of 4,442 Cardmarket products (3,450 of them ours). The product is read from the page's own idProduct field and a capture is used only when its address names the card it resolves to. Where two captures of a product hold the same day they agree 99.3% of the time. Between the last archived copy and our first read there is a gap, of years for most cards, and nothing fills it.
    • addedfinish on /v1/prices/{cardId}/sales and on sales in GraphQL: the chart of a printing Cardmarket sells as its own product (masterball, pokeball, staff and the rest), which is read and kept apart from the card's own. Any finish prices reports is accepted; one without a product of its own has no points.
    • improveddays on /sales caps at 7,305 (twenty years) instead of 1,826, so the archived years are reachable. A point is a day with a sale, so even that is a few thousand rows.
    • fixedA product the catalog had moved to another card (the GameStop Umbreon, from Obsidian Flames 130 to its own reprint) kept filing its sales, language lows and condition lows under the old card too. 1,013 cards had rows from a product not theirs; those were removed and the products re-read.
    • fixedThe docs said Cardmarket's chart covers about three months. It holds about the last 30 days on which a copy sold: a month for a card that sells daily, years for one that rarely does.
  11. TCGplayer: up to a year of history for cards joined after the archive closed

    The daily archive that gave every non-Magic card joined by September 10 its TCGplayer series back to February 2024 has been withdrawn, so anything joined since opened on the day it was joined. About 32,000 of those card and finish series now reach back as far as October 2025, from the chart on TCGplayer's own product page.

    • addedAbout 735,000 daily TCGplayer Market Price points on about 32,000 series, among them about 1,350 printing products: Poké Ball and Master Ball patterns, stamps and store exclusives. Weekly until 90 days back, every three days until 30, then daily; each figure is dated at its bucket's last day, where against the archive it sat a median 1.1% (daily) to 1.6% (weekly) from the archived value on that day.
    • improvedNear Mint in the card's own language only, the condition Market Price is quoted for, and never over a day already held. About 7,500 series whose product TCGplayer only began to chart recently still start on the day they were joined.
  12. Pokémon: Cardmarket prices for stamps, Poké Ball and Master Ball patterns, store exclusives and Prize Pack cards

    Cardmarket does price the GameStop Umbreon apart from the plain one: as a second product named "Umbreon (OBF 130)", with nothing but a caption on its picture to say it is the GameStop copy. We now read those captions, and pair the uncaptioned Poké Ball and Master Ball copies by price: 668 more Pokémon reprints and 484 printings carry a Cardmarket price of their own.

    • addedCardmarket prices on 282 reprints sold as products of their own, paired by the caption on Cardmarket's product picture: Jumbo cards 69, cards from collections, tins and store exclusives 81, deck and Build & Battle exclusives 54, World Championship decks 61, First Partner Pack 12, blister exclusives 5. A caption is read and a product paired only when it names that reprint and no other: the GameStop, EB Games and "Obsidian Flames Stamped" Umbreons are three products, each priced as itself.
    • addedCardmarket prices on 386 Prize Pack cards, from Cardmarket's nine Prize Pack Series expansions by name, where exactly one of ours and one of theirs share it. The 373 whose name is in more than one series, or shared by two of ours, stay unpriced on Cardmarket until a product page tells the series apart.
    • addedCardmarket rows on printings[] entries: Staff stamps 47, Pokémon Center stamps 20, Cosmos holos 17, with externalIds.cardmarketId set to the stamped product's own id. 98 Shadowless printings are bound but carry no Cardmarket quote: Cardmarket's Shadowless product takes 1st Edition copies too, and its guide ran at 2.3 times TCGplayer's figure where every other line ran 0.5 to 1.4.
    • addedCardmarket rows on 400 pattern printings: Poké Ball 197 and Master Ball 197 across Prismatic Evolutions, Black Bolt and White Flare, and 6 in Ascended Heroes. Cardmarket files them in each set's "Additionals" expansion with no caption, and the order it entered them in differs from set to set. The market tells them apart instead: a Master Ball copy sells for 8 to 18 times its Poké Ball (median), no pair of 208 was under 2x on either marketplace, and every pair checked by picture agreed. A card is paired only where both marketplaces price its two patterns at least 2x apart; quoted from the reverse holo columns, which is how sellers list them (median EUR/USD against TCGplayer 0.85).
    • improvedNot bound: Ascended Heroes' Energy-symbol copies against their ball (priced within 1.2x of each other, so the price says nothing), cards with one pattern of ours against two products, and League and Prerelease stamps whose picture carries no caption.
  13. Pokémon: stamped printings on the card they stamp, baseCardId, and printing photos on our CDN

    Obsidian Flames' Umbreon listed a plain and a reverse holo printing, while the GameStop, EB Games, "Obsidian Flames Stamped" and Trick or Trade 2024 copies were cards of their own that nothing pointed to. They are now printings of pkm_sv3_130, and every reprint sold outside the expansions says which card it reprints.

    • addedbaseCardId on Pokémon cards sold as products of their own outside the expansions: 4,575 of 5,606, from store exclusives, Prize Pack, Trick or Trade, Battle Academy, League & Championship copies to World Championship decks and Jumbo cards. Set where TCGplayer lists exactly one regular card of the same name and number; null where it lists two, rather than a guess.
    • addedThe stamped and holo ones among them (2,137) are also entries in the base card's printings[], after its own finishes: kind stamp or surface, the store, event or treatment as the label, the reprint's own picture, externalIds and prices. key is the reprint's card id, since a stamp is not one of the closed finish values. World Championship, Jumbo and Trainer Kit cards differ by more than a stamp and are left out.
    • addedcardId on every printings[] entry: the card its prices are kept on, and so the id /v1/prices/{cardId}/history and /sales answer for.
    • fixedPrinting photos (Poké Ball patterns, Staff stamps and the rest) are served from our CDN: 1,174 of 1,438 mirrored. They were TCGplayer URLs, which its CDN refuses to other sites and apps. The 264 whose product has no photograph show the card's picture, with imageFrom card.
    • fixedGET /v1/cards/search answered 404 as though "search" were a card id. It now says that search is GET /v1/cards with filters, and suggests the URL with q spelled name.
  14. Scan: a ticket for one photo, and includeCrop

    A photo tested from the dashboard took 8.6 seconds where the same photo took 2.0 on POST /v1/scan, because the dashboard ran the matcher in a function of its own that nothing kept warm. It now posts to /v1/scan like any client, and what that needed is available to everyone.

    • addedPOST /v1/scan?ticket= authenticates one photo with a ticket from POST /v1/scan/tickets, as the socket already did: single use, sixty seconds. A browser can upload straight to the endpoint without holding the key.
    • addedincludeCrop on POST /v1/scan (multipart field or JSON boolean) returns crop, the framing the matcher hashed, as a PNG data URL, on matches and misses alike. Off by default.
    • fixedThe dashboard's photo test answers in the endpoint's time rather than a cold function's: 5.7 of that photo's 8.6 seconds were the detector loading.
  15. Scan: alternatives you can show, finishResolved, English 151 read as English, and honest latency figures

    A customer scanning an English 151 Bulbasaur reverse holo got a Japanese record on top, six alternatives that were bare ids, and a 7.7-second answer. The first two are fixed. The third is shorter on a loaded instance and unchanged on a fresh one, and the recognition pages now say so, as they now say the scanner does not read the finish, which it never did.

    • addedmatches[].alternatives carry name, printedName, set, collectorNumber, rarity, images, pricesFrom and printings (every finish with its key, label, picture and prices) beside cardId, game, language and confidence, on POST /v1/scan and the socket. A confirm step is [card, ...alternatives] crossed with their printings, with no further request; the recognition docs show it.
    • addedmatches[].finishResolved: true only when card.printings has exactly one entry. The finish (normal, reverse holo, foil, etched, 1st Edition) is one of a record's printings and is not read from the photo, so a card in two finishes is always false. printingResolved is documented as covering set, number and language only, which is what it always meant.
    • fixedThe printed total was held against the catalog's count of the set, and sets that hold far more cards than they print (151 prints /165 and holds 207; its Japanese counterpart holds 516) had every read thrown away, the language with it. A total the set has a card at now counts. Scarlet & Violet's line, which the reader returns unspaced ("GMEWEN001/165"), now yields its language; Japanese set codes read beside the number ("SV2a 001/165") narrow to that set; and a Pokémon card's language is taken only from the number's own line, because rules text like "when it" read as language IT. On 27 Scarlet & Violet, Japanese, localized and Sword & Shield cards photographed four ways, correctly resolved printings went from 45 of 108 frames to 72, with none resolved wrongly before or after.
    • fixedMagic's set line ("AFR • FR") was matched in any word, so French flavour text beginning "Comment" read as set COMM in English and outranked the real line. Without its dot, the language must now end the word. On the cross-game language check (777 frames over six games), no resolved printing is in the wrong language.
    • fixedThe docs said one of the alternatives is always the card in front of you. The list holds at most 15, closest to the photo first, and a card reprinted more often than that with the same art (Caves of Koilos has over 60 printings) can have its own record outside it; the docs now say so and point to GET /v1/cards?name=…&language=… for the rest.
    • improvedA photo over HTTPS on an instance with the index loaded took 3.5 to 4.8 seconds, because the printing table and the reader's first run were still built by that photo; it now takes 1 to 1.5 seconds. Everything a photo needs starts loading when it arrives, the index and tiles download together, and a one-minute keep-warm run holds a loaded instance. A photo that lands on a fresh instance still takes 7 to 10 seconds, and photos minutes apart often do: the published figures now give both, and the socket, which loads on open, remains the way to scan more than the occasional card.
    • fixedThe recognition pages gave 450 ms median, 680 ms p95 and 1.7 s p99 as the scan's latency, and 1.5 to 3.5 seconds for a cold start. Production over the last 30 days is 500 ms, 2.0 s and 2.9 s on the socket, and HTTPS photos had a 7.6-second median. The figures are replaced and each is labelled with its transport.
    • fixedRecognition pages said the scanner tells reverse holo from holo, foil from etched, 1st Edition from unlimited, and Alpha from Beta, and that Star Wars: Unlimited hyperspace cards share the base number and leaders match from either face. None was true; each now says what the scan returns instead.
  16. Pokémon: World Championship decks, Prize Packs, Trick or Trade and 5,600 more cards outside the expansions

    22% of the English Pokémon cards TCGplayer sells (6,295 of 28,046 numbered products) had no card or printing here: every card sold outside an expansion, and the newer Friend Ball, Quick Ball, Team Rocket and Pokémon Center printings. A scan or a lookup of one found nothing. 1.3% (367) is left, mostly tournament-placement promos.

    • added50 sets and 5,606 cards built from TCGplayer's product lists: World Championship decks 2004 to 2024 as one set a year (wcd2004 ... wcd2024), Play! Pokémon Prize Packs (pps), Trick or Trade 2022, 2023 and 2024 (tot22, tot23, tot24), Battle Academy 2020, 2022 and 2024, Trading Card Game Classic (tcgc), the nine trainer kits from Diamond & Pearl to Sun & Moon, League & Championship cards (lcc), Jumbo cards, deck, blister and miscellaneous exclusives, and the Burger King, Kids WB, Countdown Calendar, First Partner Pack, Pikachu World Collection, Professor Program, Southeast Asia, EX Battle Stadium and e-Reader sample cards. One card per product; the number is the reprinted card's, gameData.variant says what sets it apart in TCGplayer's words ("Cosmos Holo", "#16 Charizard Stamped") and gameData.deck names a Worlds card's player. Sets that gather years of releases have releasedAt null. 5,390 carry a TCGplayer quote; 243 so far a Cardmarket one, on the lines Cardmarket files as an expansion (all three Trick or Trade years, 84 of 87 cards). Battle Academy and trainer-kit cards Cardmarket lists several times under one name are queued for its product pages; the World Championship decks, Prize Packs and the other gatherings read set_unlisted on Cardmarket.
    • addedMega Evolution Energies (mee, 16 cards), McDonald's Collection 2023 and 2024 (mcd23, mcd24, 15 each, priced on both marketplaces), and Scarlet & Violet Energies #17 to #24, which pokemon-tcg-data does not have yet.
    • addedPrintings friendball (23), quickball (22), team-rocket (10), pokemon-center (26) and cracked-ice (11), e.g. Ascended Heroes' Friend Ball Pikachu on pkm_me2pt5_55. TCGplayer's "Cosmo Holo" and "Cosmos Holofoil" spellings now read as cosmos-holo.
    • fixedA product tagged both Prerelease and Staff is the staff printing; both tags contested one printing and 79 were left unbound. Scarlet & Violet Energies' Cosmos Holo and Cracked Ice energies are printings of sve 1 to 16; TCGplayer's "SVE:" prefix kept the group from reading as the set, so it also bound to the two other energy sets and none of the 16 found its card.
  17. An API reference generated from the API, and filters that no longer match nothing in silence

    Every endpoint now has its own reference page with parameters, errors and credit cost, and every example on it is a response the live API returned. Checking each documented claim against the API turned up filters that were accepted and could never match, and one Digimon field that held the wrong text; those are fixed.

    • added/openapi.json (OpenAPI 3.1) and /schema.graphql, on tcggraph.com and api.tcggraph.com, both built from the same definitions as the reference pages.
    • fixedcollectorNumber matches every printing that shares the printed number. One Piece and Dragon Ball Super parallels and reprints are stored with a suffix (OP05-119_p2, BT15-033_SPR), so collectorNumber=OP05-119 returned the base card alone; it now returns the base and all its parallels, and a suffixed number still names one printing.
    • fixedDigimon gameData.securityEffect is filled: 3,615 printings, mostly Tamers and Options, carried their security effect in inheritedEffect and securityEffect was null on every card. The two are now separate, and a card has at most one of them.
    • fixedGraphQL refuses a gameData, gameDataMin or gameDataMax key the game does not declare, or a bound that is not a number, with a 400 and extensions.code invalid_request; it used to answer 200 and bill the request. Magic oracleText and legalities and Star Wars: Unlimited faces are no longer declared filter fields, as no card carries them there.
  18. Pokémon Black Star Promos: Scarlet & Violet through #225, Mega Evolution Promos as a set

    The open promo sets are now kept current from TCGplayer's product list on a nightly run rather than waiting for the upstream catalogue to file them. Scarlet & Violet Black Star Promos (svp) stopped at #165 and now runs to #225; Mega Evolution Black Star Promos (mep) is a new set of 110 cards.

    • addedmep, Mega Evolution Black Star Promos: 110 cards (pkm_mep_1 to pkm_mep_110, Espeon ex 108, Umbreon ex 110), released 2025-09-26, every one imaged. 102 carry a TCGplayer quote on day one and 54 a Cardmarket one (Cardmarket's "MEP Black Star Promos"); the rest are new enough to have no sales yet, or are numbers Cardmarket lists under two products whose pages are queued and settle them on the next run. /v1/sets/mep?game=pokemon answered 404 before today.
    • addedsvp #166 to #225, 60 cards (Espeon ex 175, Umbreon ex 176, Charizard ex 196, Cynthia's Garchomp ex 204, Team Rocket's Mewtwo ex 205 and 216), every one imaged, all 60 with a TCGplayer quote and 36 with a Cardmarket one on day one; the other 24 are queued the same way. Numbers 105 to 113, 134 and 148 have no product on either marketplace and stay absent.
    • improvedA promo set never closes, so svp and mep are re-read every night: any number TCGplayer sells that the catalogue lacks is stood up the same night, on the id the upstream will use, with gameData.catalogSource = "tcgplayer" until the upstream's own row replaces it. Stamps and patterns of one number (Staff, Prerelease, Pokémon Center Exclusive, Cosmos Holo) are printings of the one card, as everywhere else.
  19. Japanese Pokémon: 400 sets and 27,861 cards as their own catalogue, priced from TCGplayer's Pokemon Japan category

    Pokémon had no Japanese cards at all; the game page said so. Japanese sets are numbered on their own -- a Japanese set of 103 cards is not the English set it later becomes, which reorders, merges and renumbers -- so a Japanese card is not a twin of an English one and now gets a set and an id of its own: card_sets rows under language ja with the set's own code (m6a, sv2a, svp) and release date, cards pkm_ja_<set>_<number> with pricesFrom: own and, on 23,665 of them, an englishId found by artwork hash naming the English printing of the same illustration. The source is TCGplayer's "Pokemon Japan" category through tcgcsv (459 groups, 30,678 products, every one imaged, 27,906 numbered); tcgdex's Japanese set was measured and refused (3,882 images of 12,781 cards). 23,867 of the 27,861 cards carry a TCGplayer USD quote on day one (85.7%), 3,994 are listed but unquoted, and the Cardmarket EUR guide is bound where Cardmarket lists the Japanese expansion.

    • addedThe Japanese Pokémon catalogue: 400 sets, 27,861 cards, from the 1996 Base Expansion Pack to this week's MEGA Expansion 30th Celebration (m6a, 171 cards, released 2026-09-16, the three Mew RGB cards included as pkm_ja_m6a_r, _g and _b). Each card carries name (English, as TCGplayer names it), number, rarity, type, HP, stage, attacks with cost and damage, abilities, weakness, resistance, retreat cost, flavour or rules text and the product photo, with gameData.catalogSource = "tcgplayer". Printed Japanese name, artist, regulation mark, Pokédex numbers and legalities are not in the source and are null rather than guessed. Set codes are TCGplayer's group abbreviations where they name one group (m6a, sv8a, sm12a); the 206 groups without one, or sharing one, take g<groupId>. Card ids carry the number, then the denominator where a group files several decks with one numbering, then the pattern where TCGplayer sells two printings of one number: pkm_ja_sv2a_1, pkm_ja_sv2a_1_poke_ball_pattern, pkm_ja_sv2a_1_master_ball_pattern (2,875 such pattern printings, real products with prices of their own, gameData.printingVariant naming the pattern). 42 products that were a second listing of one card are skipped and named in the run report.
    • addedTCGplayer prices for the Japanese cards, from category 85 as a lane of its own in the TCGplayer ingest: same matcher, the Japanese rows only, and its withdrawals and statuses never touch another language's. All 27,861 matched by product id; 26,052 quotes stored (a Master Ball Pattern Bulbasaur from Pokemon Card 151 at $43.17 market, the plain one at $0.21). Daily at 00:00 UTC after the English games. Cardmarket: the localized pass built for One Piece binds Japanese Pokémon sets to Cardmarket's JP expansions -- five of the six it has (Forbidden Light, Shining Legends, Black Bolt, White Flare, 30th Celebration; Southern Islands has no TCGplayer group to bind): 250 bound and 238 priced on the first run, 437 left ambiguous because Cardmarket names a set's regular and Art Rare printings identically and without a number; their product pages are queued and the number each page states settles them on the next run (11 settled within the first quarter hour). A pattern printing is bound only to a product naming the pattern, and Cardmarket lists none, so the 327 in bound sets read unlisted rather than taking the plain card's product.
    • addedlanguage on the set object, on /v1/sets, /v1/sets/{code} and every card's set, and ?language= on /v1/sets and /v1/sets/{code} (en unless asked, all for every language). A Japanese set code can repeat an English one -- sv3 is Obsidian Flames in English and Ruler of the Black Flame in Japanese -- so /v1/sets/sv3?game=pokemon&language=ja names the Japanese set, /v1/sets/sv3?game=pokemon the English one, and a code held in two languages of one game asks for language the way a code held in two games asks for game. /v1/sets/{code} lists the set's own cards in the set's language. GraphQL Set.language likewise.
    • addedenglishId on a Japanese Pokémon card: the English printing of the same illustration, found by artwork rather than by number, since the numbers differ. Both catalogues' mirrored images are hashed already for scan recognition (a 256-bit whole-card hash and 16 tile hashes); the four tiles across the picture window are compared first, so that a Japanese and an English print of one illustration match on the picture and not on the frame, text or set mark, which differ. A Japanese card matches an English printing of the same name (TCGplayer names the Japanese cards in English; a few dozen spellings are reconciled, Mega to M, PokeStop to PokéStop) within 88 of 256 differing bits on the picture band and 96 on the whole card. The thresholds were read off the data, not chosen: 54 Pokémon GO pairs known by number sit 4 to 5 bits a tile apart, the nearest same-name card of a different illustration 30; over every Japanese card with English printings of its name the nearest one's band distance has a mode at 12, a valley at 84 to 88 and a second mode at 100 to 112, and 41 pairs from the valley looked at side by side put the boundary at 88. Where the name has no English printing at all (the source writes Mega Charizard EX for M Charizard-EX), artwork alone within 72 and 80 and a word of the name in common. 23,665 of 27,861 Japanese printings carry an englishId today (23,466 by name and picture, 199 by picture alone); 1,228 have English printings of the name but of a different illustration, 511 have no English printing of the name, and 2,457 have no photo on TCGplayer to hash. The cross-reference re-runs daily at 07:20 UTC after the image mirror, so a card gains its englishId once both sides are imaged. It is a cross-reference, not a price twin: the Japanese card keeps pricesFrom: own and its own quotes, and a client wanting the English price follows englishId. The docs for englishId say which of the two meanings applies.
    • improvedNo English Pokémon row changed: 20,635 English cards, same ids, same bindings, same quotes (checked by fingerprint before and after). The English ingest and the English TCGplayer lane now read only English sets and rows by name, since a Japanese sv3 sits beside the English one. Images are mirrored through the usual pipeline from TCGplayer's large product photo, 25,404 of 27,861; the 2,457 TCGplayer lists with a picture URL but no picture behind it (its Mirror Holofoil listings above all, which answer 403) have images: null rather than a dead link, and the ingest no longer puts the URL back for the API to hand out. The page copy, FAQ and llms reference for Pokémon say what is held and what is not.
  20. Japanese One Piece printings carry their own Cardmarket prices

    A Japanese One Piece row used to serve its English twin's quotes, flagged pricesFrom: englishTwin, on the grounds that the marketplaces price the product across languages. For One Piece that is not so: Cardmarket sells the Japanese edition as separate products, in expansions tagged (Japanese), (Non-English) or (Asia Region Legal), with their own guide prices, and the English figure is within 20% of the Japanese one for one card in five (median ratio 0.75, tenth percentile 0.25, ninetieth 2.50, over 3,612 pairs). 3,717 of the 4,987 Japanese printings are now bound to their Japanese product and priced from it; the rest say why they are not.

    • addedcards.own_prices: a localized printing bound to a marketplace product of its own serves that product's quotes, statuses and sales, and says pricesFrom: own. The Cardmarket ingest runs a second pass per game for the languages Cardmarket sells separately (One Piece: Japanese), against that language's expansions only. Set and release-label bindings are read off the English pass by the expansion's base name -- "Paramount War (Japanese)" is Paramount War -- and the matching rules are the English pass's: number, listing order with the English twin's TCGplayer price as the independent ranking, release label, reprints sold as their base printing. 3,696 Japanese printings priced (1,980 by number, 1,209 by listing order, 300 by release label, 202 by label order, 63 by name, 36 reprints, 26 by number outside the set), 21 bound but unquoted.
    • improvedA Japanese printing without a Japanese product keeps the English twin's quotes and pricesFrom: englishTwin, for a stated reason: 164 are in sets Cardmarket has no Japanese edition of (ST05-ST08, ST10, ST13, ST31, ST33-ST36), 175 have no product of their number in the edition, 931 are parallels the catalogue lists identically and the order rule could not settle, or whose product another printing holds. Chinese and Korean One Piece (11,126 rows) have no edition of their own on any marketplace and stay englishTwin. English rows are untouched: the English pass is unchanged and no English binding moved.
    • improvedpriceStatus.tcgplayer reads set_unlisted on an own-price Japanese row, because TCGplayer's One Piece catalogue has no Japanese groups (87 checked), rather than the English twin's priced. The page crawl queues the 3,669 Japanese products under their Japanese card and asks each page for Japanese offers, where before every page was asked for English; the 39 pages read so far all carry a ja row. The localized catalogue ingest no longer overwrites an own-price row's Cardmarket binding with the twin's on re-run.
    • fixedexternalIds.cardmarketId on a Japanese One Piece printing without a Japanese product of its own. 684 such rows carried the English twin's product id, copied by the localized catalogue ingest, which is right for a French or German card (Cardmarket sells every language under one product) but named a product the Japanese card is not sold as. Where its copies sell was read off the crawled offer pages: in the eleven starter decks Cardmarket has no Japanese edition of, Japanese copies are offers on the English product (14 of 18 crawled ST05 products carry ja offers, 17 of 26 in ST06, 16 of 20 in ST07), so those 184 rows keep the English product id; in a set with a Japanese edition the English product carries a ja offer on 6 of 755 OP01, OP05 and OP08 products, so the 1,088 rows there now have cardmarketId null, keep pricesFrom: englishTwin, and the product the quotes come from is on the card englishId names. The localized ingest no longer copies the twin's product onto a language the Cardmarket pass owns; the pass decides it, both ways, every run.
  21. Forgotten passwords can be reset from the sign-in page

    The "Forgot your password?" link under the sign-in form sends a reset link by email. Until today the two pages behind it were drawn but not wired, so a customer who lost a password had to write to us.

    • addedPassword reset by email. Ask for a link at /forgot-password; it opens /reset-password, where a new password is set and the account signed in on the spot. A link works once and for an hour, and the page says so when one has expired or been used.
    • improvedSetting a new password signs out every other session on the account. Reset mail goes out regardless of the account's marketing opt-out, since it is asked for, not sent.
  22. One Piece: reviewed Cardmarket pairings taken from a client's list, reprints priced as the product they sell as; matched products queued for the page crawl on their own

    A client sent 1,432 One Piece printings without a Cardmarket price, 189 of them paired to a product by a person looking at the cards. Those pairings are now a table the matcher reads first, checked one more way than the reviewer could: a reprint paired with a base set's product is Cardmarket selling the two as one card, not a wrong product. English One Piece printings priced from the Cardmarket guide went from 4,556 to 4,622; 131 of the client's 189 carry the product they named, 15 more carry it unquoted because Cardmarket has no figure for the product yet, and 41 name products in Japanese and Asia-region expansions, which this API does not price English printings from.

    • addedCardmarket pairings a person has reviewed are stored (cardmarket_pairings) and outrank every matching rule. Each is checked before it is taken: the product must be in the game's catalogue, in an English expansion, carry the card's name, and sit in the expansion the printing's release label points to -- unless that expansion has fewer products of the number than we have printings labelled there, in which case the reviewer's word decides which of ours has no product of its own. 146 of the client's 189 are in; the 43 not taken are the 41 in other languages' expansions and one pair of the client's own rows naming one product for two printings (OP05-067_p5 and _p6).
    • fixedA One Piece reprint (_rN) whose deck expansion has no product of its number is priced as the base printing's product: Cardmarket files a deck under the cards that are new or newly drawn -- "Starter Deck: Smoker" has eight products, five ST19 cards and three alt-arts, and none for the eight OP02 cards reprinted unchanged -- so the reprint and the base sell as one listing. 44 reprints from the ST-15, ST-17, ST-19, ST-20 and ST-35 decks and both The Best boosters are priced this way -- 27 of them the client's pairings, 17 found by the rule -- where they had read unlisted or collapsed. The same holds for the manga-art cards The Best reprinted from the Special Tournament Promos: OP01-121_p3 Yamato sells as the promo product on Cardmarket and TCGplayer both, and is priced at its EUR 1,868.
    • fixedRelease labels the card source's ids could not place -- small decks never reach the three-id minimum -- are read by the set code Bandai prints in them ("-Black Smoker- [ST-19]" is ST19, whose expansion the set match already found), taken only where the few ids there are do not mostly point elsewhere. 13 more labels placed; the Uta deck's, whose alt-arts Cardmarket files under "Promos: Paramount War" rather than the deck, correctly not among them.
    • fixed200 One Piece products matched to a card were never in the page-crawl queue, so their English near-mint figure and condition breakdown were missing while the guide price was served. Every product a card is matched to is now queued the moment the match exists, on the same schedule that re-tiers the queue; 121 queued today.
  23. 30th Celebration: seven late cards added, the set moved onto its catalogue code (me55), old ids keep answering

    pokemon-tcg-data published 30th Celebration on the 19th as me55 and me55c, three days after we built it from TCGplayer's list under the provisional codes me5pt5 and me5pt5c. The sets are moved onto the catalogue's codes and ids, and the seven cards TCGplayer and the catalogue added after release day -- the three RGB Mews and four secret rares -- are in, priced where the markets have a figure. Every id issued under the old codes resolves to the card under its new one.

    • addedMew R/RGB, G/RGB and B/RGB (pkm_me55_R, _G, _B), Kommo-o 143, Mewtwo ex 151, Mew ex 152 and Gengar ex 154, added to TCGplayer's list and the catalogue after release day. The four secret rares are priced on both markets (Mew ex 152 at $203 / EUR 327); the three Mews are bound to their TCGplayer and Cardmarket products (V1 = R, V2 = G, V3 = B) and read unquoted until either market publishes a figure.
    • improvedCard ids changed for the two sets: pkm_me5pt5_* is pkm_me55_*, and the Classic Collection's pkm_me5pt5c_106_105 style, which kept the reprint's denominator, takes the catalogue's pkm_me55c_106 / _106p / _106m. Set codes in the set object change likewise. The 184 old ids -- asked for 13,000 times over the three days -- keep resolving on /v1/cards/{id} and the three /v1/prices/{id} endpoints, which answer with the card under its current id and meta.movedFrom naming the one asked with. This is how a provisional code will be retired from now on; the catalogue field description for id says so.
    • improvedCardmarket matching reads the collector number the crawl has already taken off a product page: where several products carry one name and exactly one page states the card's number, that product is the card's. The crawl bound cards from the page as it read them, but only cards that existed at the time; 36 Pokémon cards whose pages were read before the cards were catalogued, the seven above among them, are priced by it.
  24. One Piece: 354 more printings priced on Cardmarket, DON!! cards among them; 24 wrong Cardmarket prices and 83 wrong TCGplayer bindings corrected or withdrawn

    A second pass over the One Piece printings that read as not on Cardmarket found most of them were: a parser that dropped one-letter promo numbers, printing names carrying a "(Parallel)" suffix or a Japanese title, reprint groups the label rule could place but not order, and the 238 DON!! cards, which have no collector number and had never been priced from Cardmarket at all. English One Piece cards priced from the Cardmarket guide went from 4,115 to 4,469 of 5,538; Digimon gained 175 promos from the same parser fix. On the TCGplayer side, 83 reprints (_r1) had been bound by image to stamped promo or chase products of the same art and are now held to "(Reprint)" products only.

    • addedDON!! cards are priced from Cardmarket: 190 of 238. They carry no collector number, and the two catalogues name them differently -- "DON!! Card (Gear 4 Luffy) (Gold)" here, "DON!! (PRB02 - Snakeman)" there, three products of that name for plain, foil and gold -- so they are paired by the art's subject and the product it shipped in, the finishes read off the product page's version or, failing that, off both markets ranking them the same way. Pairings that rest on the words alone must have the two markets within 4x. Checked against the product pictures: the premium boosters' plain and gold, OP13, OP15, OP17, the Double Pack and Devil Fruits language pairs, the Special Don!! Set. 5 read ambiguous (three printings of ours against two products for OP17's Luffy DON!!) and 39 unlisted, where Cardmarket has no product of the subject: the colour series, Double Pack 12, the Netflix Chopper. Their images, which had been missing, are on the records too.
    • fixedOP17: 25 printings a client had matched to Cardmarket products by artwork read as ambiguous and are now priced with those same 25 product ids (OP17-062_p3 at EUR 275, OP17-079_p2 at EUR 1,900). Three variants that client could not place read collapsed for cause: OP17-027_p2 and OP17-054_p2 are tournament prize printings dated October 2026 that Cardmarket has no product for yet, the expansion's two products of each number being the base and its first parallel; OP17-033_p1 Lucky.Roux has a product only in the Asia Region Legal expansion, which is another language edition, and none in the English one.
    • fixedCardmarket product numbers with a one-letter prefix -- "Monkey.D.Luffy (P-001)", Digimon's "(P-049)", Dragon Ball's "(M-36)" -- were parsed as having no number, so 134 One Piece promo printings were served as "no product carries this name and number" while the product sat in the Promos expansion under exactly that. One Piece's P set now matches by number and lists in order; 175 Digimon promos priced.
    • fixedOne Piece printing names from the card source are now the card's name: 91 rows named "Absalom (Parallel)" lose the suffix and 45 Japan-only promos listed under their Japanese title take the English name of the printing they parallel. All 136 had been unlisted on Cardmarket for the spelling alone; the names on the card records change too.
    • fixedWhere a One Piece printing's release label placed it in one Cardmarket expansion with a single product of its number, that placement now outranks the card source's own product id. The two disagreed on 16 of 1,904 printings; TCGplayer's price sided with the label in 13 (chase parallels served at EUR 1-21 while trading at EUR 35-370: ST01-012_p1 Luffy at EUR 151 for a EUR 362 card, ST15-002_p1 Whitebeard at EUR 17 for EUR 220) and with the id in one, a EUR 0.25 promo against a EUR 0.21 one. Nine more source ids that filed tournament and event promos under "The Best Vol.2" -- OP09-076_p1, a $5,000 regional prize card, at EUR 41 -- are set aside where the product belongs to a printing whose label says it shipped there; those printings now read collapsed rather than carry another card's price.
    • improvedA card's reprint and parallels that shipped together in a later product -- OP02-106_r2, _p4 and _p5 in The Best -- are paired with that expansion's products of the number in the order Cardmarket entered them, reprints first, when the counts agree and TCGplayer does not rank them the other way. Scored 77 of 78 against the card source's ids; 144 printings priced that read as ambiguous.
    • fixedTCGplayer: a One Piece reprint (_r1, the same art in a starter deck or The Best) can only be bound to a product tagged "(Reprint)". 83 of the 465 reprints had been bound by image to Pre-Release, Release Event, Tournament and Judge stamps of the base art, and two to "(Manga)" chase products -- OP06-118_r1 at $2,150, OP07-033_r1 at $61 for a card whose reprint sells for cents. 26 are re-bound to their "(Reprint)" product; 57 now carry no TCGplayer quote until one exists. The bad quotes were withdrawn from the history too.
  25. One Piece: 485 more printings priced on Cardmarket, and ~130 corrected

    The One Piece card source names a Cardmarket product per printing, and that mapping is now the authority for the game the way MTGJSON is for Magic. Parallels and reprints that Cardmarket files under a later product -- The Best, a starter deck, an event pack -- are looked for there rather than in their set's expansion. English One Piece cards priced from the guide went from 3,630 to 4,115 of 5,537.

    • fixedAbout 130 One Piece cards carried a wrong Cardmarket product inherited from earlier matching and never re-derived: every OP15 base card was priced from the set's promo expansion at 5-30x its value, and some fifty base/parallel pairs were swapped. Where the stored product and the card source's disagreed, TCGplayer's price for the printing sided with the source 118 times to 4. The stored ids for this game are now re-derived on every run instead of inherited.
    • improvedA reprint (OP03-094_r1) or parallel (OP06-036_p1) that shipped in a later product is matched in that product's Cardmarket expansion by its original number. 257 printings priced this way, at 99.2% agreement with the source over the printings both can place. 426 reprints that read as collapsed -- the base printing's product was the only one of that number in the booster -- now read as priced, ambiguous or unlisted according to what their own expansion holds.
    • improvedexternalIds.cardmarketId on a One Piece card is now the card source's own product id wherever it publishes one (3,583 of 5,537 printings), so a client that cross-references dotgg sees the same product.
  26. 30th Celebration on release day, and 1,176 more Pokémon cards priced on Cardmarket

    Pokémon TCG: 30th Celebration (me5pt5, 154 cards) and its Classic Collection (me5pt5c, 30) are in the catalog on their worldwide release date with TCGplayer and Cardmarket prices, ahead of the card catalogue we normally read. The same pass fixed three Cardmarket spellings that had left 1,300 older Pokémon cards without a product.

    • added30th Celebration and 30th Celebration: Classic Collection, released 2026-09-16. Built from TCGplayer's product list because pokemon-tcg-data does not list the set yet: name, number, rarity, type, HP, stage, attacks, weakness, resistance, retreat cost and product photo, with gameData.catalogSource = "tcgplayer" on each card until the catalogue publishes and its rows take over on the same ids. 179 of 184 cards carry a TCGplayer quote and 177 a Cardmarket product on day one; the seven still open share a name and attacks with a sibling and are being told apart from their product pages.
    • improvedCardmarket product names with a Diamond & Pearl era level ("Uxie Lv.55"), an SP owner mark in brackets ("Crobat [G]") or a Mega without its space ("MGardevoir EX") now match. Pokémon cards with a Cardmarket product went from 18,585 to 19,764 of 20,628; cards priced from the guide from 18,478 to 19,654; cards with no product from 1,505 to 171. Every newly matched product is on the listing crawl for languagePrices[] and conditions[].
    • improvedCardmarket's expansion table was re-read: six 30th Celebration expansions (the English set, JP, Simplified Chinese, Indonesian & Thai, the Premium Deck Set and the Additionals), a Magic and a Yu-Gi-Oh! set and a One Piece starter. Bare "JP" and "KR" edition tags are now recognised as other-language expansions.
  27. Cardmarket refresh follows the card, not the game

    Every crawled game now carries set release dates, and the Cardmarket listing crawl places each card on one of four lanes by its set's age, its price and what customers ask for. Bulk that has not moved in years is read weekly; the hits it used to take go to new sets and cards that move.

    • improvedSet release dates for Yu-Gi-Oh! (640 of 661 sets, from the card source's set list), Dragon Ball Super (90 of 121), Digimon (65 of 66) and Grand Archive (47 of 63), the last three from the release day of the TCGplayer group each set is bound to. Each set's releasedAt is now in the API for these games; a date from the game's own source always wins over one from TCGplayer.
    • improvedA fourth, weekly lane for languagePrices[] and conditions[]. A set under three months old is read every 6 hours whole; after that a card's Cardmarket trend decides, with bulk under EUR 0.50 in a set over a year old read weekly and anything customers ask for lifted to daily or 6-hourly on the next nightly pass. Yu-Gi-Oh! reprints are recognised by name: while a set is under three months old, every earlier printing of a card in it is read at least daily. Owed pages fell from 44,600 to 33,300 a day with the same pool; 41,016 of 64,438 products rest on the weekly lane.
    • improvedA game few customers ask about rests a lane slower by itself, read from the request log each night rather than from a list, so a game unlocks the week customers arrive. Its newest sets are still read daily.
  28. Language rows share the card's finish; the explorer shows the whole response

    languagePrices[].finish now says the same word as prices[].finish for the same printing, and the public explorer returns printings, language ladders and graded quotes read from production rather than empty lists.

    • fixedAn unmarked Cardmarket listing of a holo rare was written as normal while the card's guide quote said foil, so a client filtering languagePrices by a printing's finish found nothing. 25,095 language rows and 67,989 condition rows on 6,366 cards now read foil, and the crawl writes the card's plain finish from here on.
    • improvedThe explorer's sample carries printings[] with each variant's own picture and product ids, languagePrices[] with conditions[], and gradedPrices[], all read from production with the API's own serialisers. Per game, chips under the name field open a card that shows each.
  29. Cardmarket listings for Lorcana, Dragon Ball Super and Yu-Gi-Oh!

    Per-language and per-condition Cardmarket lows, until now read for Pokémon and One Piece, are being read for three more games. Lorcana joins on the same cadence; Dragon Ball Super and Yu-Gi-Oh! on a slower one that a customer asking for a card overrides.

    • addedlanguagePrices[] and conditions[] for Lorcana: 3,024 Cardmarket products, sets under a year old every six hours, the rest daily, the same lanes Pokémon and One Piece use.
    • addedThe same for Dragon Ball Super (6,567 products) and Yu-Gi-Oh! (32,283 products), read on a three-day cycle. The first pass lands over the coming day for Dragon Ball Super and three days for Yu-Gi-Oh!; a card appears with its rows as soon as its page has been read.
    • improvedRefresh lanes are per game as well as per card: a game few customers use yet rests on the slow lane by default, and a card in it that customers ask for is lifted to the daily or six-hour lane on the next nightly pass, as for any other game.
  30. Printings: patterns, stamps and editions, with a closed finish list

    A card's Poké Ball and Master Ball patterns, Staff, Prerelease and League stamps and Base Set's Shadowless run are priced as the separate products the marketplaces sell them as, each with its own picture. finish is now a documented closed list, and a Cardmarket row carries the same finish as the TCGplayer row for the same physical card.

    • addedprintings[] on every card, REST and GraphQL: prices regrouped by finish, one entry per physical printing, with key, label, kind (surface, pattern, stamp, edition), images, imageFrom and the externalIds it was read from. key is the finish value and is stable across re-resolution.
    • addedfinish gains pokeball, masterball, energy-symbol, duskball, loveball, staff, prerelease, league, shadowless and cosmos-holo where TCGplayer prices them as their own products. About 1,200 Pokémon printings on the first run, each confirmed against the card's artwork before it is bound.
    • addedThe finish vocabulary is closed and tabled on /docs/prices with a label and kind per value. A marketplace subtype we do not recognise is left unpriced and logged, never passed through, so a client that whitelists the list drops nothing.
    • fixedCardmarket rows carry the real finish of the product. A Pokémon holo is foil on Cardmarket as it is on TCGplayer, and a card Cardmarket prices as reverse holo gets its own reverse-holo Cardmarket row (10,740 of them). Before, every Cardmarket row said normal, so Charizard ex 151 looked like two printings that were one.
    • fixedLorcana's TCGplayer foil is foil, not cold-foil: the marketplace's Cold Foil subtype is the game's ordinary foil, the one Cardmarket quotes as foil on the same card, and the undocumented value was being dropped by whitelisting clients.
    • improvedPokémon cards whose Cardmarket product shares a name with another in the same set (Bulbasaur, Pikachu and the rest of 151's commons) are resolved from the product page's own collector number rather than left ambiguous. Rolling out over the coming days as the pages are read.
    • fixedA stored TCGplayer id is no longer trusted when the product it points at is plainly another card: a name with no word in common outside the card's own set group, or a product whose group holds a same-numbered card of exactly its name. About thirty such joins across Pokémon, Lorcana and Grand Archive (Latios δ priced as a Rapidash, Charizard δ as Base Set's Shadowless Charizard) are withdrawn, and the card carries no TCGplayer row until a right one is found.
  31. Dragon Ball Super joins the catalog

    Dragon Ball Super is the ninth live game: both of Bandai's lines, Fusion World and the original Masters series, under game=dragon-ball-super, read from Bandai's own card databases and priced on Cardmarket in EUR and TCGplayer in USD.

    • addedDRAGON_BALL_SUPER in the Game enum. Every Leader, Battle, Extra and Unison card of both lines, with line, cardType, colors, cost, specifiedCost, power, comboPower, comboEnergy, specialTraits, characters and era under gameData.
    • addedLeaders carry their awakened face under gameData.back — name, power, text and image — so a Leader is one printing rather than two.
    • addedPrices from Cardmarket (game 13, both lines) and TCGplayer (the Fusion World and Masters categories read together), with the same priceStatus vocabulary as every other game. Recognition covers the game's front faces.
    • improvedCopy that counted eight games now counts nine, and the comparison tables take their counts from the catalog rather than from prose.
  32. TCGplayer prices, in dollars, on every game

    Pokémon, Yu-Gi-Oh!, One Piece, Lorcana, Star Wars: Unlimited, Digimon and Grand Archive now carry the TCGplayer quote in USD next to the Cardmarket quote in EUR, matched printing by printing and refreshed nightly. Grand Archive, which Cardmarket does not list, is priced for the first time.

    • addedA tcgplayer row on prices[] for the seven non-Magic games: market and low in USD, per finish, from TCGplayer's daily publication. Magic keeps its MTGJSON feed.
    • addedpriceStatus.tcgplayer on every card, with the same vocabulary as priceStatus.cardmarket (priced, unquoted, ambiguous, unlisted, set_unlisted), so an empty row is explained rather than silent. A quote is served only when exactly one TCGplayer product can be tied to the printing; parallel arts and stamped promos that TCGplayer sells under one number are settled by comparing the product image against the card images, or left ambiguous.
    • addedfinish gains reverse-holo, 1st-edition, 1st-edition-foil and limited where TCGplayer prices them, beside normal, foil and etched.
    • addedDaily TCGplayer history for the seven games back to February 2024, replayed from the marketplace's own archive rather than started from the day we first tracked it.
    • improvedStar Wars: Unlimited foil printings (the F rows) carry the product's foil quote and the plain rows the non-foil one; Grand Archive First Edition and Alter Edition sets are priced from their own TCGplayer groups.
    • fixedCopy that described TCGplayer as Magic-only, and Cardmarket as covering all eight games, now says what the data holds: TCGplayer on eight, Cardmarket on the seven it lists.
  33. Localized printings, held and recognised

    Every game now lists exactly the languages the catalog holds — Magic in all eleven languages, and the European and Asian printings of Pokémon, One Piece, Lorcana, Star Wars: Unlimited and Digimon — each as its own row with its own image, matched by recognition and linked to the English card. Where a language is not held yet, the game page says so.

    • addedlanguage, printedName, englishId and pricesFrom on every card. A localized printing that shares its set and collector number with an English one carries englishId and the English twin's prices, flagged pricesFrom: englishTwin.
    • added?language= on /v1/cards, and language plus allLanguages on CardFilter in GraphQL. English by default; a code for one language, all for every printing. Totals and pagination are unchanged for callers who pass nothing.
    • addedMagic in de, fr, it, es, pt, ja, ko, ru, zhs and zht beside en; Pokémon in fr, de, es and it; One Piece in ja, zht, zhs and ko; Lorcana in fr, de, it and ja; Star Wars: Unlimited in fr, de, es and it; Digimon in ja and zhs.
    • addedRecognition matches localized printings on their own images and returns language on the printing. A frame whose language is ambiguous between twins is settled by the printed set line, then by the text box.
    • fixedLanguage counts and lists on the games pages, meta descriptions and the comparison table now derive from the rows the catalog actually holds. Yu-Gi-Oh! and Grand Archive are English only today; Digimon Korean and the Pokémon and Yu-Gi-Oh! Asian sets are the next language work and are no longer claimed.
  34. Cardmarket prices, in euros, on every card

    Every card in every game now carries a European quote next to the American one, in the currency each marketplace actually trades in. No conversion, no blending.

    • addedA cardmarket row on prices[] for all eight games, quoted in EUR with trend, avg1, avg7 and avg30, and foil quoted separately.
    • addedregion on every price, so you can select a market without naming a vendor.
    • added?source=cardmarket and ?region=EU on /v1/cards. Price bounds and the price sort read the selected market, and meta.priceSource echoes the choice back.
    • addedPriceSource and PriceRegion enums in GraphQL, plus a source field on CardFilter.
    • improvedLocalised European printings resolve to their own records rather than collapsing into the English card.
  35. Grand Archive joins the catalog

    Grand Archive is the eighth live game, with element, class and speed modelling plus the full Dawn of Ashes and Mortal Ambition card pool.

    • addedGrand Archive cards and sets under game=grand-archive. Catalog only for now; pricing is not live.
    • addedgameData fields for memoryCost, reserveCost, level, durability, elements, classes and speed.
    • addedGRAND_ARCHIVE added to the GraphQL Game enum.
    • improvedChampion levels are exposed on gameData so progression lines can be walked.
  36. Credit metering replaces request quotas

    Billing now meters the work a query performs rather than the number of HTTP calls, so batching a hundred cards into one page costs the same as batching ten.

    • addedX-Credits-Cost, X-Credits-Limit, X-Credits-Used, X-Credits-Remaining, X-Daily-Limit and X-Daily-Remaining response headers.
    • addedHard spend caps, enforced per account. Ask us to set one until the dashboard control ships.
    • improvedConditional requests returning 304 are no longer billed.
  37. Star Wars: Unlimited and Digimon

    Two games added in one release, both with full aspect and colour modelling and daily prices from launch.

    • addedStar Wars: Unlimited under game=star-wars-unlimited.
    • addedDigimon Card Game under game=digimon.
    • addedArena and aspect filters for Star Wars: Unlimited.
    • improvedDigimon inherited effects are exposed as a distinct field.
  38. Four price sources on Magic

    Cardmarket, Card Kingdom and Mana Pool now sit alongside TCGplayer on Magic, each normalised by finish and surfaced separately rather than averaged.

    • addedPer-source price series on the prices array.
    • addedCard Kingdom buylist beside retail, as a distinct list type.
    • fixedFoil and non-foil series no longer merge on Lorcana enchanted cards.
  39. Disney Lorcana and One Piece

    Lorcana ships with ink, lore and inkable modelling; One Piece with leader, counter and life mechanics across both English and Japanese printings.

    • addedDisney Lorcana under game=disney-lorcana.
    • addedOne Piece Card Game under game=one-piece.
    • improvedJapanese One Piece printings link to English via a shared cardId.