Create products export job
Use this endpoint to kick off a background product export job. Use this when the synchronous list endpoints would require many paginated requests, or when you’d rather fire-and-forget the export and poll for completion later.
Required fields:
catalog- product catalog to export from. One ofmarketplaceorswag.format- output file format. Currentlyndjsononly.
Optional filters:
search- free-text search filter.type- product type. One ofphysical,digital,giftCard,donation.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 ofbrand,tags.fields- computed / expanded fields. One or more ofpriceRange,variantsCount,total.
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 (completedorfailed). On completion, the status response includes adownloadUrlsmap of signed URLs (keyed by file identifier or location code). - 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.ltefields rather than the nestedfilter[price][gte]/filter[price][lte]form used in query strings on V3 list endpoints. Same semantics, different ergonomic surface.
Permissions
- Requires:
products:read
Authorizations
Company Level Authentication
Include your API key in the X-Api-Key header for every request:
X-Api-Key: YOUR_API_KEYHeaders
Optional account identifier for swag validation/filtering.
"acc123456"
Optional company identifier for swag validation/filtering.
"cmp123456"
Body
Request body for an async export job. Price filters use flat body fields rather than query-string filter[price][...] syntax.
Product catalog to export from (marketplace | swag).
marketplace, swag "marketplace"
Output file format. Async export is NDJSON-only.
ndjson "ndjson"
Free-text search filter.
Filter by product type (e.g. physical, digital, giftCard, donation).
physical, digital, giftCard, donation "physical"
Filter by brand name.
Filter by one or more brand IDs.
Filter by one or more tag IDs.
Inclusive price range using flat price.gte / price.lte fields (not the nested filter[price][gte] / filter[price][lte] query-string form).
Limit export to up to 100 specific product IDs.
100ISO 3166-1 alpha-2 country codes used for price localisation. Defaults to ["US"].
^[A-Z]{2}$["US"]Related entities to include.
1Related entities to include.
brand, tags ["brand", "tags"]Computed or expanded product fields for list responses.
1Computed or expanded fields for product list responses.
priceRange, variantsCount, total ["priceRange", "variantsCount"]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.
Export job identifier. Poll GET /v3/products/exports/{exportId} until the job reaches a terminal state.
"6650a1b2c3d4e5f6a7b8c9d0"