PokeTrace 2.0 è disponibileScopri cosa è cambiato
PokeTrace 2.0 è disponibileScopri cosa è cambiato

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. Add market=EU or market=US to read the linked card in that market.
PeriodTierPlan
7d, 30d, 90d, 1y, all
Free: 7d. Pro and Growth: up to 1y. all needs Scale or Business.
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 /v2/cards/:id/prices/:tier/history

curl -H "X-API-Key: YOUR_KEY" \
  "https://api.poketrace.com/v2/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.

  • Free plan: US history and raw conditions.
  • EU history, including ?market=EU on a US card ID, requires EU market access.
  • Graded tiers such as PSA_10 and BGS_9_5 require graded data access.
  • Free can request up to 7d, Pro and Growth up to 1y; all-time price history (period=all) needs Scale or Business.

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: 7d, 30d, 90d, 1y or all. Free gets 7d, Pro and Growth up to 1y, and all (all-time price history) needs Scale or Business. A longer period returns 403 UPGRADE_REQUIRED.
30d
limit
number
Number of dated rows to return. Max 365, default 30.
30
cursor
string
Pagination cursor from pagination.nextCursor.
MjAyNi0wMS0yNQ==
market
enum
Optional, since 2.0. US or EU. Reads the history of the linked card in that market through the same ID, so a US ID can return CardMarket history. Returns 404 when the card has no linked card in that market. EU requires a plan with EU access.
EU

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/v2/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 history through a US card ID
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.poketrace.com/v2/cards/019bff77-befa-771d-bab0-f5909f0a78c9/prices/AGGREGATED/history?market=EU&period=30d"
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 history can return eBay sold-listing rows and TCGPlayer raw-condition rows. EU history keeps CardMarket Price Trend separate from CardMarket active-listing summaries.

Each request returns one market. Without market= you get the market of the ID you pass; with market=US or market=EU you get the linked card in that market.

Prices stay in that market's currency (USD or EUR). A missing linked card returns 404.

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.