Skip to content
pokemontcgapi.com

Price data

Price methodology

Which sources answer, what each one actually gives you, how old it is, and what basis it is quoted on. Read it before you put a valuation in front of a customer: the gap between a completed sale, a published guide figure and a composite median is the gap between a price and an opinion.

Last reviewed

Most price APIs return a number. This one returns a number with its paperwork attached: which source it came from, whether it is an asking price or a guide figure or a completed sale, which printing and which grade it applies to, how many observations are behind it, and the day it is for. That is not extra metadata for completeness — it is the difference between a figure you can defend when a customer challenges it and one you cannot.

Six sources answer, and they answer separately rather than being averaged into a single house price. A European asking price and an American guide figure disagree on almost every card, and that disagreement is information about two markets. Collapsing it would throw away the only thing that makes a price explainable.

Sources

Every source that can appear in a response, with the kind of figure it carries, the currency it is quoted in, and how old it is before we will serve it. The source value in the table is the literal string you will read on the row, so you can switch on it without guessing.

Price sources, cadence, basis, delay and whether they appear in responses
SourceWhat you getCadenceBasisMin delayIn responses
PTCG_INDEXOne comparable number per card, in EURDailyDERIVEDNoneServed
TCGPLAYERUS guide figures, low and market, in USDDailyGUIDE24 hoursServed
CARDMARKETEuropean asking prices per printing language, in EURDailyASKING24 hoursServed
CARDTRADEREuropean asking prices per language and condition, in EURDailyASKING24 hoursServed
PRICECHARTINGGuide figures plus graded medians by company and score, in USDDailyGUIDE24 hoursServed
EBAYAsking prices on graded slabs, by company and grade, in USDDailyASKING24 hoursServed
COMMUNITYSale prices reported by our own usersContinuousSOLDNoneAllowed, few rows
fx_rateECB daily reference rates, used to express the index in EURDailyNot a price row

What that adds up to, measured against the live API on 2026-09-02: over the 100 highest-index cards, responses carried 693 eBay rows, 691 PriceCharting, 416 Cardmarket, 172 CardTrader, 166 TCGplayer, and an index on 99 of the 100. One card of the hundred carried no price at all. eBay leads the count because a graded card has one row per company and grade — a single valuable card can come back with a dozen rows, one per slab that exists for it.

What each source actually is

PTCG_INDEXOurs

A daily composite: the median, in EUR, over every observation we hold for one card, language and printing. It is a statistic over inputs rather than a copy of any one of them, and every row carries sample_n — how many observations went into it, which on most cards is two or three rather than a crowd. Read that field before you trust the number.

Quoted with variant INDEX on basis DERIVED, with no delay, and graded observations excluded: the index is a raw-card figure. The same computation is denormalised onto every card as index_eur, preferring the English row and the highest printing, so sorting a search by value is one column read instead of a join.

Use it when you need one comparable number across a list. Use the per-source rows when you need a number you can defend to a specific customer in a specific market.

TCGPLAYERUS guide

Guide figures for the United States market: a LOW and a MARKET row in USD, on basis GUIDE, with the provenance string "TCGplayer" on each. GUIDE means a published reference figure, not a transaction you can point at.

This is the number an American buyer will quote back at you. On the same card it will usually sit apart from the European rows, and that gap is information about two markets rather than a discrepancy to average away.

CARDMARKETEuropean asking

The largest source we carry and the one with the most European depth: the lowest price, the 1, 7 and 30-day averages and the trend, per printing language, in EUR. History goes back to November 2024 and covers sealed products as well as single cards.

Basis ASKING — these are listings, not completed sales — with the provenance string "Cardmarket" on every row. If you are pricing for a European customer, this is the row to lead with, and the per-language split is the reason: an Italian printing and a German one are two different prices for what looks like the same card.

CARDTRADEREuropean asking

A second European view, aggregated to two figures per language and condition: the lowest and the market price, in EUR, on basis ASKING, provenance string "CardTrader". Never individual listings — no seller, no stock, no offer-by-offer table.

Its value is corroboration. Two independent European asking figures that agree are a much stronger signal than one, and when they disagree the spread is the honest answer to how liquid that card actually is.

PRICECHARTINGGuide and graded

A MARKET figure in USD plus MEDIAN_GRADED rows, several of which name a grading company — PSA, BGS, CGC or SGC — and a score. Basis GUIDE, provenance "PriceCharting" on every row.

These are the rows that make a graded card priceable at all: a PSA 10 and a PSA 8 of the same card are different objects with different markets, and a single "market price" for the card would describe neither.

EBAYAsking, not sold

Graded slabs only, and this is the part to read before you build on it: these are **asking** prices, not sale prices. The median of what sellers are currently asking, per grading company and grade, in USD. Variant MEDIAN_GRADED, basis ASKING, and the two together mean exactly what they say.

Do not average them with the PriceCharting rows on the same card. One is what is being asked today, the other is a guide figure built on history; combining them produces a number that answers no question anybody has.

COMMUNITYFirst-party

Observations submitted by our own users under our terms — sale prices they got, offers they saw. Mapped to basis SOLD and served with no delay, because a number somebody handed us directly carries no waiting period.

Nothing is coming back from this source yet: across the 100 highest-index cards, measured on 2026-08-27, zero COMMUNITY rows appeared. The pipe exists ahead of the water. When rows do arrive they will never be labelled as a marketplace price — a number a collector reported is not a number a marketplace published, and merging the two would make both useless.

fx_rateInput, not output

Not a price source and never emitted as a price row: one row per currency holding the European Central Bank daily reference rate, stored with its date.

It has exactly one job — turning USD observations into EUR so the composite index can be a single comparable number per card. Every other figure keeps the currency it was quoted in, and no endpoint accepts a currency parameter.

What a price row looks like

The disclosure is not a page on this website, it is a field in the response. Every row carries its own source, basis, capture date and provenance string, so you can print the attribution next to the number in your own product without asking us where it came from. These three rows are copied verbatim out of GET /v1/cards/base1-4?include=prices on 2026-09-02.

rows from the prices array of one card
{
  "source": "TCGPLAYER",
  "variant": "MARKET",
  "basis": "GUIDE",
  "amount": 800.43,
  "currency": "USD",
  "locale": "en",
  "condition": null,
  "printing": "HOLOFOIL",
  "grading": null,
  "as_of": "2026-07-30",
  "sample_n": null,
  "provenance": "TCGplayer"
}

basis

A serious buyer needs to know whether they are looking at a sale, a guide or a statistic. Conflating them is how a valuation ends up 30% high.

Meaning of the basis field
ValueMeaning
SOLDA completed transaction. Someone paid this. Only COMMUNITY rows are quoted on it.
GUIDEA published price guide figure computed by the upstream from its own data.
DERIVEDComputed by us from rows we hold. Only PTCG_INDEX is quoted on this basis.

The schema also defines ASKING. Nothing emits it today, so you will not see it.

variant

Which series the number belongs to. Rolling averages are passed through as the upstream publishes them — we do not recompute somebody else’s average and keep their label on it.

Meaning of the variant field
ValueMeaning
LOWThe lowest figure the upstream publishes for that series.
MARKETThe upstream market figure, where the upstream defines one.
MEDIAN_GRADEDMedian for a graded series. Where we hold the grading company and score, the row carries them.
INDEXOur composite, one row per card, language and printing. See PTCG_INDEX below.
AVG_7D / AVG_30DRolling averages, passed through as the upstream publishes them. Mapped by the sync; none came back in the sample we measured for this page.

Graded medians are the bulk of what comes back on an old card: 435 of the 731 rows in the 100-card sample above.

One field deserves a warning of its own. On a PTCG_INDEX row, sample_n is the number of observations behind the median and nothing else. On an upstream row it is a count the upstream published next to its own figure, and it is frequently null — do not read it as a sample size we computed, and do not compare it across sources.

Currency

Every figure is served in the currency it was quoted in, and no endpoint accepts a currency parameter: nothing is converted on its way out. The one conversion that happens is internal — the composite index is expressed in EUR using the daily European Central Bank reference rate, stored with its own date. A converted price with an unknown rate date is a number with an unknown error bar, so the rate keeps its date.

What we do not resell

The useful half of any data licence is the list of things it rules out. Here is ours, so you know before you build rather than after.

  • Individual listingsNo seller names, no per-offer prices, no stock levels, no reputation scores. Aggregates only. Copying a marketplace listing table is the single clearest way to become a substitute for the marketplace.
  • Mirrored vendor field layoutsThere is no tcgplayer.prices object and no cardmarket block: every figure arrives in one flat array with its own source, basis and provenance, so your client reads one shape whatever the source is and gains a source without a migration. Cards also carry tcgplayer_id and cardmarket_id as cross-reference identifiers, for linking out rather than for pricing.
  • Prices in a bulk fileCatalogue snapshots exist on some plans — sets, cards, images, identifiers. Price rows are not in them, on any plan, at any price. Prices are served per card, through the API, and that is the only shape they come in.
  • Observations younger than their delayAn observation is not servable until it is older than the minimum delay on its source. The check runs per row as the response is built, not once at import, so what you read is always a settled figure.
  • A competing price API on top of oursYour plan lets you use prices inside your product, including commercially: show them to your users, price your inventory, charge for what you built. It does not let you redistribute them as data or resell them as a feed.

Corrections

If a figure looks wrong to you, it is worth a mail. Prices are reported per card with their capture date and provenance, so a report that names the card id and the source is usually enough for us to reproduce it in a minute — and if the mistake is ours it is corrected at the next daily refresh.

Rights holders

If you hold rights in data we are carrying and you want it removed, mail [email protected] with the source name from the table above. We act on the request within one business day, and the change is recorded on this page with the review date at the top.

Questions

Why are upstream prices delayed by 24 hours?
Because a price API is a reference, not a live order book, and the two are different products. The delay is stored per source and checked per row as the response is built, so what you read is always a settled figure rather than a number mid-flight. PTCG_INDEX and COMMUNITY carry no delay: the first is computed here, the second is reported to us directly.
Which number should I show a customer?
The one from the market they are in. A European buyer recognises the Cardmarket figure in EUR; an American buyer recognises the TCGplayer one in USD. PTCG_INDEX is the right choice when you need a single comparable number across a whole list — sorting a collection by value, ranking a set — and the wrong choice when somebody is about to pay, because it is a composite rather than a quote you can transact on.
Why do two sources disagree on the same card?
Because they are measuring different things, and that is the point of keeping them apart. An asking price is what a seller wants today, a guide figure is a published reference built on history, and a graded median is a different object entirely. We never average them behind your back into one number: every row names its own source and basis so you can decide which question you are answering.
Can I get prices as a bulk file?
No. Catalogue snapshots exist on some plans — sets, cards, images, identifiers — and prices are not in them, on any plan, at any price. Price rows are served per card through the API, which is where the per-row delay check runs.
What does the 24-hour delay mean for my product?
That a price you read today describes yesterday. For a collection tracker, a shop catalogue or a valuation that is exactly right — nobody prices a card on a figure that moved ten minutes ago. If your product needs the current second of a live order book, this API is the wrong tool and no plan changes that.
Can I resell the prices I get from your API?
No. You may use them inside your product, including a commercial one, under your plan. You may not redistribute them as a dataset or operate a competing price API on top of them. Everything else — showing them to your users, pricing your inventory with them, charging for the product you built — is included on every tier, trial included.

See the fields for yourself

Every row quoted on this page came back from the public API on 2026-09-02, with its provenance string attached. Nothing here is only true on the paid tiers.