API ReferenceInventory

Batch update stock and prices by SKU

POST /rest/v1/inventory/batch

POST
/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.

AuthorizationBearer <token>

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

Idempotency-Key?string

Unique client-generated key (max 255 chars), stored 24h.

Lengthlength <= 255

Request 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.