Skip to main content
POST
Create products export
Required fields
  • catalog - product catalog to export from. One of marketplace, swag, giftCards, or donations.
  • format - output file format. Currently ndjson only.
Optional filters
  • search - free-text search filter.
  • brandName - filter by brand name.
  • brandId - array of brand IDs.
  • tagId - array of tag IDs.
  • productIds - array of specific product IDs to export (max 100).
  • price.gte / price.lte - inclusive price range (flat body fields; see note below).
  • locations - ISO 3166-1 alpha-2 country codes for price localisation (default ["US"]).
Optional response shaping
  • include - related entities to include. One or more of brand, tags.
  • fields - computed / expanded fields. One or more of priceRange, variantsCount.
Optional headers
  • Snappy-Account-Id - optional account scoping.
  • Snappy-Company-Id - optional company scoping.
Behavior notes
  • Returns 200 OK immediately with an exportId. The job runs in the background.
  • Poll GET /v3/products/exports/{exportId} until the job reaches a terminal state (completed or failed). On completion, the status response includes a downloadUrls map of signed URLs (keyed by file identifier or location code).
  • The exported NDJSON file contains one product per line, each with its full variant list and per-country availability. fields does not control which variants are included - all variants are always exported. See NDJSON export format for the full shape.
  • The export record expires 48 hours after creation. Download the file(s) before that - expired records cannot be re-issued; you’ll need to create a new export job.
  • Body-level price filters use flat price.gte / price.lte fields rather than the nested filter[price][gte] / filter[price][lte] form used in query strings on V3 list endpoints. Same semantics, different ergonomic surface.

Permissions

Requires: products:read

Authorizations

X-Api-Key
string
header
required

Company Level Authentication

Include your API key in the X-Api-Key header for every request:

Headers

snappy-account-id
string

Optional account identifier for swag validation/filtering.

Example:

"acc123456"

snappy-company-id
string

Optional company identifier for swag validation/filtering.

Example:

"cmp123456"

Body

application/json

Request body for an async export job. Price filters use flat body fields rather than query-string filter[price][...] syntax.

catalog
enum<string>
default:marketplace
required

Product catalog to export from (marketplace | swag | giftCards | donations).

Available options:
marketplace,
swag,
giftCards,
donations
Example:

"marketplace"

format
enum<string>
required

Output file format. Async export is NDJSON-only.

Available options:
ndjson
Example:

"ndjson"

Free-text search filter.

brandName
string

Filter by brand name.

brandId
string[]

Filter by one or more brand IDs.

tagId
string[]

Filter by one or more tag IDs.

price
object

Inclusive price range using flat price.gte / price.lte fields (not the nested filter[price][gte] / filter[price][lte] query-string form).

productIds
string[]

Limit export to up to 100 specific product IDs.

Maximum array length: 100
locations
string[]

ISO 3166-1 alpha-2 country codes used for price localisation. Defaults to ["US"].

Pattern: ^[A-Z]{2}$
Example:
include
enum<string>[]

Related entities to include.

Minimum array length: 1

Related entities to include.

Available options:
brand,
tags
Example:
fields
enum<string>[]

Computed or expanded product fields for list responses.

Minimum array length: 1

Computed or expanded fields for product list responses.

Available options:
priceRange,
variantsCount
Example:

Response

Export job accepted (200 OK). Poll the returned exportId via GET /v3/products/exports/{exportId}.

Export job accepted. The job runs in the background; poll GET /v3/products/exports/{exportId} for status.

exportId
string
required

Export job identifier. Poll GET /v3/products/exports/{exportId} until the job reaches a terminal state.

Example:

"6650a1b2c3d4e5f6a7b8c9d0"

Last modified on August 3, 2026