Skip to main content
A Variant is the orderable unit in the Snappy catalog - the specific version of a Product with concrete pricing, size, color, or other distinguishing attributes. When placing an order, you always specify a variantId (never just a productId). The V3 Variants API lets you retrieve individual variants by ID and check their availability across countries.
Want to understand how Variants fit into the bigger picture? Check out the Core Concepts & Data Models page.
To list all variants for a specific product, use GET /v3/products/{productId}/variants - this is part of the Products API since it’s scoped to a product.

The Variant Object

FieldTypeDescription
idstringUnique identifier of the variant - required when placing an order
titlestringDisplay name of the variant
productIdstringParent product identifier
selectedOptionsobjectKey-value option values for this variant (e.g. {"color": "Black", "size": "M"})
taxablebooleanWhether the variant is taxable
mediaarrayVariant-specific media items
personalizationobjectPersonalization metadata (whether personalization is supported, available template fields). Nullable when unavailable.
descriptionHtmlstringFull narrative HTML description
priceobjectVariant price in {amount, currency}. Returned only when fields includes price.
priceBreakdownobjectDetailed pricing breakdown. Returned only when fields includes priceBreakdown (implies price).
partnerPriceobjectPartner-specific price for the requested location. Returned only for partner companies when pricing is requested.
detailsobjectStructured details wrapper (description, features, specifications). Returned only when fields includes details.
brandobjectReturned only when include=brand. Nullable.

Key Concepts & Business Rules

Default response is lean

By default, variant responses omit price, priceBreakdown, partnerPrice, and details. Use fields to request these when you need them:
  • fields=price - adds price (and partnerPrice for partner companies)
  • fields=priceBreakdown - adds priceBreakdown and implies price
  • fields=details - adds the structured details wrapper
This keeps responses small for browse and search use cases while letting checkout flows pull the full data they need.

Pricing is per country

Variant pricing depends on the recipient’s shipping country. Two ways to retrieve it:
  • For a specific country - use GET /v3/variants/{variantId} with location (default US) and fields=price (or priceBreakdown)
  • Across all countries - use GET /v3/variants/{variantId}/availability to retrieve the full per-country availability map

partnerPrice is partner-only

The partnerPrice field is returned only for partner companies, and only when pricing is requested via fields=price (or fields=priceBreakdown). For non-partner companies, this field is omitted from the response entirely.

Personalization data

The personalization object indicates whether the variant supports custom personalization (e.g. a printed name or message) and what template fields are configurable. It is null when personalization isn’t available for the variant.

Availability vs pricing

The availability endpoint returns a map of countries the variant ships to, with country-specific pricing inline. Country codes not present in the response should be treated as isAvailable: false - only supported countries are returned. For per-recipient validation, the typical pattern is: check availability once via GET /v3/variants/{variantId}/availability, then place an order with the appropriate location parameter on POST /v3/orders.

Account scoping

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

Permissions

All V3 Variants endpoints require the products:read scope. (The Variants API shares the products:read scope with the Products API since they’re part of the same catalog domain.)

How to Work with Variants

Get a single variant
GET /v3/variants/{variantId}
Returns a single variant by its ID. Use fields to expand pricing and details, and include=brand to inline the brand object. Get variant availability
GET /v3/variants/{variantId}/availability
Returns an availability map keyed by ISO 3166-1 alpha-2 country code. Each entry indicates whether the variant ships to that country and includes the country-specific pricing.
Looking for swag base variants (variations of branded merchandise templates) instead of marketplace variants? See the Swag page.
Last modified on June 18, 2026