Export products (cursor pagination)
Bulk-export active products (status = 1) using cursor-based keyset
pagination. Designed for bulk catalog syncs and pipelines.
Each run is anchored to a fixed cutoff time (set on the first request),
so pages are stable even if records are updated mid-run. Order is ascending
by (updated_at, id).
Pagination
| Parameter | Description |
|---|---|
since | Lower bound for updated_at (inclusive). Required on the first page. ISO 8601 date or datetime, UTC recommended. |
cursor | Opaque token from next_cursor on the previous response. Required on follow-up pages. Do not send with since. |
limit | Max records per page. Default 100, maximum 1000. |
Example flow
# 1. Start a run
GET /products/export?since=1970-01-01T00:00:00Z&limit=1000
# 2. Continue while has_more is true
GET /products/export?cursor=<next_cursor>
# 3. Stop when has_more is false
Notes
- The cursor is cryptographically signed; do not modify it.
- Nested data omitted for performance: full BOM line items, variant SKU
rows, attachments, substitutions, priority list, alternate-SKU unit
conversion rule expansion. Use
GET /products/{id}for full detail. - Some deployments rewrite to
index.php?q=$uri&$args; the server ignores theqquery parameter during validation.
Authorizations
Authenticate using a bearer token. To create a token, navigate to /settings/api-tokens and click Create API Token.
Query Parameters
Lower bound for updated_at (inclusive). Required on the first page;
omit when using cursor.
"1970-01-01T00:00:00Z"
Signed continuation token from a previous response's next_cursor.
Required on follow-up pages; cannot be combined with since.
"eyJ2IjoxLCJtb2RlIjoiZXhwb3J0In0.abc123"
Maximum number of products to return per page.
1 <= x <= 1000Response
Successful export page
Signed cursor token to fetch the next page. null when the export is complete.
"eyJ2IjoxLCJtb2RlIjoiZXhwb3J0In0.abc123"
true when the page is full (data.length === limit), indicating more rows may exist.