Update Draft (overrides, images, structure)
PUT/api/v2/listing-drafts/:draft
Update a draft — saves field_overrides, image_urls, and structural changes (sales_channel_category_id, sales_channel_product_template_id, sales_channel_listing_profile_id), then re-resolves and re-validates. The draft transitions to ready when no validation errors remain.
products:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
field_overrides values come in two shapes:
- Literal value (string / number / bool / array for multiselect) — used verbatim, provenance
override. - Mapped source — an object
{"source_type": ..., "source_value": ...}that re-resolves from product data on every validate/publish.source_typemust be one ofproduct_field(whitelisted product columns — see GET /api/v2/listing-drafts/mappable-product-fields),product_attribute(an Attribute id),static(literal string), orexpression(mustache tokens, e.g.{{product.sku}} - {{product.name}}). A mapped override that resolves to null stays null (no fall-through to template/mapping values) so required-field validation can flag it.
Passing an invalid source_type, or a source_value that is not a scalar, returns 422.
Fields:
field_overrides(nullable, object) — map of field name to literal value or mapped source (see above).sales_channel_category_id(nullable, integer)sales_channel_product_template_id(nullable, integer)sales_channel_listing_profile_id(nullable, integer)image_urls(nullable, array of strings)
Authentication: Requires Bearer token.
variant_context — describes whether this draft targets a single VARIANT of a matrix family rather than the family itself. When is_variant_child is true, parent_sku / parent_name identify the family and sibling_count is how many variants it has. Publishing a single child is permitted, but it creates a standalone channel item with no variant group — publish the parent to list the whole family as one grouped listing. null when the draft has no product.
Each field's schema reports the channel's constraints. cardinality is the MAXIMUM number of values the field accepts (0 = unbounded) and min_cardinality is the MINIMUM (0 = none). A channel can require several entries on one field - Walmart's Cloth Baby Diapers category asks for at least 4 Key Features and 4 additional images - and rejects the item after accepting the submission, so supply at least min_cardinality values before publishing.
category_provenance (optional: override | type_map | manual) records where a changed category came from. Omitting field_overrides leaves the draft's saved overrides untouched; send an empty array to clear them.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Content
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.