Slab pricing
Pokemon Graded Card Price API
| Graders | Tier format | Plan |
|---|---|---|
PSA, BGS, CGC, SGC, ACE, TAG Returned where market data exists. | COMPANY_GRADE Half grades use underscores: BGS_9_5. | Pro+ Graded data requires Pro or higher. |
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 higher.
- Sold listing detail for comps requires Scale.
- Use gradedOptions from the card response before requesting history for a tier.
Parameters
Discovery Parameters
has_graded boolean | Filter /cards to records with graded price data. true |
market enum | US for eBay graded sold data, EU for CardMarket active graded listings. US |
search string | Find graded candidates by name before fetching detail. charizard |
cardmarket_ids / tcgplayer_ids csv | Match external product IDs before checking gradedOptions. 83356 |
Tier Parameters
PSA_10 tier | PSA grade 10 tier used for current prices, history, and comps. /prices/PSA_10/history |
BGS_9_5 tier | BGS 9.5 half-grade tier using underscore notation. /prices/BGS_9_5/history |
CGC_10 / SGC_9_5 / ACE_10 / TAG_10 tier | 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.
hasGraded boolean | True when the card has at least one graded tier after plan filtering. true |
gradedOptions string[] | Available graded tier keys for the card. ["PSA_10", "BGS_9_5"] |
conditionOptions string[] | Available raw tiers for comparing slab premium. ["NEAR_MINT", "LIGHTLY_PLAYED"] |
topPrice number | object | null | Highest representative price depending on response surface. 5200 |
totalSaleCount number | Aggregate count used for sorting and confidence displays. 148 |
Price Locations
Where graded tiers appear in API responses.
prices.ebay.PSA_10 object | US graded sold-listing aggregate from eBay. avg, low, high, saleCount |
prices.cardmarket_unsold.PSA_10 object | EU active-listing aggregate for a graded tier. country.DE.language.EN |
/prices/:tier/history endpoint | Historical chart rows for one graded tier. /prices/BGS_9_5/history?period=90d |
/listings?grader=PSA&grade=10 endpoint | Scale-only sold comps behind a graded valuation. /listings?grader=PSA&grade=10 |
Examples
const 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 : null{
"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.