Full dump
GET /api/v1/merchant/items/full-dumpEntire active catalogue in a single response. Regenerated every ~2 minutes, pre-gzipped in Redis.
Use this for bulk sync instead of walking /items
page by page.
Requires Authorization: Bearer mer_live_… (Authentication).
Headers
| Header | Direction | Notes |
|---|---|---|
If-None-Match | request | Send the previous ETag to receive 304 Not Modified. |
Accept-Encoding | request | Always send gzip — the dump is ~2.9 GB raw vs ~540 MB gzipped. |
ETag | response | Weak ETag (W/"…") of the current dump. |
Last-Modified | response | HTTP-date of the last regeneration. |
X-Items-Count | response | Total items in the dump. |
Content-Encoding | response | gzip when the client advertised it; otherwise omitted. |
Example
⚠️
Always send Accept-Encoding: gzip. The uncompressed dump is ~2.9 GB; gzipped
it’s ~540 MB (−80%). Without the header every call downloads the full ~2.9 GB. Pair it
with If-None-Match to skip the body entirely (304) when the catalogue is unchanged.
# Accept-Encoding: gzip → server returns the ~540 MB compressed blob (vs ~2.9 GB raw).
# --compressed tells curl to decompress the response; -o writes it to a file (it's large).
curl --compressed "https://merchant-api.tradeon.market/api/v1/merchant/items/full-dump" \
-H "Authorization: Bearer mer_live_…" \
-H "Accept-Encoding: gzip" \
-H 'If-None-Match: "etag-from-previous-call"' \
-o catalogue.json200 OK body:
{
"generated_at": "2026-06-24T18:00:00.000Z",
"items_count": 2382005,
"items": [ /* ... CatalogItem objects ... */ ]
}Each entry follows the CatalogItem schema.
304 Not Modified — your ETag matches; no body.
Errors
| HTTP | code | When |
|---|---|---|
| 503 | FEED_NOT_READY | Briefly after a deploy until the first dump is generated (≤2–3 min). |