Skip to content

Prices API — Daily TCG Card Market Data

Price endpoints for market movers, trends, and analytics. All prices are tracked per printing type (Normal and Foil/Holofoil).

GET /v1/prices/top-movers

Authentication: API key required

Returns cards with the biggest price changes.

Query Parameters:

ParameterTypeDescription
gamestringFilter by game slug
directionstringup or down (default: up)
periodstring24h, 7d, or 30d (default: 24h)
printingstringFilter by Normal or Foil (optional)
typestringFilter by Cards or Sealed Products (optional)
limitintegerNumber of results (default: 20, max: 50)

Example:

Terminal window
# Top gainers in Pokemon today
curl "https://api.tcgapi.dev/v1/prices/top-movers?game=pokemon&direction=up" \
-H "X-API-Key: YOUR_KEY"
# Biggest drops in Foil cards this week
curl "https://api.tcgapi.dev/v1/prices/top-movers?direction=down&period=7d&printing=Foil" \
-H "X-API-Key: YOUR_KEY"

Response:

{
"data": [
{
"card_id": 12345,
"name": "Charizard ex",
"set_name": "Obsidian Flames",
"game_name": "Pokemon",
"product_type": "Cards",
"foil_only": 0,
"printing": "Normal",
"market_price": 24.99,
"market_price_as_of": "2026-02-19",
"price_change": 15.5,
"image_url": "https://..."
}
]
}

Each card can have multiple printing variants with separate pricing. The variant names vary by game:

Pokemon:

VariantDescription
NormalStandard non-foil
HolofoilHolographic foil
Reverse HolofoilReverse holographic pattern
1st EditionFirst edition printing
UnlimitedUnlimited run printing

Yu-Gi-Oh!:

VariantDescription
1st EditionFirst edition printing
UnlimitedUnlimited run printing
LimitedLimited edition printing

Magic: The Gathering:

VariantDescription
NormalStandard non-foil
FoilFoil printing

Flesh and Blood:

VariantDescription
NormalStandard non-foil
Rainbow FoilRainbow foil finish
Cold FoilCold foil finish
1st Edition NormalFirst edition, non-foil
1st Edition Rainbow FoilFirst edition, rainbow foil
1st Edition Cold FoilFirst edition, cold foil
Unlimited Edition NormalUnlimited, non-foil
Unlimited Edition Rainbow FoilUnlimited, rainbow foil

Lorcana:

VariantDescription
NormalStandard non-foil
HolofoilHolographic foil
Reverse HolofoilReverse holographic

Use ?printing= on any price endpoint to filter by variant name (exact match).

Every price object includes:

FieldTypeDescription
printingstringVariant name — Normal or Foil, or a named printing such as Holofoil, Reverse Holofoil, 1st Edition or Unlimited
market_pricenumberTCGPlayer market price (median of recent sales)
market_price_as_ofstring | nullUTC date (YYYY-MM-DD) TCGPlayer last reported this market price. Older than the other fields when the printing has had no market price recently — the last price is kept and dated here rather than dropped
low_pricenumber | nullLowest verified listing price for this printing
median_pricenumberMedian listing price across all sellers
lowest_with_shippingnumber | nullLowest price including shipping for this printing
buylist_pricenumberBuylist market price (what stores pay)
price_change_24hnumberPercentage change vs. yesterday
price_change_7dnumberPercentage change vs. 7 days ago
price_change_30dnumberPercentage change vs. 30 days ago
last_updated_atstringISO timestamp of last price update

Price change values are percentages (e.g., 15.5 means +15.5%). A null value means insufficient data to compute the change.

last_updated_at says when we last checked the printing against TCGPlayer; market_price_as_of says when TCGPlayer last reported the market price itself. They differ when a printing has stopped selling: TCGPlayer then reports no market price, and we keep the last one it did report, dated by market_price_as_of. Compare it with today to decide whether a price is too old for your use. It is null when market_price is null or 0, or when TCGPlayer has reported no market price for the printing in the past year.

Every value is per printing. On cards with several foil-type printings, low_price and lowest_with_shipping come from that printing’s own listings and are null when none are available, rather than a value blended across printings.

Sealed products (booster boxes, tins, ETBs, cases) have their own pricing tracked separately. Filter with ?type=Sealed Products on search and set endpoints.

Sealed products are identified by:

  • product_type: "Sealed Products"
  • shipping_category_id: 3 (box) or 4 (case)
  • Listings show condition: "Unopened" instead of Near Mint, etc.
Game TierUpdate Schedule
Tier 3 (Pokemon, Magic, Yu-Gi-Oh)Daily at 2 AM EST
Tier 2 (One Piece, Lorcana, etc.)Daily at 3 AM EST
Tier 1 (Dragon Ball, Vanguard, etc.)Monday + Thursday
Tier 0 (niche games)Weekly (Sunday)