Set the variants
PUT /rest/v1/products/{id}/variants
Sends the product's COMPLETE variant set: entries are matched to existing variants by id, then by sku, and keep their ids. On a matched variant only the fields you send change; variants not in the set are removed; entries with no match are added. Same rules as creation: at most 3 option names and every option combination present (channels publish the full matrix). Removing variants of a product live on a channel asks the two-step confirmation. Re-synced to the channels; can be undone (removed variants come back with their ids). Requires products: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
Path Parameters
Header Parameters
Unique client-generated key (max 255 chars), stored 24h.
length <= 255The one-time token from a 409 confirmation_required answer, to confirm an irreversible action (repeat the same request with it, within 10 minutes).
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/products/string/variants" \ -H "Content-Type: application/json" \ -d '{ "variants": [ {} ] }'{ "id": "prod_66a1f09b2", "object": "product", "title": "Vintage denim jacket", "description": "string", "brand": "string", "category": "string", "short_description": "string", "vat_rate": 0, "mpn": "string", "weight": { "value": "string", "unit": "oz" }, "dimensions": { "length": "string", "width": "string", "height": "string", "unit": "in" }, "tags": [ "string" ], "currency": "string", "status": "ready", "requires_attention": { "reason": "string", "message": "string", "channel": "string", "conflicting_product_ids": [ "string" ], "detected_at": "2019-08-24T14:15:22Z" }, "merged_into": "string", "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", "msrp": "24.90", "quantity": 0, "barcode": "string", "grams": 0, "asin": "string", "images": [ { "image_id": "img_66a1f2", "url": "http://example.com", "position": 0 } ], "options": { "property1": "string", "property2": "string" } } ], "listings": [ { "id": "list_9ac2e", "channel_account_id": "string", "channel": "string", "status": "listed", "url_on_channel": "http://example.com", "overrides": { "title": "string", "description": "string" } } ], "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 October 15, 2026
Need help?
Email us and a human replies, usually within one business day.