Documentation

Localized pricing: the markets array

Beta

Trading card prices are genuinely local. v2 replaces v1's single price field with a markets array.

The EU price of a card is its own real, observed price, not a US price converted into euros. To reflect that, v2 replaces v1's single price field with a markets array on each variant. There is one entry for each region you request, so you can compare regions in a single response.

Only NA is live today:Right now NA is the only region with data. The regions parameter and markets array are already shaped for multi-region pricing, but EU, UK, JP, and other regions will switch on later as their data matures — this page describes the shape you can build against today.

The markets object

PropertyTypeDescription
regionstringThe region this pricing is for. It matches a code you asked for, either a market code like NA or EU, or an ISO country code like MX or CA.
currencystringThe ISO 4217 currency (for example USD or EUR) that price and every periods value is quoted in. Market codes use the market's main currency; country codes use that country's local currency.
pricenumber | nullThe real, observed price in this region, in the currency above. A value of null means we have no local data for this region, and it is up to you whether to read another region you requested instead.
updated_atnumberWhen this price was last observed, as a Unix timestamp in seconds.
change_24h_pctnumber | nullPercent change in price over the last 24 hours for this region. In v1 this was called priceChange24hr.
periodsobjectPrice statistics grouped by time window (7d, 30d, 90d, 1y, and all_time). Only the windows you request are included.
price_historyarrayA time series of observed prices for this region, as { t, p } points. This is the same price history v1 returned, now scoped to each region.
Regions and the NA default:regions is optional. Leave it out and v2 defaults to North America (NA), which is the same US pricing v1 returned. Prices are never converted between currencies.
Primary market rule:markets[0], the first region in your regions list, is the primary market. Filtering with min_price and sorting with orderBy apply to this market only; the other markets are there for reference. There is no way to sort or filter on a blended figure across regions.
Null prices & fallback:A market's price is either the real price observed in that region or null. The server never fills in another region's price and never converts currencies for you. If you want a USD fallback, request NA as an extra region and read its entry, for example: markets[0].price ?? markets.find(m => m.region === "NA").price.

Requesting regions

One query parameter on /v2/cards controls which regions come back, in priority order.

regions
string
Optional
A comma-separated list of region codes, listed in priority order (not case sensitive). The first region is your primary market. Currently only NA returns data; the other codes are reserved for regions rolling out later. Each region beyond the first adds to the request cost.
Default: NA
NAEUUKJPOCELATAMOTHER…ISO country codes
Request cost:A single region costs the same as an equivalent v1 call. Each region beyond the first is a separate price lookup and adds a surcharge. See Request cost for the full breakdown.

Example

One card's NA pricing, the only region live today.

bash — request.sh
request.sh
curl "https://api.justtcg.com/v2/cards?card_id=pokemon-base-set-charizard-4&regions=na" \
  -H "x-api-key: tcg_your_api_key_here"
json — response.json (excerpt)
response.json (excerpt)
{
  "markets": [
    {
      "region": "NA",
      "currency": "USD",
      "price": 155.00,
      "updated_at": 1765635970,
      "change_24h_pct": -0.9,
      "periods": { "7d": { "change_pct": -2.4, "avg": 158.0, "min": 151.0, "max": 162.0 } },
      "price_history": [{ "t": 1765636400, "p": 155.0 }]
    }
  ]
}