Current prices
GET /v1/products/{productId}/prices returns a product's current prices from all three sources, keyed by finish.
curl https://public-api.cardnexus.com/v1/products/50212/prices \
-H "Authorization: Bearer cnk_live_4f2d8c91e5b34a7f9e6c2d1a8b5f7e3c"
{
"productId": 50212,
"pricesByFinish": {
"Standard": {
"cardmarket": {
"currency": "EUR",
"low": 38.90,
"mid": 44.50,
"high": 59.99,
"marketValue": 43.75,
"change24h": 0.4,
"change7d": -1.2,
"change30d": 5.7
},
"tcgplayer": {
"currency": "USD",
"low": 42.50,
"mid": 48.00,
"high": 64.99,
"marketValue": 47.20,
"change24h": 0.2,
"change7d": -0.8,
"change30d": 6.1
},
"cardnexus": {
"low": { "amount": 38.50, "currency": "EUR" },
"listingCount": 14,
"availableQuantity": 26,
"regions": {
"eu": {
"currency": "EUR",
"low": 38.50,
"listingCount": 12,
"availableQuantity": 23,
"byCondition": {
"NM": {
"low": 42.00,
"listingCount": 7,
"availableQuantity": 11,
"byLanguage": {
"de": { "low": 45.50, "listingCount": 2, "availableQuantity": 3 },
"en": { "low": 42.00, "listingCount": 5, "availableQuantity": 8 }
}
},
"LP": {
"low": 38.50,
"listingCount": 5,
"availableQuantity": 12,
"byLanguage": {
"en": { "low": 38.50, "listingCount": 5, "availableQuantity": 12 }
}
}
}
},
"na": {
"currency": "USD",
"low": 47.00,
"listingCount": 2,
"availableQuantity": 3,
"byCondition": {
"NM": {
"low": 47.00,
"listingCount": 2,
"availableQuantity": 3,
"byLanguage": {
"en": { "low": 47.00, "listingCount": 2, "availableQuantity": 3 }
}
}
}
}
}
}
},
"Foil": {
"cardmarket": {
"currency": "EUR",
"low": 72.00,
"mid": 81.50,
"high": 99.00,
"marketValue": 79.90,
"change24h": 0.1,
"change7d": 2.2,
"change30d": 3.1
}
}
}
}
pricesByFinish is keyed by the product's finishes (e.g. Standard, Foil) — the same values as the product's finishes array in GET /v1/products/{productId}. A source block is absent when it has no data, and a product with no prices and no live listings returns an empty pricesByFinish object.
The same three blocks appear on the product itself — pricesByFinish on GET /v1/products/{productId} and prices on sealed products carry this exact shape.
The cardmarket and tcgplayer blocks
The marketplace's most recent daily price snapshot. cardmarket prices are in EUR, tcgplayer prices in USD.
| Field | Type | Description |
|---|---|---|
currency |
string | EUR for cardmarket, USD for tcgplayer. |
low / mid / high |
number? | Lowest, median, and highest observed price, decimal major units. Absent when not observed. |
marketValue |
number? | Aggregate market price — the value shown as the canonical price on cardnexus.com. |
change24h / change7d / change30d |
number? | Percent change of marketValue vs. that point in the past. null when there's not enough history. |
byCondition |
object? | Per-condition price detail, present when condition-level data is available for this marketplace. Each condition can carry low, listingCount, availableQuantity, and a per-language byLanguage breakdown. |
The cardnexus block
The listings live on the CardNexus marketplace at the moment of the request. The top level is the marketplace-wide view; regions breaks the same numbers down per market region, each in its region's currency.
| Field | Type | Description |
|---|---|---|
low |
object | The cheapest live listing for this finish anywhere on the marketplace, converted to EUR at the current exchange rate: { "amount": 38.50, "currency": "EUR" }. |
listingCount |
number | How many live listings the finish has, across every region. |
availableQuantity |
number | Total quantity for sale across those listings. |
regions |
object | The same numbers per market region, keyed eu and na. A region with no live listings has no key. |
Each region:
| Field | Type | Description |
|---|---|---|
currency |
string | EUR for eu, USD for na. Every one of the region's prices is in this currency; listings from sellers in the region priced in another currency are converted into it at the current exchange rate. |
low |
number | The cheapest live listing from sellers in this region, decimal major units. |
listingCount |
number | How many live listings sellers in this region have. |
availableQuantity |
number | Total quantity for sale across those listings. |
byCondition |
object | The same three numbers per condition (NM, LP, MP, HP, DMG), each with a per-language byLanguage breakdown. |
Prices from one region are never mixed into the other region's.
Graded listings count toward the finish-level and region-level numbers but have no condition bucket, and a listing without a stored language counts toward its condition's totals but has no language bucket — so the buckets can add up to less than their parent's totals.
Rate limit
Requests count against the pricing-snapshot limit: 600 requests per hour. For prices across a whole game, use the prices feed instead of paging through products.
Related
- Price history — day-by-day prices for charts and trend analysis
- Recent sales — what the product actually sold for
- Prices feed — every product in a game, one download