/api/v1/onepiece/expansions/{id}/cards read:catalog 1
creditPage through one expansion’s cards. Equivalent to searching cards with `expansion.id:{id}`, but scoped by path so you can’t accidentally widen the query. Accepts the same `q`, `orderBy`, `distinct`, paging and `include` params. `language` is honoured but NOT defaulted here: an expansion id already names a language (`EB01` vs `EB01_ja`), so an English default would empty every Japanese set.
GET /api/v1/onepiece/expansions/sv3pt5/cards?page_size=10&include=prices These inputs are shared across all docs pages, so an id entered here carries over.
{
"success": true,
"data": [
{
"id": "OP01-064",
"name": "Alvida",
"number": "64",
"printed_number": "64",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064.small.r1.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064.large.r1.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064.large.r1.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454591",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064.small.r1.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064.large.r1.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064.large.r1.webp"
}
]
}
],
"type": "Character",
"cost": "2",
"power": "3000",
"attribute": "Strike",
"colors": [
"Blue"
],
"rules": [
"[DON!! x1] [When Attacking] You may trash 1 card from your hand: Return up to 1 of your opponent's Characters with a cost of 3 or less to the owner's hand."
],
"counter": "2000",
"subtypes": [
"Buggy Pirates"
],
"rarity": "Common",
"pricing": {
"currency": "USD",
"market": 0.17,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.17
},
{
"condition": "LP",
"price": 0.11
}
],
"graded": [
{
"company": "BGS",
"grade": "10",
"value": 458,
"low": 389.3,
"high": 526.7,
"confidence": "low",
"value_kind": "feed",
"sold_count": 0
},
{
"company": "CGC",
"grade": "10",
"value": 282,
"low": 239.7,
"high": 324.3,
"confidence": "low",
"value_kind": "feed",
"sold_count": 0
},
{
"company": "PSA",
"grade": "10",
"value": 173.5,
"low": 161.75,
"high": 263,
"confidence": "low",
"value_kind": "feed",
"sold_count": 7
},
{
"company": "PSA",
"grade": "9",
"value": 31.3,
"low": 20.15,
"high": 33.35,
"confidence": "med",
"value_kind": "blended",
"sold_count": 2
},
{
"company": "SGC",
"grade": "10",
"value": 212,
"low": 180.2,
"high": 243.8,
"confidence": "low",
"value_kind": "feed",
"sold_count": 0
}
],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "up",
"percent": 6.25
}
}
},
{
"id": "OP01-064vaa",
"name": "Alvida (altArt)",
"number": "64",
"printed_number": "64",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064vaa.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064vaa.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064vaa.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": null,
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064vaa.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064vaa.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-064vaa.large.webp"
}
]
}
],
"type": "Character",
"cost": "2",
"power": "3000",
"attribute": "Strike",
"colors": [
"Blue"
],
"rules": [
"[DON!! x1] [When Attacking] You may trash 1 card from your hand: Return up to 1 of your opponent's Characters with a cost of 3 or less to the owner's hand."
],
"counter": "2000",
"subtypes": [
"Buggy Pirates"
],
"rarity": "Common",
"pricing": {
"currency": "USD",
"market": 10.76,
"is_stale": false,
"conditions": [],
"graded": [],
"market_updated_at": "2026-06-15T02:47:10.800Z",
"trend_7d": {
"direction": "flat",
"percent": 0
}
}
},
{
"id": "OP01-063",
"name": "Arlong",
"number": "63",
"printed_number": "63",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-063.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-063.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-063.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454590",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-063.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-063.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-063.large.webp"
}
]
}
],
"type": "Character",
"cost": "4",
"power": "5000",
"attribute": "Slash",
"colors": [
"Blue"
],
"rules": [
"[DON!! x1] [Activate: Main] You may rest this Character: Choose 1 card from your opponent's hand; your opponent reveals that card. If the revealed card is an Event, place up to 1 card from your opponent's Life area at the bottom of the owner's deck."
],
"counter": "1000",
"subtypes": [
"Fish-Man",
"Arlong Pirates"
],
"rarity": "Uncommon",
"pricing": {
"currency": "USD",
"market": 0.14,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.14
},
{
"condition": "LP",
"price": 0.11
}
],
"graded": [],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "flat",
"percent": 0
}
}
},
{
"id": "OP01-116",
"name": "Artificial Devil Fruit SMILE",
"number": "116",
"printed_number": "116",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-116.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-116.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-116.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454660",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-116.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-116.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-116.large.webp"
}
]
}
],
"type": "Event",
"cost": "2",
"colors": [
"Purple"
],
"rules": [
"[Main] Look at 5 cards from the top of your deck; play up to 1 {SMILE} type Character card with a cost of 3 or less. Then, place the rest at the bottom of your deck in any order.",
"[Trigger] Activate this card's [Main] effect."
],
"subtypes": [
"Animal Kingdom Pirates",
"SMILE"
],
"rarity": "Uncommon",
"pricing": {
"currency": "USD",
"market": 0.11,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.11
}
],
"graded": [],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "flat",
"percent": 0
}
}
},
{
"id": "OP01-032",
"name": "Ashura Doji",
"number": "32",
"printed_number": "32",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-032.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-032.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-032.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454553",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-032.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-032.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-032.large.webp"
}
]
}
],
"type": "Character",
"cost": "3",
"power": "4000",
"attribute": "Slash",
"colors": [
"Green"
],
"rules": [
"[DON!! x1] If your opponent has 2 or more rested Characters, this Character gains +2000 power."
],
"counter": "1000",
"subtypes": [
"Land of Wano",
"The Akazaya Nine"
],
"rarity": "Uncommon",
"pricing": {
"currency": "USD",
"market": 0.1,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.1
},
{
"condition": "MP",
"price": 0.01
}
],
"graded": [],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "down",
"percent": -9.09
}
}
},
{
"id": "OP01-107",
"name": "Babanuki",
"number": "107",
"printed_number": "107",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-107.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-107.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-107.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454643",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-107.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-107.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-107.large.webp"
}
]
}
],
"type": "Character",
"cost": "5",
"power": "7000",
"attribute": "Ranged",
"colors": [
"Purple"
],
"counter": "1000",
"subtypes": [
"Animal Kingdom Pirates",
"SMILE"
],
"rarity": "Common",
"pricing": {
"currency": "USD",
"market": 0.05,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.05
}
],
"graded": [],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "flat",
"percent": 0
}
}
},
{
"id": "OP01-105",
"name": "Bao Huang",
"number": "105",
"printed_number": "105",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-105.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-105.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-105.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454641",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-105.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-105.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-105.large.webp"
}
]
}
],
"type": "Character",
"cost": "2",
"power": "3000",
"attribute": "Wisdom",
"colors": [
"Purple"
],
"rules": [
"[On Play] Choose 2 cards from your opponent's hand; your opponent reveals those cards."
],
"counter": "1000",
"subtypes": [
"Animal Kingdom Pirates",
"SMILE"
],
"rarity": "Common",
"pricing": {
"currency": "USD",
"market": 0.05,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.05
}
],
"graded": [],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "flat",
"percent": 0
}
}
},
{
"id": "OP01-090",
"name": "Baroque Works",
"number": "90",
"printed_number": "90",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-090.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-090.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-090.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454621",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-090.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-090.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-090.large.webp"
}
]
}
],
"type": "Event",
"cost": "1",
"colors": [
"Blue"
],
"rules": [
"[Main] Look at 5 cards from the top of your deck; reveal up to 1 {Baroque Works} type card other than [Baroque Works] and add it to your hand. Then, place the rest at the bottom of your deck in any order."
],
"subtypes": [
"Baroque Works"
],
"rarity": "Uncommon",
"pricing": {
"currency": "USD",
"market": 0.12,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.12
},
{
"condition": "LP",
"price": 0.11
}
],
"graded": [],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "flat",
"percent": 0
}
}
},
{
"id": "OP01-074",
"name": "Bartholomew Kuma (foil)",
"number": "74",
"printed_number": "74",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-074.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-074.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-074.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454604",
"variants": [
{
"name": "holofoil",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-074.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-074.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-074.large.webp"
}
]
}
],
"type": "Character",
"cost": "4",
"power": "5000",
"attribute": "Strike",
"colors": [
"Blue"
],
"rules": [
"[Blocker] (After your opponent declares an attack, you may rest this card to make it the new target of the attack.)",
"[On K.O.] Play up to 1 [Pacifista] with a cost of 4 or less from your hand."
],
"counter": "1000",
"subtypes": [
"The Seven Warlords of the Sea",
"Revolutionary Army"
],
"rarity": "Rare",
"pricing": {
"currency": "USD",
"market": 0.21,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.21
},
{
"condition": "LP",
"price": 0.2
}
],
"graded": [
{
"company": "BGS",
"grade": "10",
"value": 129,
"low": 109.65,
"high": 148.35,
"confidence": "low",
"value_kind": "feed",
"sold_count": 0
},
{
"company": "CGC",
"grade": "10",
"value": 79,
"low": 67.15,
"high": 90.85,
"confidence": "low",
"value_kind": "feed",
"sold_count": 0
},
{
"company": "PSA",
"grade": "10",
"value": 99.17,
"low": 84.29,
"high": 114.05,
"confidence": "low",
"value_kind": "feed",
"sold_count": 0
},
{
"company": "SGC",
"grade": "10",
"value": 60,
"low": 51,
"high": 69,
"confidence": "low",
"value_kind": "feed",
"sold_count": 0
}
],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "down",
"percent": -4.55
}
}
},
{
"id": "OP01-019",
"name": "Bartolomeo",
"number": "19",
"printed_number": "19",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-019.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-019.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-019.large.webp"
}
],
"expansion": {
"id": "OP01",
"name": "Romance Dawn",
"total": 121,
"language": "English",
"language_code": "en",
"series": "One Piece",
"code": "OP01",
"printed_total": 121,
"release_date": "2022/12/02",
"logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/OP01.logo.png"
},
"language": "English",
"language_code": "en",
"tcgplayer_id": "454542",
"variants": [
{
"name": "normal",
"images": [
{
"type": "front",
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-019.small.webp",
"medium": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-019.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/OP01-019.large.webp"
}
]
}
],
"type": "Character",
"cost": "2",
"power": "2000",
"attribute": "Special",
"colors": [
"Red"
],
"rules": [
"[Blocker] (After your opponent declares an attack, you may rest this card to make it the new target of the attack.)",
"[DON!! x2] [Opponent's Turn] This Character gains +3000 power."
],
"counter": "1000",
"subtypes": [
"Supernovas",
"Barto Club"
],
"rarity": "Common",
"pricing": {
"currency": "USD",
"market": 0.08,
"is_stale": false,
"conditions": [
{
"condition": "NM",
"price": 0.08
}
],
"graded": [],
"market_updated_at": "2026-09-21T03:37:55.911Z",
"trend_7d": {
"direction": "flat",
"percent": 0
}
}
}
],
"page": 1,
"page_size": 10,
"total_count": 200,
"language": "all"
}curl -X GET 'https://service.rip.fun/api/v1/onepiece/expansions/sv3pt5/cards?page_size=10&include=prices' \ -H 'X-API-Key: rip_…'
| Field | Type | Required | Description |
|---|---|---|---|
q | string | — | Advanced search, e.g. `name:char*`, `(subtypes:mega OR subtypes:vmax)`, `-types:water`, `hp:[150 TO *]`, `expansion.id:sv1`; on One Piece, the gameplay fields too — `colors:Black cost:[1 TO 3] type:Character`. Capped at 512 characters, 20 terms and 5 levels of parentheses — a generated filter reaches those long before a hand-typed one does. Unknown fields return 400 with a suggestion. Full grammar + field list: see the Search & filtering guide. |
language | string | — | Language code, or a comma list. **Defaults to `en`**: every card exists once per printed language, so an unfiltered list interleaves two catalogs. Pass `language=all` for every language, or `language=ja`. The applied value comes back in the envelope. A `language:`, `id:` or `expansion.id:` term in `q` already pins the language, so the default steps aside. |
orderBy | string | — | Comma list; `-` prefix = DESC, e.g. `-release_date`. Max 3 keys. Cards sort on `name`, `number`, `rarity`, `raw_price`/`market_price`, `release_date`, `expansion.id`, `id` (plus `hp` on Pokémon and `cost`, `power`, `counter`, `life` on One Piece). Missing values sort LAST in both directions, and every sort carries a unique `id` tiebreak, so paging a sorted result set can neither skip nor repeat a row. |
distinct | string | — | Set to `code` to return one row per card rather than one per printing, and to make `total_count` count cards. Without it a page of 30 is ~17 cards and a code whose printings straddle a page boundary appears on both. The row kept is the base printing; filters that vary BETWEEN printings of a code (`rarity`, `raw_price`, `is_holo`) do not combine with it — every gameplay field does. |
page / page_size | number | — | Pagination. `page` ≥ 1 (default 1), `page_size` 1–100 (default 100, `pageSize` also accepted). Out-of-range values are rejected, never clamped. `page × page_size` capped at 10,000, so narrow with `q` to go deeper. Always compare `total_count` against the rows you received — 100 is a cap, not a promise, and a truncated page looks identical to a complete one. Collections you might assume fit in a single call do not: there are more than 100 One Piece expansions, so an unpaginated `/expansions` omits the newest sets and everything you would have walked from them. |
select | string | — | Comma list of top-level fields to keep (`id` always included). Trims response size and does not change the credit cost. |
include | string | — | Set to `prices` to embed the pricing object on every returned object. **No surcharge** — metering is a flat 1 credit per request whatever the response carries, so hydrating a page of 100 with prices costs the same as without, and strictly less than a second call per row. |
data)| Field | Description |
|---|---|
data[].id | Card id (variant printings carry a suffix, e.g. `…vh` for holofoil, `…vrh` for reverse holofoil) |
data[].name / supertype / subtypes | Card identity + classification |
data[].rarity / number / printed_number / artist | Print metadata |
data[].images[] | `{ type, small, medium, large }`, `type` always `front`. Use `small` for grids and `large` for detail views. Two caveats: `medium` is always an alias of `large` (only two sizes are stored), and on cards whose source supplied a single rendition `small` is an alias too — it points at the same file as `large`. Compare the two URLs before assuming `small` is cheap; where they differ it is roughly 6× smaller. |
data[].language / language_code | Card language: `English`/`en`, `Japanese`/`ja`. Each printing is its own object. |
data[].tcgplayer_id | TCGplayer product id for cross-referencing, or null when we don’t have one |
data[].expansion | Nested expansion object (id, name, series, total, release_date, logo, symbol, …) |
data[].variants[] | `{ name, images[] }`, one self-describing element per card printing |
data[].pricing | Present only with `include=prices` — and then always present, even where we hold nothing: `market` comes back `null` and the two arrays empty rather than the key being dropped. `{ currency, market, market_updated_at, is_stale, trend_7d, conditions[], graded[] }`, with every amount a **number** rather than a decimal string. `trend_7d` is `{ direction, percent }`, and it is the only trend window there is. See the Pricing data guide. |
data[].pricing.conditions[] | `{ condition, price }` raw ladder (NM/LP/MP/HP/DMG) for the card’s variant — those two fields only |
data[].pricing.graded[] | Reconciled graded value per company+grade: `{ company, grade, value, low, high, confidence, value_kind, sold_count, trend? }` |
| Status | Code | When |
|---|---|---|
| 400 | parse_error | malformed `q` syntax: an unclosed quote or parenthesis, a missing term, a stray operator. `details.position` is the 0-based character offset of the offending token. |
| 400 | unknown_field | a `q` term names a field this resource does not register (`subtype:` for `subtypes:`, a card field on `/sealed`), or `orderBy` names a field you cannot sort on. The message carries a did-you-mean suggestion and `details.position` points at it. Unknown fields are rejected, never ignored — an empty page would be the more expensive answer. |
| 400 | invalid_value | the field exists but the value does not fit it: a range on a field that has no ordering, a non-numeric bound, a value outside a closed vocabulary. |
| 400 | query_too_complex | `q` exceeds 512 characters, 20 terms or 5 levels of parenthesis nesting, `orderBy` names more than 3 keys, or a value breaks the wildcard guardrails (a leading `*`, more than 3 per value, fewer than 2 literal characters). Filter builders hit this before people do — count terms as you assemble, and fall back to several narrower calls rather than one wide one. |
| 400 | invalid_pagination | `page`/`page_size` non-numeric, out of range, or `page × page_size` > 10,000 |
| 400 | invalid_language | `language` is not a language code — expected `en`, `ja`, a comma list of codes, or `all` |
| 400 | invalid_distinct | `distinct` is anything other than `code` |
| 400 | invalid_select | `select` names more than 40 fields. Names that do not exist are ignored rather than rejected, so a typo silently drops the field — check the response, not just the status. |
| 400 | invalid_include | `include` carries a value this endpoint does not offer. Cards and sealed accept `prices`; the expansion endpoints accept none at all. |
| 404 | not_found | no such object for this game (a Pokémon id on `/onepiece` is "not found") |
See Errors for the response envelope and the full code list.