catalog.product.update
Patch product fields. Price and stock are NOT here — use catalog.price.set / catalog.stock.set.
- scope:
catalog:write - storefront-visible (bumps the catalog generation): yes
- destructive: no
Payload
| field | type | required | notes |
|---|---|---|---|
id | string (/^prd_[a-zA-Z0-9]{1,32}$/) | yes | |
patch | object | yes | |
title | string (≤200 chars) | no | |
handle | string (/^a-z0-9?$/, ≤64 chars) | no | |
descriptionMd | string (≤20000 chars) | no | |
categoryId | string (/^cat_[a-zA-Z0-9]{1,32}$/) | null | no | |
badges | array<string (/^[a-z0-9-]{1,24}$/)> (≤10) | no | |
status | "draft" | "active" | no | |
lowStockThreshold | integer (1..1000000) | null | no |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^prd_[a-zA-Z0-9]{1,32}$"
},
"patch": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"handle": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$"
},
"descriptionMd": {
"type": "string",
"maxLength": 20000
},
"categoryId": {
"anyOf": [
{
"type": "string",
"pattern": "^cat_[a-zA-Z0-9]{1,32}$"
},
{
"type": "null"
}
]
},
"badges": {
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9-]{1,24}$"
}
},
"status": {
"type": "string",
"enum": [
"draft",
"active"
]
},
"lowStockThreshold": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 1000000
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"required": [
"id",
"patch"
],
"additionalProperties": false
}Generated from the live platform registries at build time — reference pages cannot go stale. Markdown variant: /reference/commands/catalog.product.update.md