Batch update stock and prices by SKU
POST /rest/v1/inventory/batch
Update quantity and/or price for up to 100 SKUs in one call. Unknown or ambiguous (duplicated) SKUs are rejected per-item in rejected_items without failing the rest, AND appear in the operation's results as failed with the same code, so the operation ends partial and an alert on its status sees them (a SKU renamed in your system never looks synced). When no item at all can be applied, the call answers 422 no_items_applied with the reasons in error.details.rejected_items, and nothing is changed.
The change is saved in Nembol at once, then pushed to every channel the product is live on. The operation has one result per SKU and per live channel (channel_account_id, listing_id): pending until that channel answers, then succeeded (the channel has the new stock / price) or failed with the channel's message. One failed channel makes the operation partial: watch operation.completed. A product live on no channel gets a single result with channel_account_id: null, already succeeded: saved in Nembol, nothing to push.
Required scope: inventory:write.
Authorization
apiKey Authorization: Bearer nbl_live_... (or nbl_test_... for test mode). Test-mode writes are validated and simulated but never persisted and never touch channels; simulated results are marked simulated.
In: header
Header Parameters
Unique client-generated key (max 255 chars), stored 24h.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/inventory/batch" \ -H "Content-Type: application/json" \ -d '{ "items": [ { "sku": "string" } ] }'{ "id": "op_8fd2c1", "object": "operation", "type": "string", "status": "pending", "resource_type": "string", "resource_id": "string", "results": [ { "channel_account_id": "string", "product_id": "string", "listing_id": "string", "sku": "string", "variant_id": "string", "previous_price": "19.90", "price": "19.90", "status": "pending", "error": { "code": "string", "message": "string", "details": {} } } ], "import": { "source": "channel", "channel_account_id": "string", "filters": {}, "warnings": [ "string" ], "processed": 0, "total": 0, "created": 0, "updated": 0, "unchanged": 0, "linked": 0, "not_imported": 0, "requires_attention": 0, "error": "string", "undone_at": "2019-08-24T14:15:22Z", "undo": { "removed": 0, "unlinked": 0, "kept": { "live_on_a_channel": 0, "modified_after_import": 0 } } }, "created_at": "2019-08-24T14:15:22Z", "completed_at": "2019-08-24T14:15:22Z", "rejected_items": [ { "sku": "string", "error": { "type": "invalid_request_error", "code": "string", "message": "string", "param": "string", "doc_url": "http://example.com", "details": {} } } ]}Last updated on October 18, 2026
Need help?
Email us and a human replies, usually within one business day.