Same API key, different conventions. The same
X-Api-Key authenticates both V2 and V3 - the version is in the URL path (/v2/... vs /v3/...). Pick the version that matches your endpoint; the conventions on this page follow the version of the endpoint you’re calling.Version Conventions at a Glance
Field Selection
Snappy lets you control which fields a response includes via thefields query parameter on GET requests. This is particularly useful for mobile integrations and high-volume data processing where bandwidth and parsing speed matter. The fields parameter works identically in V2 and V3.
Constraints
- Parent object only.
fieldsapplies to the primary object in the response - you can’t project fields on nested objects via this parameter. - No spaces. Use commas only (
id,name,type), notid, name, type. - Case-sensitive. Field names must match the casing in the API reference exactly.
- Defaults vary by endpoint. Each endpoint documents its own default field set - check the endpoint reference if you’re seeing fewer fields than expected.
Related-Entity Hydration
To reduce round-trips, both V2 and V3 let you hydrate related entities inline - replacing a foreign-key reference with the full related object. The parameter name and syntax differ.V3 - include (JSON:API)
In V3, the include query parameter takes a comma-separated list of related-entity names. Hydrated entities appear inline within their parent.
Example:
brand field is replaced by the full Brand object, and tags returns the full Tag objects rather than just IDs.
Common V3 expandable entities:
- Products / Collections -
brand,tags - Orders - (no V3 includes; responses already carry full line items, recipient, and fulfillments)
The API reference for each endpoint lists supported
includevalues.
V2 - expand[]
In V2, the expand[] query parameter takes an array of expandable entity names. Each ID-based reference becomes the full object.
Default V2 response:
product, recipient, campaign.
Best practices (both versions)
- Only hydrate what your client actually needs - every expansion adds latency and payload weight.
- Expansion is especially valuable for mobile clients where round-trip count is the bottleneck.
- In V2 you can combine
expand[]withfieldsprojection; in V3 you can combineincludewith additivefields.
Pagination
V2 uses offset-based pagination; V3 uses JSON:API page-number pagination (with cursor pagination on a small number of high-volume endpoints).V3 - page[number] / page[size] (page-number, default)
Most V3 list endpoints use 1-indexed page-number pagination.
V3 - page[cursor] / page[size] (cursor, product list endpoints)
A small number of high-volume V3 endpoints - currently GET /v3/products, GET /v3/collections/{collectionId}/products, and GET /v3/products/{productId}/variants - use cursor pagination instead.
V2 - skip / limit (offset)
V2 list endpoints use offset-based pagination.
- The number of items in
resultsis less thanlimit. resultsis empty.
Filtering (V3)
V3 standardizes filtering with JSON:API-stylefilter[field] query parameters. Range filters use nested brackets: filter[field][gte] (inclusive lower bound) and filter[field][lte] (inclusive upper bound).
- Exact match -
filter[status]=active - Multi-value -
filter[idempotencyKey]=key_a,key_b,key_c(comma-separated) - Range -
filter[price][gte]=25&filter[price][lte]=200 - Free-text search -
filter[search]=cold+brewV2 endpoints filter too, but the parameter names and shapes are bespoke per endpoint - check the endpoint documentation.
Sorting (V3)
V3 standardizes sorting with a singlesort query parameter. Prefix the field with - for descending order. Single field per request.
Metadata
Metadata lets you attach custom key-value pairs to Snappy resources (Gifts, Orders, etc.). Metadata round-trips: any pairs you provide at creation appear in subsequentGET responses and in webhook payloads.
Supported on both V2 and V3.
Date Formats
Both V2 and V3 use ISO 8601 for all date and time fields. All timestamps are returned in UTC.- Format:
YYYY-MM-DDTHH:mm:ss.sssZ - Example:
2026-04-13T12:00:00.000Z
Error Responses
When a request can’t be processed, Snappy returns a flat error object alongside the relevant HTTP status code. The error shape is the same in V2 and V3. The structure differs slightly between validation errors (HTTP400) and all other errors.
Validation errors (HTTP 400):