Catalog
Your product catalog — every orderable item with its price, stock, product type
and input form — is published as a single downloadable snapshot. Download it,
read it locally, and use each item’s id and fields to
place orders. There is no paginated “list products” API endpoint; the snapshot
is the catalog.
Get your catalog link
Copy your catalog download URL from the dashboard API page — the same page where you manage API keys and webhooks. It looks like:
No separate authentication is needed to download the file, so keep your catalog link private.
What you get
The download is a single-file LMDB database, compressed with zstandard:
- One file, one keyspace. Items live in LMDB’s default database. Each item is one record — key = the 8-byte big-endian item id, value = a compact JSON object.
- Self-contained records. Every item embeds its full input form (
fields, each choice field with itsoptions) inline, so a single key lookup gives you everything you need to order that item. - Small and fast. A full catalog compresses ~45× (a ~1.5 MB database → ~34 KB). Decompress once, then memory-map the database and read it with no server round-trips.
Prices in the catalog are in cents (integers). Your final charge is always confirmed by the order response and your balance — see Placing orders.
Download and open it
Install the two readers, then download → decompress → open read-only. Use your catalog URL from the dashboard in place of the placeholder below.
Record schema
Each value is a JSON object:
Each entry in fields:
Using the catalog with the Orders API
Everything you need to build a POST /v1/orders request is in the record:
item_id= the record’sid.quantity— bounded bymin_quantity/max_quantity. Required fortopup(decimal) andkey(integer, default1); omit forservice.fields— required fortopupandservice. Key each entry by the field’sname. For achoicefield, send the selected option’sid; for text fields, send the string.
Staying up to date
The snapshot is regenerated regularly. Its freshness is the object’s HTTP
ETag / Last-Modified — use a conditional request so you only re-download
when it actually changed:
With requests, a 304 Not Modified comes back as an ordinary response — check
response.status_code == 304 to see your copy is still current and keep the file
you already have. Only a 200 streams a fresh snapshot straight into
catalog.lmdb and bumps the stored ETag.