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}
| Environment | Base URL |
|---|---|
| Sandbox | https://api-sandbox.snapcaster.ca/api/v1/marketplace |
| Production | https://api.snapcaster.ca/api/v1/marketplace |
None.
Request
| Field | In | Type | Constraints | Meaning | Example |
|---|---|---|---|---|---|
productIdrequired | path | integer | exclusive minimum: 0 | Product Id supplied to or returned by this operation. | 24692 |
condition | query | array of string or string | string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1 | The normalized condition assigned to the card. | string (generated) |
language | query | array of string or string | string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1 | The language of the card printing. | string (generated) |
finish | query | array of string or string | string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1 | The physical finish or foil treatment of the card. | string (generated) |
limit | query | integer | exclusive minimum: 0; maximum: 100 | The maximum number of records requested for this page. | 1 (generated) |
offset | query | integer or null | minimum: 0 | The 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.
curl --request GET \ --url 'https://api-sandbox.snapcaster.ca/api/v1/marketplace/products/24692'Response
200
The Product’s competing Seller offers, cheapest first.
{ "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}" } ] } }}| Field | Type | Constraints | Meaning | Example |
|---|---|---|---|---|
successrequired | boolean | allowed values: true | Whether the operation completed as requested. | true |
degraded | boolean | allowed values: true | Present 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) |
datarequired | object | None | The 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.offersrequired | array of object | None | The 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[].lanerequired | string | allowed values: native, handoff | Which 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[].productIdrequired | integer | None | Product Id for the surrounding offers item record. | 24692 |
data.offers[].sellerIdrequired | integer or null | None | Cart-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[].storeSlugrequired | string or null | None | The Handoff Store’s slug - its stable identity across the cart, the quote and the permalink. `null` on a `native` offer. | null |
data.offers[].variantIdrequired | integer or null | None | The Shopify variant this handoff offer is for; with `storeSlug` it is the handoff cart-line key. `null` on a `native` offer. | null |
data.offers[].skuIdrequired | integer | None | The 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[].sellerNamerequired | string or null | None | Display 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[].conditionrequired | string or null | None | The normalized condition assigned to the card. | Near Mint |
data.offers[].languagerequired | string or null | None | The language of the card printing. | English |
data.offers[].finishrequired | string or null | None | The physical finish or foil treatment of the card. | Non-Foil |
data.offers[].isSealedrequired | boolean | None | True when the canonical SKU condition is `Unopened`; matches the Product grid classification. | false |
data.offers[].pricerequired | integer | None | Offer price in integer minor units (cents). | 2499 |
data.offers[].availablerequired | integer | None | Available stock: on-hand minus committed units. | 3 |
data.offers[].checkoutModerequired | string or null | allowed values: express, manual, null | The 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[].salesCountrequired | integer or null | None | The 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[].sellerCoderequired | string or null | None | The 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[].reviewScorerequired | object | None | A 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.scorerequired | number or null | None | Mean 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.countrequired | integer | None | How many current non-hidden Reviews the mean is drawn from. | 15 |
data.offers[].poBoxDeliveryrequired | object or null | None | The 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.statusrequired | string | allowed 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[].disclosuresrequired | object or null | None | Provenance, 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.imageSourcerequired | string | allowed values: catalog | Image Source for the surrounding disclosures record. | catalog |
data.offers[].disclosures.conditionSourcerequired | string | allowed values: seller_declared | Condition Source for the surrounding disclosures record. | seller_declared |
data.offers[].disclosures.authenticitySourcerequired | string | allowed values: seller_attestation | Authenticity Source for the surrounding disclosures record. | seller_attestation |
data.offers[].disclosures.snapcasterInspectedrequired | boolean | allowed values: false | Snapcaster Inspected for the surrounding disclosures record. | false |
data.offers[].disclosures.snapcasterGradedrequired | boolean | allowed values: false | Snapcaster Graded for the surrounding disclosures record. | false |
data.offers[].disclosures.snapcasterAuthenticatedrequired | boolean | allowed values: false | Snapcaster Authenticated for the surrounding disclosures record. | false |
data.offers[].disclosures.gradingStandardrequired | string | allowed values: snapcaster-magic-v1, seller-declared-no-specialist-promise | Grading Standard for the surrounding disclosures record. | snapcaster-magic-v1 |
data.offers[].disclosures.declaredGraderequired | string or null | None | Declared Grade for the surrounding disclosures record. | Near Mint |
data.offers[].disclosures.buyerProtectionrequired | string | allowed values: magic-grade-and-authenticity, genuine-and-as-described | Buyer Protection for the surrounding disclosures record. | magic-grade-and-authenticity |
data.offers[].fulfillmentObligationrequired | object or null | None | Fulfillment Obligation for the surrounding offers item record. | {
"sku": "exact",
"printing": "exact",
"language": "exact",
"finish": "exact",
"condition": "declared-or-better"
} |
data.offers[].fulfillmentObligation.skurequired | string | allowed values: exact | The stock-keeping identity for the exact card offering. | exact |
data.offers[].fulfillmentObligation.printingrequired | string | allowed values: exact | The exact card printing the Seller is obligated to supply. | exact |
data.offers[].fulfillmentObligation.languagerequired | string | allowed values: exact | The language of the card printing. | exact |
data.offers[].fulfillmentObligation.finishrequired | string | allowed values: exact | The physical finish or foil treatment of the card. | exact |
data.offers[].fulfillmentObligation.conditionrequired | string | allowed values: declared-or-better | The normalized condition assigned to the card. | declared-or-better |
data.productrequired | object or null | None | Card 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.productIdrequired | integer | None | Product Id for the surrounding product record. | 24692 |
data.product.namerequired | string or null | None | The human-readable name of the resource. | Lightning Bolt |
data.product.setrequired | string or null | None | The joined group / set name. | Magic 2011 |
data.product.rarityrequired | string or null | None | Derived from the extended_data `Rarity` entry. | Uncommon |
data.product.collectorNumberrequired | string or null | None | Derived from the extended_data `Number` entry. | 149 |
data.product.imageUrlrequired | string or null | None | Real card art from the catalog product. | https://images.snapcaster.ca/catalog/24692.jpg |
data.product.detailsrequired | array of object | None | Generic surfacing of every extended_data entry as { label, value }. | [
{
"label": "Card Type",
"value": "Instant"
},
{
"label": "Mana Cost",
"value": "{R}"
}
] |
data.product.details[].labelrequired | string | None | The entry’s displayName, falling back to its machine name. | Card Type |
data.product.details[].valuerequired | string | None | The value represented by this entry. | Instant |
Errors
| Status | Code | Meaning | Do this |
|---|---|---|---|
| 400 | INVALID_REQUEST | The request failed validation (`INVALID_REQUEST`). | Correct the fields named in the error details, then retry the request. |
Related
Operations
Concepts
Changelog
None.
Schema
Full schema details (62 fields)
Parameters
| Field | In | Type | Constraints | Meaning | Example |
|---|---|---|---|---|---|
productIdrequired | path | integer | exclusive minimum: 0 | Product Id supplied to or returned by this operation. | 24692 |
condition | query | array of string or string | string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1 | The normalized condition assigned to the card. | string (generated) |
language | query | array of string or string | string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1 | The language of the card printing. | string (generated) |
finish | query | array of string or string | string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1 | The physical finish or foil treatment of the card. | string (generated) |
limit | query | integer | exclusive minimum: 0; maximum: 100 | The maximum number of records requested for this page. | 1 (generated) |
offset | query | integer or null | minimum: 0 | The zero-based position used for offset pagination. | 0 (generated) |
Request
None.
Response 200 (application/json)
| Field | Type | Constraints | Meaning | Example |
|---|---|---|---|---|
successrequired | boolean | allowed values: true | Whether the operation completed as requested. | true |
degraded | boolean | allowed values: true | Present 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) |
datarequired | object | None | The 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.offersrequired | array of object | None | The 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[].lanerequired | string | allowed values: native, handoff | Which 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[].productIdrequired | integer | None | Product Id for the surrounding offers item record. | 24692 |
data.offers[].sellerIdrequired | integer or null | None | Cart-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[].storeSlugrequired | string or null | None | The Handoff Store’s slug - its stable identity across the cart, the quote and the permalink. `null` on a `native` offer. | null |
data.offers[].variantIdrequired | integer or null | None | The Shopify variant this handoff offer is for; with `storeSlug` it is the handoff cart-line key. `null` on a `native` offer. | null |
data.offers[].skuIdrequired | integer | None | The 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[].sellerNamerequired | string or null | None | Display 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[].conditionrequired | string or null | None | The normalized condition assigned to the card. | Near Mint |
data.offers[].languagerequired | string or null | None | The language of the card printing. | English |
data.offers[].finishrequired | string or null | None | The physical finish or foil treatment of the card. | Non-Foil |
data.offers[].isSealedrequired | boolean | None | True when the canonical SKU condition is `Unopened`; matches the Product grid classification. | false |
data.offers[].pricerequired | integer | None | Offer price in integer minor units (cents). | 2499 |
data.offers[].availablerequired | integer | None | Available stock: on-hand minus committed units. | 3 |
data.offers[].checkoutModerequired | string or null | allowed values: express, manual, null | The 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[].salesCountrequired | integer or null | None | The 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[].sellerCoderequired | string or null | None | The 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[].reviewScorerequired | object | None | A 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.scorerequired | number or null | None | Mean 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.countrequired | integer | None | How many current non-hidden Reviews the mean is drawn from. | 15 |
data.offers[].poBoxDeliveryrequired | object or null | None | The 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.statusrequired | string | allowed 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[].disclosuresrequired | object or null | None | Provenance, 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.imageSourcerequired | string | allowed values: catalog | Image Source for the surrounding disclosures record. | catalog |
data.offers[].disclosures.conditionSourcerequired | string | allowed values: seller_declared | Condition Source for the surrounding disclosures record. | seller_declared |
data.offers[].disclosures.authenticitySourcerequired | string | allowed values: seller_attestation | Authenticity Source for the surrounding disclosures record. | seller_attestation |
data.offers[].disclosures.snapcasterInspectedrequired | boolean | allowed values: false | Snapcaster Inspected for the surrounding disclosures record. | false |
data.offers[].disclosures.snapcasterGradedrequired | boolean | allowed values: false | Snapcaster Graded for the surrounding disclosures record. | false |
data.offers[].disclosures.snapcasterAuthenticatedrequired | boolean | allowed values: false | Snapcaster Authenticated for the surrounding disclosures record. | false |
data.offers[].disclosures.gradingStandardrequired | string | allowed values: snapcaster-magic-v1, seller-declared-no-specialist-promise | Grading Standard for the surrounding disclosures record. | snapcaster-magic-v1 |
data.offers[].disclosures.declaredGraderequired | string or null | None | Declared Grade for the surrounding disclosures record. | Near Mint |
data.offers[].disclosures.buyerProtectionrequired | string | allowed values: magic-grade-and-authenticity, genuine-and-as-described | Buyer Protection for the surrounding disclosures record. | magic-grade-and-authenticity |
data.offers[].fulfillmentObligationrequired | object or null | None | Fulfillment Obligation for the surrounding offers item record. | {
"sku": "exact",
"printing": "exact",
"language": "exact",
"finish": "exact",
"condition": "declared-or-better"
} |
data.offers[].fulfillmentObligation.skurequired | string | allowed values: exact | The stock-keeping identity for the exact card offering. | exact |
data.offers[].fulfillmentObligation.printingrequired | string | allowed values: exact | The exact card printing the Seller is obligated to supply. | exact |
data.offers[].fulfillmentObligation.languagerequired | string | allowed values: exact | The language of the card printing. | exact |
data.offers[].fulfillmentObligation.finishrequired | string | allowed values: exact | The physical finish or foil treatment of the card. | exact |
data.offers[].fulfillmentObligation.conditionrequired | string | allowed values: declared-or-better | The normalized condition assigned to the card. | declared-or-better |
data.productrequired | object or null | None | Card 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.productIdrequired | integer | None | Product Id for the surrounding product record. | 24692 |
data.product.namerequired | string or null | None | The human-readable name of the resource. | Lightning Bolt |
data.product.setrequired | string or null | None | The joined group / set name. | Magic 2011 |
data.product.rarityrequired | string or null | None | Derived from the extended_data `Rarity` entry. | Uncommon |
data.product.collectorNumberrequired | string or null | None | Derived from the extended_data `Number` entry. | 149 |
data.product.imageUrlrequired | string or null | None | Real card art from the catalog product. | https://images.snapcaster.ca/catalog/24692.jpg |
data.product.detailsrequired | array of object | None | Generic surfacing of every extended_data entry as { label, value }. | [
{
"label": "Card Type",
"value": "Instant"
},
{
"label": "Mana Cost",
"value": "{R}"
}
] |
data.product.details[].labelrequired | string | None | The entry’s displayName, falling back to its machine name. | Card Type |
data.product.details[].valuerequired | string | None | The value represented by this entry. | Instant |
Error 400 (application/json)
| Field | Type | Constraints | Meaning | Example |
|---|---|---|---|---|
successrequired | boolean | allowed values: false | Whether the operation completed as requested. | false (generated) |
errorrequired | object | None | Structured error information returned when the request cannot be completed. | {
"code": "UNAUTHORIZED",
"message": "string"
} (generated) |
error.coderequired | string | allowed 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_DISABLED | Stable public error code the Platform can branch on. | UNAUTHORIZED (generated) |
error.messagerequired | string | None | A human-readable explanation of the result. | string (generated) |
error.details | unknown | None | Additional structured context for diagnosing the result. | {} (generated) |