Sync stock and prices in bulk
Push quantity and price changes for up to 100 SKUs per call, and read per-item outcomes.
For recurring syncs from an ERP or warehouse, POST /inventory/batch is the
endpoint to build on: it addresses variants by SKU, so you don't need to
store Nembol ids at all.
curl -X POST https://api.nembol.com/rest/v1/inventory/batch \
-H "Authorization: Bearer $NEMBOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: stock-sync-2026-07-30T22:00" \
-d '{"items": [
{"sku": "VDJ-M-001", "quantity": 12},
{"sku": "VDJ-L-001", "quantity": 0, "price": "44.90"}
]}'The local write is immediate; channel propagation is asynchronous. The
response is an operation — per-item results land in results[], and
items that can't be matched come back in rejected_items with a reason
(sku_not_found, sku_ambiguous) without failing the rest.
Full catalog upserts
To create-or-update whole products (content included), use
POST /products/batch — same per-SKU matching, up to 100 items, per-item
outcomes, status: "partial" when only some fail. Unmatched SKUs are
created (title required), matched ones are updated.
Gotchas
- One Idempotency-Key per batch run. Retrying a timed-out batch with the same key replays the stored outcome instead of double-applying it.
- Batch updates don't take images. A matched item with
images[]fails (per-item) — update images withPATCH /products/{id}instead. quantity: 0is a real value — it sold-outs the variant everywhere.- Watch
operation.completedinstead of polling if you sync frequently. - Prices are strings (
"44.90"), always in the store's base currency. - A channel can show "out of stock" with stock on hand: sellers can set
a per-channel stock buffer (
inventoryonGET /channel_accounts) — below the threshold the channel lists the product as unavailable on purpose.
Last updated on July 30, 2026
Need help?
The API is in private beta — email us and a human replies, usually within one business day.