GET /search

Search products in the Canadian marketplace. This public, unauthenticated endpoint shows how your listings appear to buyers; Snapcaster implements it. Omit keyword for the full product grid, or supply it to search the analyzed product name. Each result includes the lowest price across offers and the number of distinct sellers. The response also includes category, set, rarity, and store facets. Use sellerCode for a native seller or storeSlug for a Shopify handoff store. These parameters are mutually exclusive and work with the other filters. An unknown or non-browsable store returns an empty result set. Follow nextCursor until it is null.

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.

Generated cURL request - Sandbox
curl --request GET \
  --url 'https://api-sandbox.snapcaster.ca/api/v1/marketplace/search'
Generated Response 200: Generated response 200
{
  "success": true,
  "data": {
    "items": [
      {
        "productId": 0,
        "name": "string",
        "set": "string",
        "category": "string",
        "rarity": "string",
        "collectorNumber": "string",
        "imageUrl": "string",
        "isSealed": true,
        "fromPrice": 0,
        "sellerCount": 0,
        "listingCount": 0,
        "disclosures": {
          "imageSource": "catalog",
          "conditionSource": "seller_declared",
          "authenticitySource": "seller_attestation",
          "snapcasterInspected": false,
          "snapcasterGraded": false,
          "snapcasterAuthenticated": false,
          "gradingStandard": "snapcaster-magic-v1",
          "declaredGrade": "string",
          "buyerProtection": "magic-grade-and-authenticity"
        },
        "fulfillmentObligation": {
          "sku": "exact",
          "printing": "exact",
          "language": "exact",
          "finish": "exact",
          "condition": "declared-or-better"
        }
      }
    ],
    "facets": {
      "category": [
        {
          "value": "string",
          "count": 0
        }
      ],
      "set": [
        {
          "value": "string",
          "count": 0
        }
      ],
      "rarity": [
        {
          "value": "string",
          "count": 0
        }
      ],
      "seller": [
        {
          "sellerCode": "string",
          "storeName": "string",
          "count": 0
        }
      ],
      "condition": [
        {
          "value": "string",
          "count": 0
        }
      ],
      "language": [
        {
          "value": "string",
          "count": 0
        }
      ],
      "finish": [
        {
          "value": "string",
          "count": 0
        }
      ],
      "collectorNumber": [
        {
          "value": "string",
          "count": 0
        }
      ]
    },
    "nextCursor": "string"
  }
}

Endpoint

EnvironmentURL
Sandboxhttps://api-sandbox.snapcaster.ca/api/v1/marketplace/search
Productionhttps://api.snapcaster.ca/api/v1/marketplace/search
Authentication

None.

Request

Query parameters

keyword string

Free-text terms used to search the catalog.

Constraints: maximum length: 255

category string

The trading-card game category.

Constraints: minimum length: 1; maximum length: 255

set string

The card set or expansion.

Constraints: minimum length: 1; maximum length: 255

rarity string

The rarity assigned to the card printing.

Constraints: minimum length: 1; maximum length: 255

sellerCode string

Constraints: minimum length: 1; maximum length: 64

storeSlug string

Constraints: minimum length: 1; maximum length: 255

condition array of string or string

The normalized condition assigned to the card.

Constraints: string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1

language array of string or string

The language of the card printing.

Constraints: string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1

finish array of string or string

The physical finish or foil treatment of the card.

Constraints: string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1

collectorNumber array of string or string

Constraints: string: minimum length: 1; string: maximum length: 255; array of string: minimum items: 1

checkoutMode string

Constraints: allowed values: express, manual, any

sort string

The ordering applied to the returned records.

Constraints: allowed values: name_asc, name_desc

limit integer

The maximum number of records requested for this page.

Constraints: exclusive minimum: 0; maximum: 100

cursor string

The opaque continuation token for the next page.

Constraints: minimum length: 1

Response

200

A page of the product grid.

Response body: BrowseSearchResponse

success boolean required

Whether the operation completed as requested.

Constraints: allowed values: true

degraded boolean

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.

Constraints: allowed values: true

data object required

The operation or event payload.

Show child fieldsHide child fields
data.items BrowseProductSummary[] required

The records included in this page or batch.

Show child fieldsHide child fields
data.items[].productId integer required

See Canonical catalog in Core concepts.

data.items[].name string or null required
data.items[].set string or null required

The card set or expansion.

data.items[].category string or null required

The trading-card game category.

data.items[].rarity string or null required

The rarity assigned to the card printing.

data.items[].collectorNumber string or null required
data.items[].imageUrl string or null required
data.items[].isSealed boolean required
data.items[].fromPrice number required

Minimum offer price across sellers, in dollars as a decimal amount.

data.items[].sellerCount integer required

Count of distinct sellers offering this product.

data.items[].listingCount integer required

Exact count of browsable offers for this product under the active filters: one per seller-or-store and SKU-or-variant.

data.items[].disclosures ListingDisclosures or null required

Provenance, grading, and authenticity statements shown to the buyer.

Show child fieldsHide child fields
data.items[].disclosures.imageSource string required

Constraints: allowed values: catalog

data.items[].disclosures.conditionSource string required

Constraints: allowed values: seller_declared

data.items[].disclosures.authenticitySource string required

Constraints: allowed values: seller_attestation

data.items[].disclosures.snapcasterInspected boolean required

Constraints: allowed values: false

data.items[].disclosures.snapcasterGraded boolean required

Constraints: allowed values: false

data.items[].disclosures.snapcasterAuthenticated boolean required

Constraints: allowed values: false

data.items[].disclosures.gradingStandard string required

Constraints: allowed values: snapcaster-magic-v1, seller-declared-no-specialist-promise

data.items[].disclosures.declaredGrade string or null required
data.items[].disclosures.buyerProtection string required

Constraints: allowed values: magic-grade-and-authenticity, genuine-and-as-described

data.items[].fulfillmentObligation ListingFulfillmentObligation or null required
Show child fieldsHide child fields
data.items[].fulfillmentObligation.sku string required

The SKU that identifies the card variant.

Constraints: allowed values: exact

data.items[].fulfillmentObligation.printing string required

The card printing the seller must supply.

Constraints: allowed values: exact

data.items[].fulfillmentObligation.language string required

The language of the card printing.

Constraints: allowed values: exact

data.items[].fulfillmentObligation.finish string required

The physical finish or foil treatment of the card.

Constraints: allowed values: exact

data.items[].fulfillmentObligation.condition string required

The normalized condition assigned to the card.

Constraints: allowed values: declared-or-better

data.facets BrowseFacets required

Available filter values and their result counts.

Show child fieldsHide child fields
data.facets.category BrowseFacetValue[] required

The trading-card game category.

Show child fieldsHide child fields
data.facets.category[].value string required
data.facets.category[].count integer required

Number of products carrying this value under the current query.

data.facets.set BrowseFacetValue[] required

The card set or expansion.

Show child fieldsHide child fields
data.facets.set[].value string required
data.facets.set[].count integer required

Number of products carrying this value under the current query.

data.facets.rarity BrowseFacetValue[] required

The rarity assigned to the card printing.

Show child fieldsHide child fields
data.facets.rarity[].value string required
data.facets.rarity[].count integer required

Number of products carrying this value under the current query.

data.facets.seller BrowseSellerFacetValue[] required

One entry per seller with browsable listings matching the query. Each entry includes sellerCode for filtering and the store name for display, plus its count. Includes both express and manual stores. Other facets use { value, count }.

Show child fieldsHide child fields
data.facets.seller[].sellerCode string required

The store's public handle. Pass it as the sellerCode query parameter to filter results to this store.

data.facets.seller[].storeName string required

The store's display name. Use sellerCode as its identifier.

data.facets.seller[].count integer required

Number of the store’s listings under the current query.

data.facets.handoffStore array of object

Eligible Shopify handoff stores with matching offers. New responses always include this array, including when empty; optional for compatibility with older responses.

Show child fieldsHide child fields
data.facets.handoffStore[].storeSlug string required

The Shopify handoff store identity. Pass it as storeSlug, mutually exclusive with sellerCode.

data.facets.handoffStore[].storeName string required
data.facets.handoffStore[].count integer required

Matching offer-document count for this store, independent of pagination.

data.facets.condition BrowseFacetValue[] required

The normalized condition assigned to the card.

Show child fieldsHide child fields
data.facets.condition[].value string required
data.facets.condition[].count integer required

Number of products carrying this value under the current query.

data.facets.language BrowseFacetValue[] required

The language of the card printing.

Show child fieldsHide child fields
data.facets.language[].value string required
data.facets.language[].count integer required

Number of products carrying this value under the current query.

data.facets.finish BrowseFacetValue[] required

The physical finish or foil treatment of the card.

Show child fieldsHide child fields
data.facets.finish[].value string required
data.facets.finish[].count integer required

Number of products carrying this value under the current query.

data.facets.collectorNumber BrowseFacetValue[] required
Show child fieldsHide child fields
data.facets.collectorNumber[].value string required
data.facets.collectorNumber[].count integer required

Number of products carrying this value under the current query.

data.nextCursor string or null required

Opaque keyset cursor for the next page; null on the last page.

Errors

Errors return a MarketplaceError body, except HTTP 500 (ApiError). Error codes explains both error bodies and lists every code.

  • 400 INVALID_REQUEST

    The request failed validation (INVALID_REQUEST).

    Do this: Correct the fields named in the error details, then retry the request.

  • 500 INTERNAL_ERROR

    An 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.