Update Product Template
PUT/api/v2/sales-channels/:salesChannel/product-templates/:template
Updates a product template. Every field is optional — send only what changes.
is_default marks the template preselected when publishing a product in this category. At most one template per sales channel + category can be the default — setting it here clears the flag from any other template in the same category.
Sending fields REPLACES the template's field defaults with the array supplied.
Each entry in fields sets a default for one attribute and targets EITHER a channel category field (sales_channel_category_field_id) OR a core listing field by name (core_field_name, e.g. Title / Description / Price) — not both.
source_type is one of product_field, product_attribute, static, expression. source_value is the product column, attribute id, literal, or expression to read.
A multi-value attribute takes a JSON array literal as its static source_value (e.g. ["Feature one","Feature two","Feature three"]); a scalar source such as expression can only ever produce one value and will fail a minimum-value rule.
Authentication: Requires Bearer token with the products scope.
products:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
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.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
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.