Historical pricing

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.
PeriodTierPlan
7d, 30d, 90d, 1y, all
Default is 7d; request longer windows explicitly.
Raw or graded
Examples: NEAR_MINT, PSA_10, BGS_9_5, AGGREGATED.
Pro+
History is gated; EU and graded tiers also require plan access.

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 higher.
  • EU card history requires EU market access.
  • Graded tiers such as PSA_10 and BGS_9_5 require graded data access.

Parameters

Path Parameters

id
string
PokeTrace card ID from /cards or /cards/:id.
019bff77-befa-771d-bab0-f5909f0a78c9
tier
string
Raw condition, graded tier, or EU aggregate tier.
PSA_10

Query Parameters

period
enum
History window. Supported values are 7d, 30d, 90d, 1y, and all.
30d
limit
number
Number of dated rows to return. Max 365, default 30.
30
cursor
string
Pagination cursor from pagination.nextCursor.
MjAyNi0wMS0yNQ==

Response fields

History Row

Core fields returned for US and EU history rows.

date
string
ISO date for the price row.
2026-01-27
source
string
Price source. Common values: ebay, tcgplayer, cardmarket, cardmarket_unsold.
ebay
avg
number | null
Main price value for the row. For EU active listings this may be a weighted median after grouping source/date rows.
5200
low / high
number | null
Lowest and highest observed value for the row. AGGREGATED CardMarket rows can return null.
4800 / 5600
saleCount
number | null
Observed sale/listing count where the source supports it.
3
approxSaleCount
boolean
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.

median3d / median7d / median30d
number | null
Rolling medians calculated from individual listings with anomalies excluded.
5120
avg1d / avg7d / avg30d
number | null
CardMarket Price Trend averages for AGGREGATED rows.
375
country
object
EU seller-country breakdown on condition and graded tiers.
country.DE.avg
language
object
Language breakdown. Usually nested under country; top-level language can appear when country is missing.
country.DE.language.EN.avg
pagination
object
hasMore, nextCursor, and count. Rows sharing the final date can be kept together across sources.
{ hasMore, nextCursor, count }

Examples

Fetch PSA 10 history
const 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
{
  "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.