Cardtrader API

Cardtrader API Documentation

Per-variant European marketplace pricing — min, max, avg with quantity and listings count, broken down by print type and condition. Cross-references TCGPlayer, Cardmarket and Scryfall.

Chainable Workflow

How the Cardtrader API Works

Each endpoint returns the IDs needed for the next step.

1

List Games

/api/v2/cardtrader/games

Get Cardtrader-supported games and their id values.

2

Get Expansions

/api/v2/cardtrader/expansions/:game_id

Use the game_id to fetch expansions and their id values.

3

Get Blueprints

/api/v2/cardtrader/blueprints/:expansion_id

Use the expansion_id to fetch blueprints (singles) and their id values.

4

Get Prices

/api/v2/cardtrader/prices/:blueprint_id

Use the blueprint id to fetch the latest per-variant marketprices.

5 Endpoints

Cardtrader API Endpoints

Authenticated via x-api-key. Same shape under /api/v1/cardtrader/*.

GET/api/v2/cardtrader/games
Public

List Cardtrader-supported games. Each row carries id for the next step.

GET/api/v2/cardtrader/expansions/:game_id
Hobby+

Paginated expansions for a Cardtrader game. Each row carries id (expansion).

GET/api/v2/cardtrader/blueprints/:expansion_id
Hobby+

Paginated blueprints (singles) in an expansion. Each blueprint includes cross-refs: tcg_player_id, card_market_ids[], scryfall_id.

GET/api/v2/cardtrader/blueprint/:id
Hobby+

Single blueprint lookup by Cardtrader id.

GET/api/v2/cardtrader/prices/:blueprint_id
Business+

Latest Cardtrader marketprices: per-variant min/max/avg pricing plus quantity and listings_count, keyed by {print_type}_{condition}.

Full Schemas

Every Field We Expose

Field-by-field reference for every Cardtrader-source endpoint.

Games

GET /api/v2/cardtrader/games
Public

Top of the Cardtrader catalog tree. One row per supported game.

FieldTypeDescription
idintegerCardtrader game ID — use to fetch expansions.
namestringInternal game slug.
display_namestringHuman-readable game name.

Expansions

GET /api/v2/cardtrader/expansions/:game_id
Hobby+

All Cardtrader expansions for a game.

FieldTypeDescription
idintegerCardtrader expansion ID.
game_idintegerParent game ID.
codestringSet code.
namestringExpansion name.
last_blueprint_countintegerNumber of blueprints currently indexed for this expansion.
last_synced_atISO timestampLast time we refreshed this expansion from Cardtrader.

Blueprints (singles)

GET /api/v2/cardtrader/blueprints/:expansion_id
Hobby+

Every Cardtrader blueprint (single) in an expansion. Each row carries cross-references to TCGPlayer, Cardmarket, and Scryfall.

FieldTypeDescription
idintegerCardtrader blueprint ID.
namestringCard name.
expansion_idintegerParent expansion ID.
expansion_namestringParent expansion name.
expansion_codestringParent expansion code.
game_idintegerParent game ID.
category_idintegerCardtrader category ID.
raritystringRarity, sourced from fixed_properties (game-specific keys collapsed).
collector_numberstringCollector number from fixed_properties.
tcg_player_idintegerMatching TCGPlayer productId — cross-reference for bridging marketplaces.
card_market_idsinteger[]Matching Cardmarket idProduct values (a Cardtrader blueprint may map to multiple Cardmarket products).
scryfall_idstringMatching Scryfall card ID where available.
image_urlstringHosted card image URL.

Blueprint (lookup)

GET /api/v2/cardtrader/blueprint/:id
Hobby+

Single blueprint lookup by Cardtrader id. Same schema as the Blueprints list endpoint, returning one record.

FieldTypeDescription
(see Blueprints)Identical schema to the Blueprints list endpoint above.

Marketprices (per blueprint)

GET /api/v2/cardtrader/prices/:blueprint_id
Business+

Per-variant Cardtrader marketprices. The variants object is keyed by `{print_type}_{condition}` (e.g. `foil_NM`, `normal_LP`).

FieldTypeDescription
blueprint_idintegerParent blueprint ID.
blueprint_namestringCard name.
expansion_idintegerParent expansion ID.
game_idintegerParent game ID.
currencystringISO currency code (typically EUR).
variants.<key>.mindecimalMinimum listed price for this print_type+condition pair.
variants.<key>.maxdecimalMaximum listed price for this variant.
variants.<key>.avgdecimalAverage listed price for this variant.
variants.<key>.quantityintegerTotal available quantity across all sellers for this variant.
variants.<key>.listings_countintegerNumber of distinct seller listings for this variant.

Example Responses

Per-variant pricing in a flexible map; cross-marketplace IDs on every blueprint.

GET /api/v2/cardtrader/blueprint/6
{
  "success": true,
  "data": {
    "id": 6,
    "name": "Ghalta, Primal Hunger",
    "game_id": 1,
    "category_id": 1,
    "expansion_id": 1,
    "expansion_name": "Game Night",
    "expansion_code": "gnt",
    "fixed_properties": {
      "mtg_rarity": "Rare",
      "collector_number": "044"
    },
    "tcg_player_id": 180397,
    "card_market_ids": [366585],
    "scryfall_id": "b2a93747-720a-...",
    "image_url": "https://cardtrader.com/..."
  }
}
GET /api/v2/cardtrader/prices/1
{
  "success": true,
  "data": {
    "blueprint_id": 1,
    "blueprint_name": "Rampaging Brontodon",
    "currency": "USD",
    "expansion_id": 4224,
    "game_id": 1,
    "total_listings": 41,
    "total_quantity": 88,
    "variant_count": 4,
    "variants": {
      "foil_NM": {
        "print_type": "foil",
        "condition": "NM",
        "min": 0.81,
        "max": 4.43,
        "avg": 2.17,
        "quantity": 47,
        "listings_count": 19
      },
      "foil_LP": { /* … */ }
    }
  }
}

Frequently Asked Questions

What is the Cardtrader API?

The Cardtrader API gives programmatic access to Cardtrader-sourced catalog data (games, expansions, blueprints) and marketprices data with per-variant min/max/avg pricing plus listings count. Chains by game_id → expansion_id → blueprint_id.

How are Cardtrader prices structured?

Each marketprices row carries a variants map keyed by `{print_type}_{condition}` (e.g. `foil_NM`, `normal_LP`). Each entry contains min, max, avg, quantity, and listings_count. Different blueprints have different variant sets depending on which print types and conditions are listed.

Can I bridge Cardtrader to TCGPlayer or Cardmarket?

Yes. Each Cardtrader blueprint exposes the matching tcg_player_id, card_market_ids[] (Cardmarket can have multiple), and scryfall_id where available, so you can pivot freely between the three marketplaces and Scryfall metadata.

What plan do I need?

The /games endpoint is public. Expansions, blueprints and single-blueprint lookup require a Hobby plan or higher. Marketprices require a Business plan or higher.

Why are URL params snake_case?

They mirror the underlying field names exactly (game_id, expansion_id, blueprint_id) so you can copy IDs straight from one response into the next URL without renaming.