GET /v1/exports to receive product, store, and inventory file links pinned to the same immutable publication revision.
nektir_export_header record containing its schema version, revision, publication time, and data-record count. Remaining records have record_type equal to product, store, or inventory and a data object.
Download every file from one manifest before switching revisions. A file’s strong ETag and bytes never change, but an older revision remains available only during the API’s publication-history retention window. Store the revision UUID with your imported rows and publish your own synchronized view only after all expected files and record counts validate.
Bulk exports reduce API pagination work; they do not alter upstream polling or make source data newer.
For a runnable TypeScript importer with restartable change processing, see
Import snapshots and follow observed changes.
Cold builds and retries
Download resources sequentially. A cold API instance builds one archive at a time; requests for that same revision and resource share its build. A different cold archive can return503 with problem code EXPORT_UNAVAILABLE and Retry-After.
Wait, add jitter, and retry the same pinned URL rather than requesting a new manifest.
Keep the last complete imported dataset until all files validate.
An export URL can return 410 CURSOR_EXPIRED after its revision leaves retention.
Discard that incomplete candidate, obtain a new manifest, and restart all three
files. Do not mix files from the old and new revisions or publish partial data.
Bound retries and keep the last complete imported dataset if recovery cannot
finish. If following a change stream, capture a new starting checkpoint before
the replacement baseline, as described in the synchronization guide.
Retention uses the revision’s publication time, not when you requested a manifest.
An old revision can remain current for a long time and then become unavailable
immediately after supersession. A recently downloaded file is not an availability
lease on that revision. A retained archive’s unchanged ETag still supports 304;
expiry does not mean its bytes changed.
If the publication changes and expires while a manifest is being prepared,
GET /v1/exports can also return 503 EXPORT_UNAVAILABLE; retry the manifest request.
Exports are generated in bounded database batches and compressed incrementally.
Configured row, byte or build-time limits also return 503 EXPORT_UNAVAILABLE,
without sending a partial archive. If that response persists rather than clearing
after another build finishes, retain request_id for the operator; an over-limit
archive needs operator attention, not endless retries.
The example above asks curl to decompress HTTP gzip into plain NDJSON. To retain
the gzip file instead, omit --compressed and use an .ndjson.gz output filename.