PokeTrace 2.0 ya está aquíMira qué ha cambiado
PokeTrace 2.0 ya está aquíMira qué ha cambiado

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.