Skip to content
TTCGAPIs
guides7 min read

One API for US and European Trading Card Prices

How to get TCGPlayer prices in USD and Cardmarket prices in EUR for the same card from one API key, with a worked Pokemon example and the limits to know.

T

TCGAPIs Team

The short answer

Yes, one API can return trading card prices for both the United States and Europe. With a single TCGAPIs key you can request:

SourceCurrencyWhat comes back
TCGPlayer (United States)USDMarket, low, mid, high and direct-low price for each printing
Cardmarket (Europe)EURPrice guide: low, average and trend, plus 1, 7 and 30-day averages
Cardtrader (Europe)USD in our recordsLowest and highest listed price, quantity and listing count by language, condition and print type

Cardtrader is a European marketplace, but the prices we hold for it are in US dollars. Each Cardtrader record names its currency, so read that field.

The same key works for Pokemon, Magic: The Gathering, Yu-Gi-Oh! and the other supported games. On 13 November 2026 the Cardmarket catalog held 31 games and the Cardtrader catalog 14.

Two things are worth knowing before you build on it. Each source keeps its own product IDs, so you need a link between them. And nothing is converted: a euro price stays in euros.

What "real time" means here

Every price record carries a timestamp. Use it instead of assuming the number is live.

  • TCGPlayer product prices have last_updated.
  • Cardmarket price guides have processedAt.
  • Cardtrader records have fetched_at.

In the example below, all three records were dated the same day: the Cardtrader record at 03:02 UTC, the Cardmarket guide at 04:00 UTC and the TCGPlayer price at 10:07 UTC. Refresh timing varies by product and source, so treat these as dated reference prices. They are not quotes you can trade against. If you need offers that are for sale right now on TCGPlayer, that is a separate live listings endpoint.

Step 1: find the same card on each side

TCGPlayer identifies a product by productId. Cardmarket uses idProduct. Cardtrader uses a blueprint id. There are two places where the catalog links them for you.

From Cardmarket. Walk the Cardmarket catalog down to the card:

  1. GET /api/v2/cardmarket/games lists the games and their idGame. No key is needed.
  2. GET /api/v2/cardmarket/expansions/:idGame lists the sets.
  3. GET /api/v2/cardmarket/singles/:idExpansion lists the cards in a set.

Each single has an idProduct and, where a match is on file, a productId. That productId is the TCGPlayer product.

From Cardtrader. A blueprint record names both of the other IDs in tcg_player_id and card_market_ids.

Here is the Cardmarket record for Charizard ex 199/165 from Scarlet & Violet 151, trimmed to the fields that matter:

{
  "idProduct": 733794,
  "productId": 517045,
  "enName": "Charizard ex",
  "expansionName": "151",
  "number": "199",
  "rarity": "Special Illustration Rare",
  "gameName": "Pokémon"
}

The Cardtrader blueprint for the same card, 261377, carries "tcg_player_id": 517045 and "card_market_ids": [733794]. All three sources agree on this card.

Step 2: request the prices

This runs on Node 18 or later with no packages. Save it as prices.mjs and keep the key in an environment variable on your server.

const BASE = 'https://api.tcgapis.com';
const headers = { 'x-api-key': process.env.TCGAPIS_KEY };
 
async function get(path) {
  const response = await fetch(BASE + path, { headers });
  if (!response.ok) throw new Error(`${path} returned ${response.status}`);
  return (await response.json()).data;
}
 
// Charizard ex 199/165, Scarlet & Violet 151
const single = await get('/api/v2/cardmarket/single/733794');
 
const [us, eu, trader] = await Promise.all([
  get(`/api/v2/prices/${single.productId}`),
  get(`/api/v2/cardmarket/prices/${single.idProduct}`),
  get('/api/v2/cardtrader/prices/261377'),
]);
 
console.log('TCGPlayer market, USD:', us.prices.Holofoil.marketPrice, us.last_updated);
console.log('Cardmarket trend, EUR:', eu.trend, eu.processedAt);
const nearMint = trader.variants.en_near_mint_normal;
console.log('Cardtrader lowest Near Mint,', trader.currency + ':', nearMint.min_price_cents / 100, trader.fetched_at);

That is four requests: one catalog lookup and three prices.

Step 3: read the three responses

These are the values the three endpoints returned for that card on 13 November 2026, trimmed for length.

TCGPlayer, in USD. Prices are grouped by printing. Printings that do not exist for the card are listed with empty values, so check for null.

{
  "productId": 517045,
  "prices": {
    "Holofoil": {
      "lowPrice": 229.99,
      "midPrice": 333.07,
      "highPrice": 10000,
      "marketPrice": 291.77,
      "directLowPrice": 245
    }
  },
  "last_updated": "2026-11-13T10:07:34.466Z"
}

Cardmarket, in EUR. One price guide per product. The record has no currency field; Cardmarket price guides are in euros.

{
  "idProduct": 733794,
  "low": 180,
  "avg": 336.32,
  "trend": 343.78,
  "avg1": 308.7,
  "avg7": 321.77,
  "avg30": 325.94,
  "processedAt": "2026-11-13T04:00:02.116Z"
}

Cardtrader, currency named on the record. Prices are in cents, grouped by language, condition and print type. The record also holds the individual listings behind each group.

{
  "blueprint_id": 261377,
  "currency": "USD",
  "listings_count": 90,
  "total_quantity": 106,
  "variants": {
    "en_near_mint_normal": {
      "language": "en",
      "condition": "Near Mint",
      "print_type": "normal",
      "total_quantity": 62,
      "min_price_cents": 34864,
      "max_price_cents": 1257557,
      "listing_count": 52
    }
  },
  "fetched_at": "2026-11-13T03:02:01.149Z"
}

Comparing a dollar price with a euro price

The API does not convert currencies, and that is deliberate. A converted number hides which rate was used and when.

  • Store the source, the currency and the timestamp next to every value.
  • Convert with your own exchange rate and record the date of that rate.
  • Compare like with like. TCGPlayer marketPrice is a sales-derived reference. Cardmarket trend is Cardmarket's own trend figure. Cardtrader min_price_cents is the cheapest current listing. They answer different questions, so a gap between them is not automatically an arbitrage opportunity.
  • Watch the outliers. In the example above the highest TCGPlayer listing is 10,000 USD and the highest Cardtrader listing is over 12,000 USD. Use low, market or trend values for decisions, never the maximum.

Limits to know before you rely on it

  • Links are not complete. In a spot check of six Pokemon sets on 13 November 2026, about three in four Cardmarket singles carried a TCGPlayer productId. The newest releases had none yet. When the link is missing, match on name, set and collector number, and confirm the match before using it.
  • Check the link you are given. Compare the name, set and number on both records before you price one card from the other.
  • Cardtrader records are mostly in USD. A small share are in another currency. Always read currency.
  • Cardtrader record shapes vary. Most records use the shape above. A few older ones give min, max and avg for each group instead of cent values. Read the keys that are present.
  • Foil fields on Cardmarket use a suffix. Pokemon records use -holo, for example trend-holo. Some other records use -foil. Read the keys instead of assuming one.
  • Cardmarket data here is a price guide. It does not include individual Cardmarket sales or seller listings.
  • A missing Cardmarket or Cardtrader price is a 404. An ID with no price record returns HTTP 404 with a message, not an empty success.

Access and cost

A free account includes 100 one-time credits and needs no payment card. Each successful request above uses one credit, so the worked example costs four.

After the credits, the catalog steps (expansions, singles, blueprints) are available from the Hobby plan, and the three price endpoints from the Business plan. The game lists are public. Current plans are on the pricing page, and the full field list for each source is on the pricing API, Cardmarket API and Cardtrader API pages.

If you start from a photo instead of an ID, the card scanner tutorial shows how to get the TCGPlayer productId first.

Get Your API Key

Explore catalog records across 60+ trading card games, with price, listing and sales-history data where available.

Start Building
trading card price APICardmarket APITCGPlayer pricesEuropean card pricesPokemon card pricesdeveloper guide