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.
How the Cardtrader API Works
Each endpoint returns the IDs needed for the next step.
List Games
/api/v2/cardtrader/gamesGet Cardtrader-supported games and their id values.
Get Expansions
/api/v2/cardtrader/expansions/:game_idUse the game_id to fetch expansions and their id values.
Get Blueprints
/api/v2/cardtrader/blueprints/:expansion_idUse the expansion_id to fetch blueprints (singles) and their id values.
Get Prices
/api/v2/cardtrader/prices/:blueprint_idUse the blueprint id to fetch the latest per-variant marketprices.
Cardtrader API Endpoints
Authenticated via x-api-key. Same shape under /api/v1/cardtrader/*.
/api/v2/cardtrader/gamesList Cardtrader-supported games. Each row carries id for the next step.
/api/v2/cardtrader/expansions/:game_idPaginated expansions for a Cardtrader game. Each row carries id (expansion).
/api/v2/cardtrader/blueprints/:expansion_idPaginated blueprints (singles) in an expansion. Each blueprint includes cross-refs: tcg_player_id, card_market_ids[], scryfall_id.
/api/v2/cardtrader/blueprint/:idSingle blueprint lookup by Cardtrader id.
/api/v2/cardtrader/prices/:blueprint_idLatest Cardtrader marketprices: per-variant min/max/avg pricing plus quantity and listings_count, keyed by {print_type}_{condition}.
Every Field We Expose
Field-by-field reference for every Cardtrader-source endpoint.
Games
GET /api/v2/cardtrader/gamesTop of the Cardtrader catalog tree. One row per supported game.
| Field | Type | Description |
|---|---|---|
| id | integer | Cardtrader game ID — use to fetch expansions. |
| name | string | Internal game slug. |
| display_name | string | Human-readable game name. |
Expansions
GET /api/v2/cardtrader/expansions/:game_idAll Cardtrader expansions for a game.
| Field | Type | Description |
|---|---|---|
| id | integer | Cardtrader expansion ID. |
| game_id | integer | Parent game ID. |
| code | string | Set code. |
| name | string | Expansion name. |
| last_blueprint_count | integer | Number of blueprints currently indexed for this expansion. |
| last_synced_at | ISO timestamp | Last time we refreshed this expansion from Cardtrader. |
Blueprints (singles)
GET /api/v2/cardtrader/blueprints/:expansion_idEvery Cardtrader blueprint (single) in an expansion. Each row carries cross-references to TCGPlayer, Cardmarket, and Scryfall.
| Field | Type | Description |
|---|---|---|
| id | integer | Cardtrader blueprint ID. |
| name | string | Card name. |
| expansion_id | integer | Parent expansion ID. |
| expansion_name | string | Parent expansion name. |
| expansion_code | string | Parent expansion code. |
| game_id | integer | Parent game ID. |
| category_id | integer | Cardtrader category ID. |
| rarity | string | Rarity, sourced from fixed_properties (game-specific keys collapsed). |
| collector_number | string | Collector number from fixed_properties. |
| tcg_player_id | integer | Matching TCGPlayer productId — cross-reference for bridging marketplaces. |
| card_market_ids | integer[] | Matching Cardmarket idProduct values (a Cardtrader blueprint may map to multiple Cardmarket products). |
| scryfall_id | string | Matching Scryfall card ID where available. |
| image_url | string | Hosted card image URL. |
Blueprint (lookup)
GET /api/v2/cardtrader/blueprint/:idSingle blueprint lookup by Cardtrader id. Same schema as the Blueprints list endpoint, returning one record.
| Field | Type | Description |
|---|---|---|
| (see Blueprints) | — | Identical schema to the Blueprints list endpoint above. |
Marketprices (per blueprint)
GET /api/v2/cardtrader/prices/:blueprint_idPer-variant Cardtrader marketprices. The variants object is keyed by `{print_type}_{condition}` (e.g. `foil_NM`, `normal_LP`).
| Field | Type | Description |
|---|---|---|
| blueprint_id | integer | Parent blueprint ID. |
| blueprint_name | string | Card name. |
| expansion_id | integer | Parent expansion ID. |
| game_id | integer | Parent game ID. |
| currency | string | ISO currency code (typically EUR). |
| variants.<key>.min | decimal | Minimum listed price for this print_type+condition pair. |
| variants.<key>.max | decimal | Maximum listed price for this variant. |
| variants.<key>.avg | decimal | Average listed price for this variant. |
| variants.<key>.quantity | integer | Total available quantity across all sellers for this variant. |
| variants.<key>.listings_count | integer | Number of distinct seller listings for this variant. |
Example Responses
Per-variant pricing in a flexible map; cross-marketplace IDs on every blueprint.
{
"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/..."
}
}{
"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.