Variant object
A variant is a specific condition × printing combination of a card, with its price and statistics.
Current production schema. Returned by every v1 endpoint.
Core
| Property | Type | Description |
|---|---|---|
| uuid | string | Stable, canonical identifier for the variant (UUID v5). Recommended as your primary key — see Identifiers. |
| id | string | Legacy human-readable slug (the variantId). Format: cardId_condition_printing. Still queryable, but no longer the recommended key. |
| condition | string | Condition of the card (e.g. 'Near Mint', 'Lightly Played'). |
| printing | string | Printing type (e.g. 'Normal', 'Foil', '1st Edition'). |
| language | string | Language of the card (e.g. 'English', 'Japanese'). Only recorded for non-English printings, so a missing value means English. Filter on it with the language parameter on /cards. |
| tcgplayerSkuId | string | TCGplayer SKU ID for this variant. |
| price | number | null | Current price in USD: the last price the market reported for this condition. null when there is no current market report; priceStatus says why. |
| lastUpdated | number | null | Unix timestamp (seconds) of when the price was last observed. For an expired variant this is when the last price was seen. |
| priceStatus | string | current: a market report is in effect. expired: the market stopped reporting this variant and the last price aged out (see thin markets), so price is null and lastKnownPrice carries the last observed value. unpriced: this condition has never had a price. |
| lastKnownPrice | number | null | The last observed price in USD when priceStatus is expired; null otherwise. The same value is the last point of the variant's price history. |
24-hour stats
| Property | Type | Description |
|---|---|---|
| priceChange24hr | number | null | Percentage price change over the last 24 hours. |
7-day stats
| Property | Type | Description |
|---|---|---|
| priceChange7d | number | null | Percentage price change over the last 7 days. |
| avgPrice | number | null | Average price over the last 7 days. |
| priceHistory | array | null | Array of {p, t} points over the requested priceHistoryDuration. Default 7d. |
| minPrice7d | number | null | Minimum price in the last 7 days. |
| maxPrice7d | number | null | Maximum price in the last 7 days. |
| stddevPopPrice7d | number | null | Population standard deviation of prices over the last 7 days. |
| covPrice7d | number | null | Coefficient of variation for prices over the last 7 days. |
| iqrPrice7d | number | null | Interquartile range of prices over the last 7 days. |
| trendSlope7d | number | null | Linear regression trend slope for prices over the last 7 days. |
| priceChangesCount7d | number | null | Count of distinct price changes in the last 7 days. |
30-day stats
| Property | Type | Description |
|---|---|---|
| priceChange30d | number | null | Percentage price change over the last 30 days. |
| avgPrice30d | number | null | Average price over the last 30 days. |
| priceHistory30d | array | null | Array of historical price points over 30 days. |
| minPrice30d | number | null | Minimum price in the last 30 days. |
| maxPrice30d | number | null | Maximum price in the last 30 days. |
| stddevPopPrice30d | number | null | Population standard deviation over the last 30 days. |
| covPrice30d | number | null | Coefficient of variation over the last 30 days. |
| iqrPrice30d | number | null | Interquartile range over the last 30 days. |
| trendSlope30d | number | null | Trend slope over the last 30 days. |
| priceChangesCount30d | number | null | Count of distinct price changes in the last 30 days. |
| priceRelativeTo30dRange | number | null | Position within the 30-day min/max range, 0..1. |
90-day stats
| Property | Type | Description |
|---|---|---|
| priceChange90d | number | null | Percentage price change over the last 90 days. |
| avgPrice90d | number | null | Average price over the last 90 days. |
| minPrice90d | number | null | Minimum price in the last 90 days. |
| maxPrice90d | number | null | Maximum price in the last 90 days. |
| stddevPopPrice90d | number | null | Population standard deviation over the last 90 days. |
| covPrice90d | number | null | Coefficient of variation over the last 90 days. |
| iqrPrice90d | number | null | Interquartile range over the last 90 days. |
| trendSlope90d | number | null | Trend slope over the last 90 days. |
| priceChangesCount90d | number | null | Count of distinct price changes in the last 90 days. |
| priceRelativeTo90dRange | number | null | Position within the 90-day min/max range, 0..1. |
Longer-term
| Property | Type | Description |
|---|---|---|
| minPrice1y | number | null | Minimum price in the last year. |
| maxPrice1y | number | null | Maximum price in the last year. |
| minPriceAllTime | number | null | Lowest price ever recorded for this variant. |
| minPriceAllTimeDate | string | null | ISO 8601 timestamp of the all-time minimum. |
| maxPriceAllTime | number | null | Highest price ever recorded for this variant. |
| maxPriceAllTimeDate | string | null | ISO 8601 timestamp of the all-time maximum. |
Thin markets:
priceis the last price the market recorded, never smoothed or clamped, so a rarely traded condition can carry one sale's price for a long time. A variant priced at $100 or more that goes 14 days without a reported price expires: price becomes null, priceStatus is "expired", and lastKnownPrice keeps the value that expired. History and statistics are untouched. Thin markets and price expiry covers syncing and how to judge confidence.Example
variant.json
{
"uuid": "a1b2c3d4-5e6f-5a7b-8c9d-0e1f2a3b4c5d",
"id": "pokemon-battle-academy-fire-energy-22-charizard-stamped-promo_near-mint",
"condition": "Near Mint",
"printing": "Normal",
"language": "English",
"tcgplayerSkuId": "1234567",
"price": 4.99,
"lastUpdated": 1743100261,
"priceStatus": "current",
"lastKnownPrice": null,
"priceChange24hr": 0.5,
"priceChange7d": -2.1
}