Update a product
PATCH /rest/v1/products/{id}
Applies the local update synchronously and returns the full updated product with a sync block describing channel propagation.
Images are updated through this endpoint: send the desired images[] array — elements with a known id are kept untouched (never re-uploaded, channel-side image ids preserved), elements without an id are added (hosted on Nembol's storage, whether you pass a URL or base64), and ids you omit are removed (and deleted from storage). Array order is display order. Omit the field entirely to leave images unchanged. New uploads count toward a daily quota of 500 images per store (429 upload_quota_exceeded).
Concurrency is last-write-wins; pass expected_updated_at to fail with 412 if the product changed since you read it.
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
Path Parameters
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.
1 <= propertiesResponse Body
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/products/string" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "prod_66a1f09b2", "object": "product", "title": "Vintage denim jacket", "description": "string", "brand": "string", "tags": [ "string" ], "currency": "string", "status": "ready", "sync_status": "ok", "images": [ { "id": "img_ph1x8", "object": "image", "url": "http://example.com", "alt": "string", "position": 0 } ], "variants": [ { "id": "var_66a1f1", "object": "variant", "sku": "VDJ-M-001", "title": "string", "price": "19.90", "quantity": 0, "barcode": "string", "options": { "property1": "string", "property2": "string" } } ], "listings": [ { "id": "list_9ac2e", "channel_account_id": "string", "channel": "string", "status": "listed", "url_on_channel": "http://example.com" } ], "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "sync": { "operation_id": "op_8fd2c1", "channels": [ { "channel_account_id": "string", "status": "pending" } ] }}Last updated on July 28, 2026
Need help?
The API is in private beta — email us and a human replies, usually within one business day.