Prices API — Daily TCG Card Market Data
Prices
Section titled “Prices”Price endpoints for market movers, trends, and analytics. All prices are tracked per printing type (Normal and Foil/Holofoil).
Top Price Movers
Section titled “Top Price Movers”GET /v1/prices/top-moversAuthentication: API key required
Returns cards with the biggest price changes.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
game | string | Filter by game slug |
direction | string | up or down (default: up) |
period | string | 24h, 7d, or 30d (default: 24h) |
printing | string | Filter by Normal or Foil (optional) |
type | string | Filter by Cards or Sealed Products (optional) |
limit | integer | Number of results (default: 20, max: 50) |
Example:
# Top gainers in Pokemon todaycurl "https://api.tcgapi.dev/v1/prices/top-movers?game=pokemon&direction=up" \ -H "X-API-Key: YOUR_KEY"
# Biggest drops in Foil cards this weekcurl "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://..." } ]}Printing / Variant Types
Section titled “Printing / Variant Types”Each card can have multiple printing variants with separate pricing. The variant names vary by game:
Pokemon:
| Variant | Description |
|---|---|
Normal | Standard non-foil |
Holofoil | Holographic foil |
Reverse Holofoil | Reverse holographic pattern |
1st Edition | First edition printing |
Unlimited | Unlimited run printing |
Yu-Gi-Oh!:
| Variant | Description |
|---|---|
1st Edition | First edition printing |
Unlimited | Unlimited run printing |
Limited | Limited edition printing |
Magic: The Gathering:
| Variant | Description |
|---|---|
Normal | Standard non-foil |
Foil | Foil printing |
Flesh and Blood:
| Variant | Description |
|---|---|
Normal | Standard non-foil |
Rainbow Foil | Rainbow foil finish |
Cold Foil | Cold foil finish |
1st Edition Normal | First edition, non-foil |
1st Edition Rainbow Foil | First edition, rainbow foil |
1st Edition Cold Foil | First edition, cold foil |
Unlimited Edition Normal | Unlimited, non-foil |
Unlimited Edition Rainbow Foil | Unlimited, rainbow foil |
Lorcana:
| Variant | Description |
|---|---|
Normal | Standard non-foil |
Holofoil | Holographic foil |
Reverse Holofoil | Reverse holographic |
Use ?printing= on any price endpoint to filter by variant name (exact match).
Price Data Fields
Section titled “Price Data Fields”Every price object includes:
| Field | Type | Description |
|---|---|---|
printing | string | Variant name — Normal or Foil, or a named printing such as Holofoil, Reverse Holofoil, 1st Edition or Unlimited |
market_price | number | TCGPlayer market price (median of recent sales) |
market_price_as_of | string | null | UTC 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_price | number | null | Lowest verified listing price for this printing |
median_price | number | Median listing price across all sellers |
lowest_with_shipping | number | null | Lowest price including shipping for this printing |
buylist_price | number | Buylist market price (what stores pay) |
price_change_24h | number | Percentage change vs. yesterday |
price_change_7d | number | Percentage change vs. 7 days ago |
price_change_30d | number | Percentage change vs. 30 days ago |
last_updated_at | string | ISO 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
Section titled “Sealed Products”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) or4(case)- Listings show
condition: "Unopened"instead of Near Mint, etc.
Update Frequency
Section titled “Update Frequency”| Game Tier | Update 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) |