Pokemon Graded Card Price API
Use graded tier keys when your product needs slab values instead of only raw card conditions like NEAR_MINT.
Endpoint
GET /cards/:id
curl -H "X-API-Key: YOUR_KEY" \
"https://api.poketrace.com/v1/cards/019bff77-befa-771d-bab0-f5909f0a78c9"Returns hasGraded, gradedOptions, topPrice, totalSaleCount, and nested price tiers such as prices.ebay.PSA_10 or prices.cardmarket_unsold.BGS_9_5.
- Graded prices require Pro or Scale.
- Sold listing detail for comps requires Scale.
- Use gradedOptions from the card response before requesting history for a tier.
Returned where market data exists.
Half grades use underscores: BGS_9_5.
Graded data requires Pro or Scale.
Parameters
Discovery Parameters
Filter /cards to records with graded price data.
true
US for eBay graded sold data, EU for CardMarket active graded listings.
US
Find graded candidates by name before fetching detail.
charizard
Match external product IDs before checking gradedOptions.
83356
Tier Parameters
PSA grade 10 tier used for current prices, history, and comps.
/prices/PSA_10/history
BGS 9.5 half-grade tier using underscore notation.
/prices/BGS_9_5/history
Other supported grader tiers use the same COMPANY_GRADE format.
CGC_10
Response Fields
Card-Level Graded Fields
Fields that tell your app whether graded data is available.
True when the card has at least one graded tier after plan filtering.
true
Available graded tier keys for the card.
["PSA_10", "BGS_9_5"]
Available raw tiers for comparing slab premium.
["NEAR_MINT", "LIGHTLY_PLAYED"]
Highest representative price depending on response surface.
5200
Aggregate count used for sorting and confidence displays.
148
Price Locations
Where graded tiers appear in API responses.
US graded sold-listing aggregate from eBay.
avg, low, high, saleCount
EU active-listing aggregate for a graded tier.
country.DE.language.EN
Historical chart rows for one graded tier.
/prices/BGS_9_5/history?period=90d
Scale-only sold comps behind a graded valuation.
/listings?grader=PSA&grade=10
Examples
Pick the first available graded tier
javascriptconst card = await fetch("https://api.poketrace.com/v1/cards/019bff77...", {
headers: { "X-API-Key": process.env.POKETRACE_API_KEY },
}).then((response) => response.json())
const tier = card.data.gradedOptions?.[0]
const ebayPrice = tier ? card.data.prices.ebay?.[tier]?.avg : nullGraded response fields
json{
"prices": {
"ebay": {
"PSA_10": { "avg": 5200, "low": 4800, "high": 5600, "saleCount": 47, "approxSaleCount": true },
"BGS_9_5": { "avg": 3800, "low": 3400, "high": 4200, "saleCount": 12, "approxSaleCount": true }
}
},
"gradedOptions": ["PSA_10", "PSA_9", "BGS_9_5", "CGC_9"],
"conditionOptions": ["NEAR_MINT", "LIGHTLY_PLAYED"],
"hasGraded": true,
"topPrice": 5200
}Tier Naming
The API stores graded tiers as uppercase grader plus grade. Replace decimal points with underscores, so BGS 9.5 becomes BGS_9_5.
US vs EU Graded Data
US graded values come from eBay sold-listing aggregates. EU graded values can appear under cardmarket_unsold because CardMarket graded data is active-listing inventory.
Raw Comparison
Compare NEAR_MINT with PSA_10, PSA_9, or BGS_9_5 to estimate slab premium, but keep source and market separate in the UI.
Frequently Asked Questions
Which Pokemon card graders does the API support?
The API supports PSA, BGS, CGC, SGC, ACE, and TAG tier keys where market data is available.
How do I request a half grade like BGS 9.5?
Use an underscore in the tier name. BGS 9.5 is BGS_9_5, so the history path is /cards/:id/prices/BGS_9_5/history.