Skip to main content
A Product is a single specific item available in the Snappy catalog - a physical gift, branded swag, a digital item, a gift card, or a donation. The V3 Products API lets you browse and retrieve products, search the catalog, and discover the tags used to categorize them. Each Product is the display-level entity; the actual orderable units are Variants, retrievable via the product’s variants endpoint or through the Variants API.
Want to understand how Products fit into the bigger picture? Check out the Core Concepts & Data Models page.
Products belong to one of two catalogs: marketplace (Snappy’s curated gift catalog) or swag (branded merchandise templates). Use the filter[catalog] parameter to choose which catalog to query.

The Product Object

FieldTypeDescription
idstringStable product identifier
titlestringDisplay name of the product
createdAtstring (ISO 8601)When the product was added to the catalog
mediaarrayProduct media items (images, video). Each item contains type and src.
categoryobjectCategory taxonomy. Contains fullName - full path separated by /.
catalogenummarketplace or swag
typeenumProduct type. One of: physical, digital, giftCard, donation
brandobjectReturned only when include=brand. Contains id, name, description. Nullable.
tagsarrayReturned only when include=tags. Each tag has id and name.
optionsarrayAggregated variant options (e.g. color, size). Returned only when fields includes options.
priceRangeobjectMin/max pricing across the product’s variants. Returned only when fields includes priceRange.
variantsCountintegerNumber of variants. Returned only when fields includes variantsCount.
In V3, type is a single value (not an array as in V2). Use the filter[type] query parameter to filter by type on list endpoints.

Key Concepts & Business Rules

Catalog selection - marketplace vs swag

Every Product belongs to one of two catalogs:
CatalogWhat it contains
marketplace (default)Curated gifts from third-party brands - physical items, digital items, gift cards, donations
swagBranded merchandise templates
The filter[catalog] parameter is required on list endpoints (defaults to marketplace). Use swag to retrieve swag templates.

Always order by Variant - not Product

Products are the display-level entity. Variants are the orderable units. When placing an order, always use the variantId, not the productId. Retrieve a product’s variants using GET /v3/products/{productId}/variants.

Expanding products with include and fields

V3 uses JSON:API conventions to keep responses lean by default and expand only what you need:
  • include - return related entities as full objects. Supported values: brand, tags.
  • fields - return additional computed/expanded fields. On the list endpoint: priceRange, variantsCount, total. On the single-product endpoint: options, priceRange, variantsCount.
Combine them in a single request:
GET /v3/products?include=brand,tags&fields=priceRange,variantsCount

Filtering

V3 follows JSON:API filtering conventions on the list endpoint:
  • filter[catalog] - marketplace or swag (defaults to marketplace)
  • filter[type] - exact match on product type
  • filter[search] - free-text search across title, category, and brand
  • filter[brandId] - comma-separated list of brand IDs (OR semantics)
  • filter[brandName] - case-insensitive substring search on brand name
  • filter[tagId] - comma-separated list of tag IDs (OR semantics)
  • filter[price][gte] / filter[price][lte] - inclusive price range
Multiple filter[...] expressions are ANDed. Unknown filter keys return 400.

Pagination and sorting

The list endpoint uses cursor pagination (page[cursor], page[size], max 300, default 100). The variants-by-product endpoint uses page-number pagination (page[number], page[size]). See Request & Response Standards for the full pagination contract. Sortable fields on the list endpoint: minPrice, createdAt. Prefix with - for descending order.

Location scoping

Pass location (ISO 3166-1 alpha-2 country code) to scope pricing and availability to a specific recipient country. Defaults to US.

Account scoping

Optional Snappy-Account-Id and Snappy-Company-Id headers scope queries to a specific Account or Company - used primarily for swag validation and filtering.

Permissions

All V3 Products endpoints require the products:read scope.

How to Work with Products

List products
GET /v3/products
Returns a paginated list of products across all collections. Filter by catalog, type, brand, tag, price, or free-text search. Get a single product
GET /v3/products/{productId}
Returns product-level fields only. Use the variants endpoint below to retrieve the product’s variants. List variants for a product
GET /v3/products/{productId}/variants
Returns the product’s variants as a paginated list. Use fields to expand pricing and details. List product tags
GET /v3/product-tags
Returns a paginated list of available product tags. Use title to filter by name (minimum 3 characters).
Looking for branded swag templates instead of marketplace products? See the Swag page.
Last modified on June 18, 2026