Update a product
Updates a product, and replaces any nested collection included in the body.
-
Omitting
codes,tags,suppliers,variant_attributesorcomponentsleaves that collection untouched; sending[]clears it. -
tags are referenced by tag id; an unknown id is a 400.
-
supply_price is never accepted, neither on the product nor on a nested supplier.
-
variant_options is read-only and ignored if sent.
-
variant_attributes can only change while the product has no live variant children; once it does, a change is a 409.
-
The
versiona GET response returned can be sent back as the concurrency check, same as today’sexpected_version; sending both requires they agree. -
The write is atomic: an invalid entry in any collection applies nothing, not even a scalar change.
-
image_url fetches the image once and imports it through the same pipeline as an admin upload; a fetch failure does not undo the update: it answers 422 IMAGE_FETCH_FAILED with the updated product in data. Gift card products can’t be changed through this endpoint.
-
400 VALIDATION_FAILED: a field failed validation,versionandexpected_versiondisagree, or a variant_attributes rule (more than 3 entries, a position outside 1 to 3, or a duplicate position). -
404 NOT_FOUND: the id is foreign, unknown, or already deleted, or a referenced brand or category was not found. -
409 CONFLICT: variant_attributes changed while the product has live variant children, or a nested code or supplier link conflicts with an existing one. -
409 STALE_VERSION:version/expected_versiondid not match the product’s current version. -
422 UNPROCESSABLE: it is a gift card product, or a codes, tags, suppliers or components cap was exceeded. -
422 IMAGE_FETCH_FAILED: the product was updated but the image could not be imported.
Requires scope: catalog:write
Authorizations
Section titled “Authorizations”Request Body
Section titled “Request Body”object
object
object
object
object
Responses
Section titled “Responses”Update a product
object
object
object
object
The retail price. Integer minor units (cents).
Live supplier links for this product. Never carries supply_price; use the admin UI or an export for cost data.
object
This supplier link’s own id, not the supplier’s id. Distinct from supplier_id below.
Whether this is the product’s primary supplier.
This retailer’s own code for the product at this supplier, if set.
The linked supplier’s id.
The supplier name as of this document.
Tags attached to this product, with names.
object
The tag’s own id, usable to reference it elsewhere.
The tag name as of this document.
Present on a variant parent product; empty on a variant child or an ordinary product.
object
The variant attribute’s id. A variant child’s variant_options reference it as attribute_id.
The attribute name, for example Size or Colour.
Display order among this product’s variant attributes.
object
Opaque delta-sync version. Increases with every change to this document: its own fields, and the addition, removal, or edit of a code, tag link, supplier link, variant option, variant attribute, or component, including when an attached tag or supplier is itself renamed. Use it to detect updates.
Examplegenerated
{ "data": { "active": true, "brand_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "category_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "codes": [ { "code": "example", "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "type": "example" } ], "components": [ { "product_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "quantity": 1 } ], "created_at": "2026-04-15T12:00:00Z", "description": "example", "dimension_unit": "example", "has_inventory": true, "has_variants": true, "height": 1, "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "image_thumb_url": "example", "image_url": "example", "is_composite": true, "is_gift_card": true, "length": 1, "loyalty_amount": 1, "name": "example", "purchase_account_code": "example", "retail_price": 1, "sales_account_code": "example", "sku": "example", "suppliers": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "is_primary": true, "supplier_code": "example", "supplier_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "supplier_name": "example" } ], "tags": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example" } ], "updated_at": "2026-04-15T12:00:00Z", "variant_attributes": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example", "position": 1 } ], "variant_options": [ { "attribute_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "attribute_name": "example", "value": "example" } ], "variant_parent_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "version": "example", "weight": 1, "weight_unit": "example", "width": 1 }}default
Section titled “default”An error response.
object
object
A machine-readable error code, e.g. VALIDATION_FAILED.
object
A plain-English sentence describing what went wrong.
Example
{ "error": { "code": "UNAUTHORIZED" }}