Get prices
Every current quote for one card: marketplace, graded and per-language, in one call.
The same quotes as the card's prices, gradedPrices and languagePrices, without the rest of the card.
meta.priced, meta.graded and meta.languages say whether each list has anything, and data.priceStatus says why one is empty. An empty languages means the product page has not been read yet, not that nothing is for sale.
A localized printing whose marketplace product is the English one is answered with the English quotes: meta.pricesFrom is englishTwin and meta.englishId names the printing they belong to.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| cardIdrequired | string | A card id. An id retired by a set re-key keeps working and is reported in meta.movedFrom. |
Query parameters
Any other query parameter is a 400 naming it and listing these, so a misspelt one is never silently ignored. api_key is accepted on every endpoint as an alternative to the header.
| Parameter | Type | Description |
|---|---|---|
| source | string | Only this marketplace's quotes in prices. Case-insensitive.One of: Default: every source |
| language | string | Only this language's rows in languages. The languages Cardmarket sells in.One of: Default: every language |
| condition | string | Only this condition in each language row's conditions. The row's own low, lowNm and market still cover every condition.One of: Default: every condition |
| grader | string | With grade, only that slot in graded.One of: |
| grade | string | The other half of the slot. One of: |
Response
200 The card's quotes.
| Field | Type | Description |
|---|---|---|
| data | object | The quotes. |
| data.cardId | string | The card's current id. |
| data.prices | Price[] (Price reference) | Marketplace quotes. |
| data.graded | GradedPrice[] (GradedPrice reference) | Graded index quotes. |
| data.languages | LanguagePrice[] (LanguagePrice reference) | Cardmarket listings by language. |
| data.priceStatus | PriceStatus | Why each source does or does not quote the card. |
| data.priceStatus.cardmarket | string | null | priced, or the reason Cardmarket has no quote. Null when the card has not been matched yet.One of: |
| data.priceStatus.tcgplayer | string | null | priced, or the reason TCGplayer has no quote. Always null on Magic, which is priced through MTGJSON.One of: |
| data.priceStatus.graded | string | null | priced, or the reason the graded index has no quote. Null when the card has not been considered yet.One of: |
| meta | object | What came back. |
| meta.priced | boolean | prices is not empty. |
| meta.graded | boolean | graded is not empty. |
| meta.languages | boolean | languages is not empty. |
| meta.pricesFrom | string | Whose quotes these are. One of: |
| meta.englishId | string | Present with englishTwin: the printing quoted.Absent unless it applies. |
| meta.movedFrom | string | The retired id you sent. Absent unless it applies. |
| meta.source | string | Echo of source.Absent unless it applies. |
| meta.language | string | Echo of language.Absent unless it applies. |
| meta.condition | string | Echo of condition.Absent unless it applies. |
| meta.grader | string | Echo of grader.Absent unless it applies. |
| meta.grade | string | Echo of grade.Absent unless it applies. |
Examples
Real responses from the production API, recorded on 2026-09-24 by the script that also checks every field above against them. Arrays are shown in full.
Every quote
curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6" \
-H "Authorization: Bearer $TCGGRAPH_API_KEY"const response = await fetch("https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6", {
headers: {
Authorization: `Bearer ${process.env.TCGGRAPH_API_KEY}`,
},
});
const body = await response.json();
if (!response.ok) throw new Error(`${body.error.code}: ${body.error.message}`);import os
import requests
response = requests.get(
"https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6",
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_API_KEY']}"},
)
body = response.json()
response.raise_for_status(){
"data": {
"cardId": "pkm_sv3pt5_6",
"prices": [
{
"source": "cardmarket",
"region": "EU",
"listType": "retail",
"finish": "foil",
"currency": "EUR",
"market": 8.62,
"low": 4,
"trend": 8.62,
"avg1": 7.03,
"avg7": 8.8,
"avg30": 8.47,
"updatedAt": "2026-09-24T07:34:30.239Z"
},
{
"source": "tcgplayer",
"region": "NA",
"listType": "retail",
"finish": "foil",
"currency": "USD",
"market": 8.79,
"low": 6,
"trend": null,
"avg1": null,
"avg7": null,
"avg30": null,
"updatedAt": "2026-09-24T07:19:35.232Z"
}
],
"graded": [
{
"grader": "raw",
"grade": "ungraded",
"currency": "USD",
"price": 8.12,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "7",
"currency": "USD",
"price": 16.76,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "8",
"currency": "USD",
"price": 17.75,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "9",
"currency": "USD",
"price": 25,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "9.5",
"currency": "USD",
"price": 25,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "psa",
"grade": "10",
"currency": "USD",
"price": 125.65,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "bgs",
"grade": "10",
"currency": "USD",
"price": 163,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "cgc",
"grade": "10",
"currency": "USD",
"price": 34.46,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "sgc",
"grade": "10",
"currency": "USD",
"price": 39,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
}
],
"languages": [
{
"source": "cardmarket",
"language": "en",
"finish": "foil",
"currency": "EUR",
"low": 5,
"lowNm": 5,
"market": 5.5,
"offers": 2,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 5,
"offers": 2
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
},
{
"source": "cardmarket",
"language": "it",
"finish": "foil",
"currency": "EUR",
"low": 4,
"lowNm": 4,
"market": 5.49,
"offers": 47,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 4,
"offers": 41
},
{
"condition": "ex",
"low": 4.5,
"offers": 6
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
},
{
"source": "cardmarket",
"language": "de",
"finish": "foil",
"currency": "EUR",
"low": 7.5,
"lowNm": 7.5,
"market": 7.5,
"offers": 1,
"truncated": true,
"truncatedAbove": 7.5,
"conditions": [
{
"condition": "nm",
"low": 7.5,
"offers": 1
}
],
"updatedAt": "2026-09-13T03:15:59.919Z"
},
{
"source": "cardmarket",
"language": "fr",
"finish": "foil",
"currency": "EUR",
"low": 6,
"lowNm": 6,
"market": 6,
"offers": 1,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 6,
"offers": 1
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
}
],
"priceStatus": {
"cardmarket": "priced",
"tcgplayer": "priced",
"graded": "priced"
}
},
"meta": {
"priced": true,
"graded": true,
"languages": true,
"pricesFrom": "own"
}
}Near Mint German copies, and PSA 10
curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6?source=cardmarket&language=de&condition=nm&grader=psa&grade=10" \
-H "Authorization: Bearer $TCGGRAPH_API_KEY"const response = await fetch("https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6?source=cardmarket&language=de&condition=nm&grader=psa&grade=10", {
headers: {
Authorization: `Bearer ${process.env.TCGGRAPH_API_KEY}`,
},
});
const body = await response.json();
if (!response.ok) throw new Error(`${body.error.code}: ${body.error.message}`);import os
import requests
response = requests.get(
"https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6",
params={
"source": "cardmarket",
"language": "de",
"condition": "nm",
"grader": "psa",
"grade": "10",
},
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_API_KEY']}"},
)
body = response.json()
response.raise_for_status(){
"data": {
"cardId": "pkm_sv3pt5_6",
"prices": [
{
"source": "cardmarket",
"region": "EU",
"listType": "retail",
"finish": "foil",
"currency": "EUR",
"market": 8.62,
"low": 4,
"trend": 8.62,
"avg1": 7.03,
"avg7": 8.8,
"avg30": 8.47,
"updatedAt": "2026-09-24T07:34:30.239Z"
}
],
"graded": [
{
"grader": "psa",
"grade": "10",
"currency": "USD",
"price": 125.65,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
}
],
"languages": [
{
"source": "cardmarket",
"language": "de",
"finish": "foil",
"currency": "EUR",
"low": 7.5,
"lowNm": 7.5,
"market": 7.5,
"offers": 1,
"truncated": true,
"truncatedAbove": 7.5,
"conditions": [
{
"condition": "nm",
"low": 7.5,
"offers": 1
}
],
"updatedAt": "2026-09-13T03:15:59.919Z"
}
],
"priceStatus": {
"cardmarket": "priced",
"tcgplayer": "priced",
"graded": "priced"
}
},
"meta": {
"priced": true,
"graded": true,
"languages": true,
"pricesFrom": "own",
"source": "cardmarket",
"language": "de",
"condition": "nm",
"grader": "psa",
"grade": "10"
}
}A German printing, quoted as its English twin
curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6_de?source=cardmarket" \
-H "Authorization: Bearer $TCGGRAPH_API_KEY"const response = await fetch("https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6_de?source=cardmarket", {
headers: {
Authorization: `Bearer ${process.env.TCGGRAPH_API_KEY}`,
},
});
const body = await response.json();
if (!response.ok) throw new Error(`${body.error.code}: ${body.error.message}`);import os
import requests
response = requests.get(
"https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6_de",
params={
"source": "cardmarket",
},
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_API_KEY']}"},
)
body = response.json()
response.raise_for_status(){
"data": {
"cardId": "pkm_sv3pt5_6_de",
"prices": [
{
"source": "cardmarket",
"region": "EU",
"listType": "retail",
"finish": "foil",
"currency": "EUR",
"market": 8.62,
"low": 4,
"trend": 8.62,
"avg1": 7.03,
"avg7": 8.8,
"avg30": 8.47,
"updatedAt": "2026-09-24T07:34:30.239Z"
}
],
"graded": [
{
"grader": "raw",
"grade": "ungraded",
"currency": "USD",
"price": 8.12,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "7",
"currency": "USD",
"price": 16.76,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "8",
"currency": "USD",
"price": 17.75,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "9",
"currency": "USD",
"price": 25,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "any",
"grade": "9.5",
"currency": "USD",
"price": 25,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "psa",
"grade": "10",
"currency": "USD",
"price": 125.65,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "bgs",
"grade": "10",
"currency": "USD",
"price": 163,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "cgc",
"grade": "10",
"currency": "USD",
"price": 34.46,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
},
{
"grader": "sgc",
"grade": "10",
"currency": "USD",
"price": 39,
"salesVolume": 370,
"updatedAt": "2026-09-23T09:20:51.748Z"
}
],
"languages": [
{
"source": "cardmarket",
"language": "en",
"finish": "foil",
"currency": "EUR",
"low": 5,
"lowNm": 5,
"market": 5.5,
"offers": 2,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 5,
"offers": 2
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
},
{
"source": "cardmarket",
"language": "it",
"finish": "foil",
"currency": "EUR",
"low": 4,
"lowNm": 4,
"market": 5.49,
"offers": 47,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 4,
"offers": 41
},
{
"condition": "ex",
"low": 4.5,
"offers": 6
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
},
{
"source": "cardmarket",
"language": "de",
"finish": "foil",
"currency": "EUR",
"low": 7.5,
"lowNm": 7.5,
"market": 7.5,
"offers": 1,
"truncated": true,
"truncatedAbove": 7.5,
"conditions": [
{
"condition": "nm",
"low": 7.5,
"offers": 1
}
],
"updatedAt": "2026-09-13T03:15:59.919Z"
},
{
"source": "cardmarket",
"language": "fr",
"finish": "foil",
"currency": "EUR",
"low": 6,
"lowNm": 6,
"market": 6,
"offers": 1,
"truncated": true,
"truncatedAbove": 6.26,
"conditions": [
{
"condition": "nm",
"low": 6,
"offers": 1
}
],
"updatedAt": "2026-09-24T02:51:27.427Z"
}
],
"priceStatus": {
"cardmarket": "priced",
"tcgplayer": "priced",
"graded": "priced"
}
},
"meta": {
"priced": true,
"graded": true,
"languages": true,
"pricesFrom": "englishTwin",
"englishId": "pkm_sv3pt5_6",
"source": "cardmarket"
}
}Errors
Every error has the same body; switch on error.code. Any endpoint can also answer 401, 402, 403 or 429 for reasons of key, plan or rate; those are on Errors.
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | A parameter this endpoint does not take, or a value outside a parameter's list. |
| 404 | not_found | No card has that id. |
`lang` instead of `language`
curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6?lang=de" \
-H "Authorization: Bearer $TCGGRAPH_API_KEY"const response = await fetch("https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6?lang=de", {
headers: {
Authorization: `Bearer ${process.env.TCGGRAPH_API_KEY}`,
},
});
const body = await response.json();
if (!response.ok) throw new Error(`${body.error.code}: ${body.error.message}`);import os
import requests
response = requests.get(
"https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6",
params={
"lang": "de",
},
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_API_KEY']}"},
)
body = response.json()
response.raise_for_status(){
"error": {
"code": "invalid_request",
"message": "Unknown parameter \"lang\".",
"details": {
"field": "lang",
"allowed": [
"source",
"language",
"condition",
"grader",
"grade"
],
"docs": "https://tcggraph.com/docs/rest/get-prices"
}
}
}Unknown id
curl "https://api.tcggraph.com/v1/prices/pkm_nope_1" \
-H "Authorization: Bearer $TCGGRAPH_API_KEY"const response = await fetch("https://api.tcggraph.com/v1/prices/pkm_nope_1", {
headers: {
Authorization: `Bearer ${process.env.TCGGRAPH_API_KEY}`,
},
});
const body = await response.json();
if (!response.ok) throw new Error(`${body.error.code}: ${body.error.message}`);import os
import requests
response = requests.get(
"https://api.tcggraph.com/v1/prices/pkm_nope_1",
headers={"Authorization": f"Bearer {os.environ['TCGGRAPH_API_KEY']}"},
)
body = response.json()
response.raise_for_status(){
"error": {
"code": "not_found",
"message": "No card with id \"pkm_nope_1\"."
}
}