API reference · Browse
Get product offers
/products/{productId}Read the offers for one product, ordered by price from lowest to highest. Only browsable, in-stock offers appear. Filter by condition, language, or finish. This public buyer-facing endpoint shows how your listings appear to buyers; Snapcaster implements it.
Snapcaster implements this buyer-facing operation. Use the reference to see how your listings appear to buyers.
Example
These examples send requests to the sandbox.
Replace the example productId in the URL with your own.
curl --request GET \
--url 'https://api-sandbox.snapcaster.ca/api/v1/marketplace/products/86'{
"success": true,
"data": {
"offers": [
{
"lane": "native",
"productId": 86,
"sellerId": 42,
"storeSlug": null,
"variantId": null,
"skuId": 14602,
"sellerName": "Sandbox Cards",
"condition": "NM",
"language": "EN",
"finish": "Normal",
"isSealed": false,
"price": 24.99,
"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": 86,
"name": "Abyssal Nightstalker",
"set": "Portal Second Age",
"rarity": "U",
"collectorNumber": null,
"imageUrl": "https://tcgplayer-cdn.tcgplayer.com/product/86_200w.jpg",
"details": [
{
"label": "Rarity",
"value": "U",
"runs": [
{
"type": "text",
"text": "U",
"emphasis": false
}
]
},
{
"label": "P",
"value": "2",
"runs": [
{
"type": "text",
"text": "2",
"emphasis": false
}
]
}
]
}
}
}Endpoint
| Environment | URL |
|---|---|
| Sandbox | https://api-sandbox.snapcaster.ca/api/v1/marketplace |
| Production | https://api.snapcaster.ca/api/v1/marketplace |
None.
Request
Path parameters
productIdinteger requiredSee Canonical catalog in Core concepts.
Constraints: exclusive minimum: 0 Example
86
Query parameters
conditionarray of string or stringThe normalized condition assigned to the card.
Constraints: string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1
languagearray of string or stringThe language of the card printing.
Constraints: string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1
finisharray of string or stringThe physical finish or foil treatment of the card.
Constraints: string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1
limitintegerThe maximum number of records requested for this page.
Constraints: exclusive minimum: 0; maximum: 100
offsetinteger or nullThe zero-based position used for offset pagination.
Constraints: minimum: 0
Response
200
The product’s competing seller offers, cheapest first.
Response body: Browse
successboolean requiredWhether the operation completed as requested.
Constraints: allowed values:
trueExampletruedegradedbooleanPresent 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.
Constraints: allowed values:
truedataobject requiredThe operation or event payload.
Show child fieldsHide child fields
data.offers BrowserequiredProduct Offer[] The product’s offers, cheapest first.
Show child fieldsHide child fields
data.string requiredoffers[]. lane The source of the offer:
nativefor a marketplace seller's listing, orhandofffor a handoff store's synced single. Use this field to choose the cart-line identifiers and determine whether Snapcaster handles the sale.Constraints: allowed values:
native,handoffExamplenativedata.integer requiredoffers[]. productId See Canonical catalog in Core concepts.
Example
86data.integer or null requiredoffers[]. sellerId The offering seller id. Combine it with
skuIdto identify a native cart line. Null for ahandoffoffer, which has no seller record.Example
42data.string or null requiredoffers[]. storeSlug The handoff store’s slug - its stable identity across the cart, the quote and the permalink.
nullon anativeoffer.Example
nulldata.integer or null requiredoffers[]. variantId The Shopify variant this handoff offer is for; with
storeSlugit is the handoff cart-line key.nullon anativeoffer.Example
nulldata.integer requiredoffers[]. skuId The canonical TCGplayer SKU id. A native cart line uses
sellerIdandskuId; a handoff cart line usesstoreSlugandvariantId.Example
14602data.string or null requiredoffers[]. sellerName The display name of the seller or handoff store. Use
sellerCodeorstoreSlugfor links and identifiers.Example
Sandbox Cardsdata.string or null requiredoffers[]. condition The normalized condition assigned to the card.
Example
NMdata.string or null requiredoffers[]. language The language of the card printing.
Example
ENdata.string or null requiredoffers[]. finish The physical finish or foil treatment of the card.
Example
Normaldata.boolean requiredoffers[]. isSealed True when the canonical SKU condition is
Unopened; matches the product grid classification.Example
falsedata.number requiredoffers[]. price Offer price in dollars as a decimal amount.
Example
24.99data.integer requiredoffers[]. available Available stock: on-hand minus committed units.
Example
3data.string or null requiredoffers[]. checkoutMode Where the buyer checks out:
expresson Snapcaster, ormanualon the seller's own site. Null for a legacy search record indexed before this field existed.Constraints: allowed values:
express,manual,nullExampleexpressdata.integer or null requiredoffers[]. salesCount The number of paid orders for an
expressstore, calculated for each request. Zero for a store with no sales. Null for amanualstore, whose orders are created outside Snapcaster; omit the sales count from its display.Example
18data.string or null requiredoffers[]. sellerCode The store's public handle for links to
/marketplace/sellers/{sellerCode}. Read from the database on each request. Null if the store has no directory row; the offer is still returned.Example
sandbox-cardsdata.offers[]. reviewScore ReviewrequiredScore The review score and the number of ratings used to calculate it. Display both so readers can judge the sample size. Calculated for each request. A store with no reviews returns
{ score: null, count: 0 }, as does amanualstore, which cannot receive reviews in v1. Used on the seller page and product offers.Show child fieldsHide child fields
data.number or null requiredoffers[]. reviewScore. score The mean of current, non-hidden ratings, rounded to two decimals. Null when the store has no reviews.
Example
4.93data.integer requiredoffers[]. reviewScore. count The number of current, non-hidden reviews included in the mean.
Example
15
data.offers[]. poBoxDelivery Poor null requiredBox Delivery Whether the store can deliver to PO Boxes. Null for a
handoffoffer, where Snapcaster does not arrange shipping.Show child fieldsHide child fields
data.string requiredoffers[]. poBoxDelivery. status 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.Constraints: allowed values:
available,seller_declines,platform_suspendedExampleavailable
data.offers[]. disclosures Listingor null requiredDisclosures Provenance, grading, and authenticity statements shown to the buyer.
Show child fieldsHide child fields
data.string requiredoffers[]. disclosures. imageSource Constraints: allowed values:
catalogExamplecatalogdata.string requiredoffers[]. disclosures. conditionSource Constraints: allowed values:
seller_declaredExampleseller_declareddata.string requiredoffers[]. disclosures. authenticitySource Constraints: allowed values:
seller_attestationExampleseller_attestationdata.boolean requiredoffers[]. disclosures. snapcasterInspected Constraints: allowed values:
falseExamplefalsedata.boolean requiredoffers[]. disclosures. snapcasterGraded Constraints: allowed values:
falseExamplefalsedata.boolean requiredoffers[]. disclosures. snapcasterAuthenticated Constraints: allowed values:
falseExamplefalsedata.string requiredoffers[]. disclosures. gradingStandard Constraints: allowed values:
snapcaster-magic-v1,seller-declared-no-specialist-promiseExamplesnapcaster-magic-v1data.string or null requiredoffers[]. disclosures. declaredGrade Example
Near Mintdata.string requiredoffers[]. disclosures. buyerProtection Constraints: allowed values:
magic-grade-and-authenticity,genuine-and-as-describedExamplemagic-grade-and-authenticity
data.offers[]. fulfillmentObligation Listingor null requiredFulfillment Obligation Show child fieldsHide child fields
data.string requiredoffers[]. fulfillmentObligation. sku The SKU that identifies the card variant.
Constraints: allowed values:
exactExampleexactdata.string requiredoffers[]. fulfillmentObligation. printing The card printing the seller must supply.
Constraints: allowed values:
exactExampleexactdata.string requiredoffers[]. fulfillmentObligation. language The language of the card printing.
Constraints: allowed values:
exactExampleexactdata.string requiredoffers[]. fulfillmentObligation. finish The physical finish or foil treatment of the card.
Constraints: allowed values:
exactExampleexactdata.string requiredoffers[]. fulfillmentObligation. condition The normalized condition assigned to the card.
Constraints: allowed values:
declared-or-betterExampledeclared-or-better
data.product Browseor null requiredProduct Meta Card metadata; null when no catalog row exists.
Show child fieldsHide child fields
data.integer requiredproduct. productId See Canonical catalog in Core concepts.
Example
86data.string or null requiredproduct. name Example
Abyssal Nightstalkerdata.string or null requiredproduct. set The product group or set name.
Example
Portal Second Agedata.string or null requiredproduct. rarity Derived from the extended_data
Rarityentry.Example
Udata.string or null requiredproduct. collectorNumber Derived from the extended_data
Numberentry.Example
nulldata.string or null requiredproduct. imageUrl The catalog product image.
Example
https://tcgplayer-cdn.tcgplayer.com/product/86_200w.jpgdata.product. details BrowserequiredProduct Detail[] Each
extended_dataentry as{ label, value, runs }.Show child fieldsHide child fields
data.string requiredproduct. details[]. label The entry's
displayName, or its machine name if no display name exists.Example
Raritydata.string requiredproduct. details[]. value Plain text with markup removed; each line break is a newline.
Example
Udata.product. details[]. runs BrowserequiredProduct Detail Run[] The value as text runs and line breaks, with
emphasismarking text the catalog emphasized.Show child fieldsHide child fields
data.string requiredproduct. details[]. runs[]. type Constraints: allowed values:
text,breakExampletextdata.string conditionalproduct. details[]. runs[]. text Required when
typeistext.Example
Udata.boolean conditionalproduct. details[]. runs[]. emphasis Required when
typeistext.Example
false
Errors
Errors return a Marketplace body, except HTTP 500 (Api). Error codes explains both error bodies and lists every code.
400
INVALID_REQUESTThe request failed validation (
INVALID_REQUEST).Do this: Correct the fields named in the error details, then retry the request.
500
INTERNAL_ERRORAn unexpected failure (
INTERNAL_ERROR).Do this: Retry with bounded retries and jitter. If the failure persists, contact Snapcaster with the X-Correlation-ID response header.