Skip to content
snapcasterDevelopers

Get product offers

GET/products/{productId}

Informational read showing how Listings surface to Buyers; a Platform does not implement this operation. Public buyer-facing Product page: every Seller’s offer for one Product as a flat, price-ascending list (cheapest first). `condition`, `language`, and `finish` are on-page filters. Only browsable, in-stock offers appear.

When to use

Use this operation to get product offers.

Informational: a Platform does not implement this buyer-facing operation.

Endpoint

GET /products/{productId}

EnvironmentBase URL
Sandboxhttps://api-sandbox.snapcaster.ca/api/v1/marketplace
Productionhttps://api.snapcaster.ca/api/v1/marketplace
Authentication

None.

Request

FieldInTypeConstraintsMeaningExample
productIdrequiredpathintegerexclusive minimum: 0Product Id supplied to or returned by this operation.24692
conditionqueryarray of string or stringstring: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1The normalized condition assigned to the card.string (generated)
languagequeryarray of string or stringstring: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1The language of the card printing.string (generated)
finishqueryarray of string or stringstring: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1The physical finish or foil treatment of the card.string (generated)
limitqueryintegerexclusive minimum: 0; maximum: 100The maximum number of records requested for this page.1 (generated)
offsetqueryinteger or nullminimum: 0The zero-based position used for offset pagination.0 (generated)

No request body.

Example

Sandbox is the default. These requests use the contract's canonical field examples.

Generated cURL request - Sandbox
curl --request GET \
--url 'https://api-sandbox.snapcaster.ca/api/v1/marketplace/products/24692'

Response

200

The Product’s competing Seller offers, cheapest first.

Response 200: A browsable Listing on its Product page
{
"success": true,
"data": {
"offers": [
{
"lane": "native",
"productId": 24692,
"sellerId": 42,
"storeSlug": null,
"variantId": null,
"skuId": 427286,
"sellerName": "Sandbox Cards",
"condition": "Near Mint",
"language": "English",
"finish": "Non-Foil",
"isSealed": false,
"price": 2499,
"available": 3,
"checkoutMode": "express",
"salesCount": 18,
"sellerCode": "sandbox-cards",
"reviewScore": {
"score": 4.93,
"count": 15
},
"poBoxDelivery": {
"status": "available"
},
"disclosures": {
"imageSource": "catalog",
"conditionSource": "seller_declared",
"authenticitySource": "seller_attestation",
"snapcasterInspected": false,
"snapcasterGraded": false,
"snapcasterAuthenticated": false,
"gradingStandard": "snapcaster-magic-v1",
"declaredGrade": "Near Mint",
"buyerProtection": "magic-grade-and-authenticity"
},
"fulfillmentObligation": {
"sku": "exact",
"printing": "exact",
"language": "exact",
"finish": "exact",
"condition": "declared-or-better"
}
}
],
"product": {
"productId": 24692,
"name": "Lightning Bolt",
"set": "Magic 2011",
"rarity": "Uncommon",
"collectorNumber": "149",
"imageUrl": "https://images.snapcaster.ca/catalog/24692.jpg",
"details": [
{
"label": "Card Type",
"value": "Instant"
},
{
"label": "Mana Cost",
"value": "{R}"
}
]
}
}
}
FieldTypeConstraintsMeaningExample
successrequiredbooleanallowed values: trueWhether the operation completed as requested.true
degradedbooleanallowed values: truePresent and true while the marketplace is in Degraded Mode: prices and availability on browse surfaces may be briefly out of date, and are confirmed before purchase. Absent when the platform is healthy.true (generated)
datarequiredobjectNoneThe operation or event payload.{ "offers": [ { "lane": "native", "productId": 24692, "sellerId": 42, "storeSlug": null, "variantId": null, "skuId": 427286, "sellerName": "Sandbox Cards", "condition": "Near Mint", "language": "English", "finish": "Non-Foil", "isSealed": false, "price": 2499, "available": 3, "checkoutMode": "express", "salesCount": 18, "sellerCode": "sandbox-cards", "reviewScore": { "score": 4.93, "count": 15 }, "poBoxDelivery": { "status": "available" }, "disclosures": { "imageSource": "catalog", "conditionSource": "seller_declared", "authenticitySource": "seller_attestation", "snapcasterInspected": false, "snapcasterGraded": false, "snapcasterAuthenticated": false, "gradingStandard": "snapcaster-magic-v1", "declaredGrade": "Near Mint", "buyerProtection": "magic-grade-and-authenticity" }, "fulfillmentObligation": { "sku": "exact", "printing": "exact", "language": "exact", "finish": "exact", "condition": "declared-or-better" } } ], "product": { "productId": 24692, "name": "Lightning Bolt", "set": "Magic 2011", "rarity": "Uncommon", "collectorNumber": "149", "imageUrl": "https://images.snapcaster.ca/catalog/24692.jpg", "details": [ { "label": "Card Type", "value": "Instant" }, { "label": "Mana Cost", "value": "{R}" } ] } }
data.offersrequiredarray of objectNoneThe Product’s offers, cheapest first.[ { "lane": "native", "productId": 24692, "sellerId": 42, "storeSlug": null, "variantId": null, "skuId": 427286, "sellerName": "Sandbox Cards", "condition": "Near Mint", "language": "English", "finish": "Non-Foil", "isSealed": false, "price": 2499, "available": 3, "checkoutMode": "express", "salesCount": 18, "sellerCode": "sandbox-cards", "reviewScore": { "score": 4.93, "count": 15 }, "poBoxDelivery": { "status": "available" }, "disclosures": { "imageSource": "catalog", "conditionSource": "seller_declared", "authenticitySource": "seller_attestation", "snapcasterInspected": false, "snapcasterGraded": false, "snapcasterAuthenticated": false, "gradingStandard": "snapcaster-magic-v1", "declaredGrade": "Near Mint", "buyerProtection": "magic-grade-and-authenticity" }, "fulfillmentObligation": { "sku": "exact", "printing": "exact", "language": "exact", "finish": "exact", "condition": "declared-or-better" } } ]
data.offers[].lanerequiredstringallowed values: native, handoffWhich lane this offer comes from (#1634, ADR-0068): `native` is a marketplace Seller’s Listing, `handoff` is a Handoff Store’s synced single. Read this first - it says which identity fields carry a value and whether Snapcaster stands behind the sale at all.native
data.offers[].productIdrequiredintegerNoneProduct Id for the surrounding offers item record.24692
data.offers[].sellerIdrequiredinteger or nullNoneCart-line key (with `skuId`); identifies the offering Seller. `null` on a `handoff` offer: a Handoff Store has no seller record and never gets a synthetic one.42
data.offers[].storeSlugrequiredstring or nullNoneThe Handoff Store’s slug - its stable identity across the cart, the quote and the permalink. `null` on a `native` offer.null
data.offers[].variantIdrequiredinteger or nullNoneThe Shopify variant this handoff offer is for; with `storeSlug` it is the handoff cart-line key. `null` on a `native` offer.null
data.offers[].skuIdrequiredintegerNoneThe canonical TCGplayer sku id. With `sellerId` it is the NATIVE cart-line key; a `handoff` offer has no `sellerId` and is carted by `storeSlug` + `variantId` instead.427286
data.offers[].sellerNamerequiredstring or nullNoneDisplay name of whoever is offering the card - the Seller’s store name, or the Handoff Store’s name. Not a handle/slug/seller_code.Sandbox Cards
data.offers[].conditionrequiredstring or nullNoneThe normalized condition assigned to the card.Near Mint
data.offers[].languagerequiredstring or nullNoneThe language of the card printing.English
data.offers[].finishrequiredstring or nullNoneThe physical finish or foil treatment of the card.Non-Foil
data.offers[].isSealedrequiredbooleanNoneTrue when the canonical SKU condition is `Unopened`; matches the Product grid classification.false
data.offers[].pricerequiredintegerNoneOffer price in integer minor units (cents).2499
data.offers[].availablerequiredintegerNoneAvailable stock: on-hand minus committed units.3
data.offers[].checkoutModerequiredstring or nullallowed values: express, manual, nullThe store's buyer-facing checkout mode (ADR-0025): `express` (native — transacts on Snapcaster) or `manual` (handoff — the Buyer finishes on the Seller's own checkout). `null` only for a legacy doc indexed before the field existed.express
data.offers[].salesCountrequiredinteger or nullNoneThe store's live number of sales (paid-order count), computed live per request — not indexed. A number for an `express` (native) store (`0` for a genuinely-new one); `null` for a `manual` (handoff) store, which mints no orders, so the client renders nothing.18
data.offers[].sellerCoderequiredstring or nullNoneThe store’s PUBLIC handle — the Seller-page identity to link this offer to (`/marketplace/sellers/{sellerCode}`). Resolved live from the database, not the search projection; `null` when the store has no directory row (the offer is still served).sandbox-cards
data.offers[].reviewScorerequiredobjectNoneA store’s live Review score and the count it is drawn from, always together so a low-sample score reads as low-sample. Computed per request and never indexed. A store with no reviews carries `{ score: null, count: 0 }` — never a 0.0 — and a `manual` (handoff) store, unreviewable in v1, reads the same way. Shared by the Seller page and the Product-page offers.{ "score": 4.93, "count": 15 }
data.offers[].reviewScore.scorerequirednumber or nullNoneMean of current non-hidden ratings, rounded to 2 decimals. `null` — NOT 0 — when the store has no reviews yet, so a new store is never shown as a 0.0-rated one.4.93
data.offers[].reviewScore.countrequiredintegerNoneHow many current non-hidden Reviews the mean is drawn from.15
data.offers[].poBoxDeliveryrequiredobject or nullNoneThe store’s effective PO Box delivery value. `null` on a `handoff` offer: Snapcaster arranges no shipment on that lane, so it makes no claim either way.{ "status": "available" }
data.offers[].poBoxDelivery.statusrequiredstringallowed values: available, seller_declines, platform_suspended`available`: the store delivers to PO Boxes. `seller_declines`: the store does not. `platform_suspended`: PO Box delivery is suspended platform-wide (e.g. a Canada Post strike) and outranks the store’s own setting.available
data.offers[].disclosuresrequiredobject or nullNoneProvenance, grading, and authenticity statements shown to the buyer.{ "imageSource": "catalog", "conditionSource": "seller_declared", "authenticitySource": "seller_attestation", "snapcasterInspected": false, "snapcasterGraded": false, "snapcasterAuthenticated": false, "gradingStandard": "snapcaster-magic-v1", "declaredGrade": "Near Mint", "buyerProtection": "magic-grade-and-authenticity" }
data.offers[].disclosures.imageSourcerequiredstringallowed values: catalogImage Source for the surrounding disclosures record.catalog
data.offers[].disclosures.conditionSourcerequiredstringallowed values: seller_declaredCondition Source for the surrounding disclosures record.seller_declared
data.offers[].disclosures.authenticitySourcerequiredstringallowed values: seller_attestationAuthenticity Source for the surrounding disclosures record.seller_attestation
data.offers[].disclosures.snapcasterInspectedrequiredbooleanallowed values: falseSnapcaster Inspected for the surrounding disclosures record.false
data.offers[].disclosures.snapcasterGradedrequiredbooleanallowed values: falseSnapcaster Graded for the surrounding disclosures record.false
data.offers[].disclosures.snapcasterAuthenticatedrequiredbooleanallowed values: falseSnapcaster Authenticated for the surrounding disclosures record.false
data.offers[].disclosures.gradingStandardrequiredstringallowed values: snapcaster-magic-v1, seller-declared-no-specialist-promiseGrading Standard for the surrounding disclosures record.snapcaster-magic-v1
data.offers[].disclosures.declaredGraderequiredstring or nullNoneDeclared Grade for the surrounding disclosures record.Near Mint
data.offers[].disclosures.buyerProtectionrequiredstringallowed values: magic-grade-and-authenticity, genuine-and-as-describedBuyer Protection for the surrounding disclosures record.magic-grade-and-authenticity
data.offers[].fulfillmentObligationrequiredobject or nullNoneFulfillment Obligation for the surrounding offers item record.{ "sku": "exact", "printing": "exact", "language": "exact", "finish": "exact", "condition": "declared-or-better" }
data.offers[].fulfillmentObligation.skurequiredstringallowed values: exactThe stock-keeping identity for the exact card offering.exact
data.offers[].fulfillmentObligation.printingrequiredstringallowed values: exactThe exact card printing the Seller is obligated to supply.exact
data.offers[].fulfillmentObligation.languagerequiredstringallowed values: exactThe language of the card printing.exact
data.offers[].fulfillmentObligation.finishrequiredstringallowed values: exactThe physical finish or foil treatment of the card.exact
data.offers[].fulfillmentObligation.conditionrequiredstringallowed values: declared-or-betterThe normalized condition assigned to the card.declared-or-better
data.productrequiredobject or nullNoneCard metadata; null when no catalog row exists.{ "productId": 24692, "name": "Lightning Bolt", "set": "Magic 2011", "rarity": "Uncommon", "collectorNumber": "149", "imageUrl": "https://images.snapcaster.ca/catalog/24692.jpg", "details": [ { "label": "Card Type", "value": "Instant" }, { "label": "Mana Cost", "value": "{R}" } ] }
data.product.productIdrequiredintegerNoneProduct Id for the surrounding product record.24692
data.product.namerequiredstring or nullNoneThe human-readable name of the resource.Lightning Bolt
data.product.setrequiredstring or nullNoneThe joined group / set name.Magic 2011
data.product.rarityrequiredstring or nullNoneDerived from the extended_data `Rarity` entry.Uncommon
data.product.collectorNumberrequiredstring or nullNoneDerived from the extended_data `Number` entry.149
data.product.imageUrlrequiredstring or nullNoneReal card art from the catalog product.https://images.snapcaster.ca/catalog/24692.jpg
data.product.detailsrequiredarray of objectNoneGeneric surfacing of every extended_data entry as { label, value }.[ { "label": "Card Type", "value": "Instant" }, { "label": "Mana Cost", "value": "{R}" } ]
data.product.details[].labelrequiredstringNoneThe entry’s displayName, falling back to its machine name.Card Type
data.product.details[].valuerequiredstringNoneThe value represented by this entry.Instant

Errors

StatusCodeMeaningDo this
400INVALID_REQUESTThe request failed validation (`INVALID_REQUEST`).Correct the fields named in the error details, then retry the request.

Operations

Concepts

Changelog

None.

Schema

Full schema details (62 fields)

Parameters

FieldInTypeConstraintsMeaningExample
productIdrequiredpathintegerexclusive minimum: 0Product Id supplied to or returned by this operation.24692
conditionqueryarray of string or stringstring: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1The normalized condition assigned to the card.string (generated)
languagequeryarray of string or stringstring: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1The language of the card printing.string (generated)
finishqueryarray of string or stringstring: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1The physical finish or foil treatment of the card.string (generated)
limitqueryintegerexclusive minimum: 0; maximum: 100The maximum number of records requested for this page.1 (generated)
offsetqueryinteger or nullminimum: 0The zero-based position used for offset pagination.0 (generated)

Request

None.

Response 200 (application/json)

FieldTypeConstraintsMeaningExample
successrequiredbooleanallowed values: trueWhether the operation completed as requested.true
degradedbooleanallowed values: truePresent and true while the marketplace is in Degraded Mode: prices and availability on browse surfaces may be briefly out of date, and are confirmed before purchase. Absent when the platform is healthy.true (generated)
datarequiredobjectNoneThe operation or event payload.{ "offers": [ { "lane": "native", "productId": 24692, "sellerId": 42, "storeSlug": null, "variantId": null, "skuId": 427286, "sellerName": "Sandbox Cards", "condition": "Near Mint", "language": "English", "finish": "Non-Foil", "isSealed": false, "price": 2499, "available": 3, "checkoutMode": "express", "salesCount": 18, "sellerCode": "sandbox-cards", "reviewScore": { "score": 4.93, "count": 15 }, "poBoxDelivery": { "status": "available" }, "disclosures": { "imageSource": "catalog", "conditionSource": "seller_declared", "authenticitySource": "seller_attestation", "snapcasterInspected": false, "snapcasterGraded": false, "snapcasterAuthenticated": false, "gradingStandard": "snapcaster-magic-v1", "declaredGrade": "Near Mint", "buyerProtection": "magic-grade-and-authenticity" }, "fulfillmentObligation": { "sku": "exact", "printing": "exact", "language": "exact", "finish": "exact", "condition": "declared-or-better" } } ], "product": { "productId": 24692, "name": "Lightning Bolt", "set": "Magic 2011", "rarity": "Uncommon", "collectorNumber": "149", "imageUrl": "https://images.snapcaster.ca/catalog/24692.jpg", "details": [ { "label": "Card Type", "value": "Instant" }, { "label": "Mana Cost", "value": "{R}" } ] } }
data.offersrequiredarray of objectNoneThe Product’s offers, cheapest first.[ { "lane": "native", "productId": 24692, "sellerId": 42, "storeSlug": null, "variantId": null, "skuId": 427286, "sellerName": "Sandbox Cards", "condition": "Near Mint", "language": "English", "finish": "Non-Foil", "isSealed": false, "price": 2499, "available": 3, "checkoutMode": "express", "salesCount": 18, "sellerCode": "sandbox-cards", "reviewScore": { "score": 4.93, "count": 15 }, "poBoxDelivery": { "status": "available" }, "disclosures": { "imageSource": "catalog", "conditionSource": "seller_declared", "authenticitySource": "seller_attestation", "snapcasterInspected": false, "snapcasterGraded": false, "snapcasterAuthenticated": false, "gradingStandard": "snapcaster-magic-v1", "declaredGrade": "Near Mint", "buyerProtection": "magic-grade-and-authenticity" }, "fulfillmentObligation": { "sku": "exact", "printing": "exact", "language": "exact", "finish": "exact", "condition": "declared-or-better" } } ]
data.offers[].lanerequiredstringallowed values: native, handoffWhich lane this offer comes from (#1634, ADR-0068): `native` is a marketplace Seller’s Listing, `handoff` is a Handoff Store’s synced single. Read this first - it says which identity fields carry a value and whether Snapcaster stands behind the sale at all.native
data.offers[].productIdrequiredintegerNoneProduct Id for the surrounding offers item record.24692
data.offers[].sellerIdrequiredinteger or nullNoneCart-line key (with `skuId`); identifies the offering Seller. `null` on a `handoff` offer: a Handoff Store has no seller record and never gets a synthetic one.42
data.offers[].storeSlugrequiredstring or nullNoneThe Handoff Store’s slug - its stable identity across the cart, the quote and the permalink. `null` on a `native` offer.null
data.offers[].variantIdrequiredinteger or nullNoneThe Shopify variant this handoff offer is for; with `storeSlug` it is the handoff cart-line key. `null` on a `native` offer.null
data.offers[].skuIdrequiredintegerNoneThe canonical TCGplayer sku id. With `sellerId` it is the NATIVE cart-line key; a `handoff` offer has no `sellerId` and is carted by `storeSlug` + `variantId` instead.427286
data.offers[].sellerNamerequiredstring or nullNoneDisplay name of whoever is offering the card - the Seller’s store name, or the Handoff Store’s name. Not a handle/slug/seller_code.Sandbox Cards
data.offers[].conditionrequiredstring or nullNoneThe normalized condition assigned to the card.Near Mint
data.offers[].languagerequiredstring or nullNoneThe language of the card printing.English
data.offers[].finishrequiredstring or nullNoneThe physical finish or foil treatment of the card.Non-Foil
data.offers[].isSealedrequiredbooleanNoneTrue when the canonical SKU condition is `Unopened`; matches the Product grid classification.false
data.offers[].pricerequiredintegerNoneOffer price in integer minor units (cents).2499
data.offers[].availablerequiredintegerNoneAvailable stock: on-hand minus committed units.3
data.offers[].checkoutModerequiredstring or nullallowed values: express, manual, nullThe store's buyer-facing checkout mode (ADR-0025): `express` (native — transacts on Snapcaster) or `manual` (handoff — the Buyer finishes on the Seller's own checkout). `null` only for a legacy doc indexed before the field existed.express
data.offers[].salesCountrequiredinteger or nullNoneThe store's live number of sales (paid-order count), computed live per request — not indexed. A number for an `express` (native) store (`0` for a genuinely-new one); `null` for a `manual` (handoff) store, which mints no orders, so the client renders nothing.18
data.offers[].sellerCoderequiredstring or nullNoneThe store’s PUBLIC handle — the Seller-page identity to link this offer to (`/marketplace/sellers/{sellerCode}`). Resolved live from the database, not the search projection; `null` when the store has no directory row (the offer is still served).sandbox-cards
data.offers[].reviewScorerequiredobjectNoneA store’s live Review score and the count it is drawn from, always together so a low-sample score reads as low-sample. Computed per request and never indexed. A store with no reviews carries `{ score: null, count: 0 }` — never a 0.0 — and a `manual` (handoff) store, unreviewable in v1, reads the same way. Shared by the Seller page and the Product-page offers.{ "score": 4.93, "count": 15 }
data.offers[].reviewScore.scorerequirednumber or nullNoneMean of current non-hidden ratings, rounded to 2 decimals. `null` — NOT 0 — when the store has no reviews yet, so a new store is never shown as a 0.0-rated one.4.93
data.offers[].reviewScore.countrequiredintegerNoneHow many current non-hidden Reviews the mean is drawn from.15
data.offers[].poBoxDeliveryrequiredobject or nullNoneThe store’s effective PO Box delivery value. `null` on a `handoff` offer: Snapcaster arranges no shipment on that lane, so it makes no claim either way.{ "status": "available" }
data.offers[].poBoxDelivery.statusrequiredstringallowed values: available, seller_declines, platform_suspended`available`: the store delivers to PO Boxes. `seller_declines`: the store does not. `platform_suspended`: PO Box delivery is suspended platform-wide (e.g. a Canada Post strike) and outranks the store’s own setting.available
data.offers[].disclosuresrequiredobject or nullNoneProvenance, grading, and authenticity statements shown to the buyer.{ "imageSource": "catalog", "conditionSource": "seller_declared", "authenticitySource": "seller_attestation", "snapcasterInspected": false, "snapcasterGraded": false, "snapcasterAuthenticated": false, "gradingStandard": "snapcaster-magic-v1", "declaredGrade": "Near Mint", "buyerProtection": "magic-grade-and-authenticity" }
data.offers[].disclosures.imageSourcerequiredstringallowed values: catalogImage Source for the surrounding disclosures record.catalog
data.offers[].disclosures.conditionSourcerequiredstringallowed values: seller_declaredCondition Source for the surrounding disclosures record.seller_declared
data.offers[].disclosures.authenticitySourcerequiredstringallowed values: seller_attestationAuthenticity Source for the surrounding disclosures record.seller_attestation
data.offers[].disclosures.snapcasterInspectedrequiredbooleanallowed values: falseSnapcaster Inspected for the surrounding disclosures record.false
data.offers[].disclosures.snapcasterGradedrequiredbooleanallowed values: falseSnapcaster Graded for the surrounding disclosures record.false
data.offers[].disclosures.snapcasterAuthenticatedrequiredbooleanallowed values: falseSnapcaster Authenticated for the surrounding disclosures record.false
data.offers[].disclosures.gradingStandardrequiredstringallowed values: snapcaster-magic-v1, seller-declared-no-specialist-promiseGrading Standard for the surrounding disclosures record.snapcaster-magic-v1
data.offers[].disclosures.declaredGraderequiredstring or nullNoneDeclared Grade for the surrounding disclosures record.Near Mint
data.offers[].disclosures.buyerProtectionrequiredstringallowed values: magic-grade-and-authenticity, genuine-and-as-describedBuyer Protection for the surrounding disclosures record.magic-grade-and-authenticity
data.offers[].fulfillmentObligationrequiredobject or nullNoneFulfillment Obligation for the surrounding offers item record.{ "sku": "exact", "printing": "exact", "language": "exact", "finish": "exact", "condition": "declared-or-better" }
data.offers[].fulfillmentObligation.skurequiredstringallowed values: exactThe stock-keeping identity for the exact card offering.exact
data.offers[].fulfillmentObligation.printingrequiredstringallowed values: exactThe exact card printing the Seller is obligated to supply.exact
data.offers[].fulfillmentObligation.languagerequiredstringallowed values: exactThe language of the card printing.exact
data.offers[].fulfillmentObligation.finishrequiredstringallowed values: exactThe physical finish or foil treatment of the card.exact
data.offers[].fulfillmentObligation.conditionrequiredstringallowed values: declared-or-betterThe normalized condition assigned to the card.declared-or-better
data.productrequiredobject or nullNoneCard metadata; null when no catalog row exists.{ "productId": 24692, "name": "Lightning Bolt", "set": "Magic 2011", "rarity": "Uncommon", "collectorNumber": "149", "imageUrl": "https://images.snapcaster.ca/catalog/24692.jpg", "details": [ { "label": "Card Type", "value": "Instant" }, { "label": "Mana Cost", "value": "{R}" } ] }
data.product.productIdrequiredintegerNoneProduct Id for the surrounding product record.24692
data.product.namerequiredstring or nullNoneThe human-readable name of the resource.Lightning Bolt
data.product.setrequiredstring or nullNoneThe joined group / set name.Magic 2011
data.product.rarityrequiredstring or nullNoneDerived from the extended_data `Rarity` entry.Uncommon
data.product.collectorNumberrequiredstring or nullNoneDerived from the extended_data `Number` entry.149
data.product.imageUrlrequiredstring or nullNoneReal card art from the catalog product.https://images.snapcaster.ca/catalog/24692.jpg
data.product.detailsrequiredarray of objectNoneGeneric surfacing of every extended_data entry as { label, value }.[ { "label": "Card Type", "value": "Instant" }, { "label": "Mana Cost", "value": "{R}" } ]
data.product.details[].labelrequiredstringNoneThe entry’s displayName, falling back to its machine name.Card Type
data.product.details[].valuerequiredstringNoneThe value represented by this entry.Instant

Error 400 (application/json)

FieldTypeConstraintsMeaningExample
successrequiredbooleanallowed values: falseWhether the operation completed as requested.false (generated)
errorrequiredobjectNoneStructured error information returned when the request cannot be completed.{ "code": "UNAUTHORIZED", "message": "string" } (generated)
error.coderequiredstringallowed values: UNAUTHORIZED, INVALID_REQUEST, UNSUPPORTED_API_VERSION, SELLER_SOURCE_EXCLUSIVE, BATCH_TOO_LARGE, RATE_LIMITED, ORDER_NOT_FOUND, SELLER_NOT_FOUND, INVALID_TRANSITION, CHECKOUT_IDEMPOTENCY_KEY_REUSED, CHECKOUT_MANUAL_SELLER_UNSUPPORTED, CHECKOUT_SELF_PURCHASE_NOT_ALLOWED, CHECKOUT_SELLER_UNAVAILABLE, CHECKOUT_NOT_FOUND, FEATURE_DISABLEDStable public error code the Platform can branch on.UNAUTHORIZED (generated)
error.messagerequiredstringNoneA human-readable explanation of the result.string (generated)
error.detailsunknownNoneAdditional structured context for diagnosing the result.{} (generated)