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.

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.
Period
7d, 30d, 90d, 1y, all

Default is 7d; request longer windows explicitly.

Tier
Raw or graded

Examples: NEAR_MINT, PSA_10, BGS_9_5, AGGREGATED.

Plan
Pro+

History is gated; EU and graded tiers also require plan 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

javascript
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

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.