API ReferenceFull Dump

Full dump

GET /api/v1/merchant/items/full-dump

Entire 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

HeaderDirectionNotes
If-None-MatchrequestSend the previous ETag to receive 304 Not Modified.
Accept-EncodingrequestAlways send gzip — the dump is ~2.9 GB raw vs ~540 MB gzipped.
ETagresponseWeak ETag (W/"…") of the current dump.
Last-ModifiedresponseHTTP-date of the last regeneration.
X-Items-CountresponseTotal items in the dump.
Content-Encodingresponsegzip 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.json

200 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

HTTPcodeWhen
503FEED_NOT_READYBriefly after a deploy until the first dump is generated (≤2–3 min).