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, total, ranking. Include ranking to add Snappy’s per-country catalog-ranking score (0-100, higher is stronger) to each product in the exported file. The score represents the product’s general standing within each country’s catalog and is independent of your filters or collection context. Does not represent search relevance or position in the response.
Optional headers:
  • Snappy-Account-Id - optional account 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

Must be provided to retrieve swag products.

Example:

"acc123456"

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. One or more of priceRange, variantsCount, ranking. ranking is export-only and is not accepted on GET product endpoints.

Computed or expanded fields for product export jobs. Same values as list fields, plus export-only ranking. Not accepted on GET product endpoints.

Available options:
priceRange,
variantsCount,
ranking
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 September 18, 2026