Pokemon Card Price History API
Use this endpoint when you already know the card ID and need a time series for one raw or graded tier.
Endpoint
GET /cards/:id/prices/:tier/history
curl -H "X-API-Key: YOUR_KEY" \
"https://api.poketrace.com/v1/cards/019bff77.../prices/PSA_10/history?period=30d&limit=30"Returns dated rows grouped by source with avg, low, high, sale counts, rolling medians, optional EU breakdowns, and cursor pagination.
- Price history requires Pro or Scale.
- EU card history requires EU market access.
- Graded tiers such as PSA_10 and BGS_9_5 require graded data access.
Default is 7d; request longer windows explicitly.
Examples: NEAR_MINT, PSA_10, BGS_9_5, AGGREGATED.
History is gated; EU and graded tiers also require plan access.
Parameters
Path Parameters
PokeTrace card ID from /cards or /cards/:id.
019bff77-befa-771d-bab0-f5909f0a78c9
Raw condition, graded tier, or EU aggregate tier.
PSA_10
Query Parameters
History window. Supported values are 7d, 30d, 90d, 1y, and all.
30d
Number of dated rows to return. Max 365, default 30.
30
Pagination cursor from pagination.nextCursor.
MjAyNi0wMS0yNQ==
Response Fields
History Row
Core fields returned for US and EU history rows.
ISO date for the price row.
2026-01-27
Price source. Common values: ebay, tcgplayer, cardmarket, cardmarket_unsold.
ebay
Main price value for the row. For EU active listings this may be a weighted median after grouping source/date rows.
5200
Lowest and highest observed value for the row. AGGREGATED CardMarket rows can return null.
4800 / 5600
Observed sale/listing count where the source supports it.
3
True for sources where sold-listing counts can change after ingestion, currently eBay.
true
Trend and Breakdown Fields
Additional fields used for smoother charts and EU marketplace analysis.
Rolling medians calculated from individual listings with anomalies excluded.
5120
CardMarket Price Trend averages for AGGREGATED rows.
375
EU seller-country breakdown on condition and graded tiers.
country.DE.avg
Language breakdown. Usually nested under country; top-level language can appear when country is missing.
country.DE.language.EN.avg
hasMore, nextCursor, and count. Rows sharing the final date can be kept together across sources.
{ hasMore, nextCursor, count }
Examples
Fetch PSA 10 history
javascriptconst response = await fetch(
"https://api.poketrace.com/v1/cards/019bff77.../prices/PSA_10/history?period=30d&limit=30",
{ headers: { "X-API-Key": process.env.POKETRACE_API_KEY } },
)
const history = await response.json()
const chartPoints = history.data.map((row) => ({
x: row.date,
y: row.median7d ?? row.avg,
}))EU AGGREGATED response shape
json{
"data": [{
"date": "2026-01-27",
"source": "cardmarket",
"avg": 385,
"low": null,
"high": null,
"avg1d": 380,
"avg7d": 375,
"avg30d": 370
}],
"pagination": { "hasMore": false, "nextCursor": null, "count": 1 }
}When to Use It
Use /cards for search and current prices. Use price history only after the user opens one card and asks for a chart, alert threshold, valuation audit, or tier trend.
Source Behavior
US cards can return eBay sold-listing rows and TCGPlayer raw-condition rows. EU cards keep CardMarket Price Trend separate from CardMarket active-listing summaries.
Charting Rule
For noisy sold-listing sources, chart median7d or median30d when present and keep avg available as the raw daily signal.
Frequently Asked Questions
Can I request PSA 10 Pokemon card price history?
Yes. Use the card ID and tier PSA_10 on /cards/:id/prices/:tier/history. Half grades use underscores, for example BGS_9_5.
How is CardMarket history different from eBay history?
CardMarket AGGREGATED rows are Price Trend style values without saleCount, while cardmarket_unsold rows are active-listing summaries that can include condition, grade, country, and language breakdowns.