For AI agents: markdown of this page — /docs-content-en/entities/catalog-skus/update.md documentation index — /llms.txt

Update an SKU

PATCH /v1/catalog-skus/:id

Updates an existing parent product. Fields are passed flat at the root of the JSON. Pass only the fields you want to change — the rest keep their current values.

Parameters

Parameter Type Required Description
Parameterid (path) Typenumber Requiredyes DescriptionParent product identifier. List: GET /v1/catalog-skus

Request fields (body)

Field Type Required Description
Fieldname Typestring Requiredno DescriptionParent product name
Fieldactive Typeboolean Requiredno DescriptionWhether the product is active
FieldiblockSectionId Typenumber Requiredno DescriptionID of the main catalog section. List: GET /v1/catalog-sections
FieldiblockSection Typenumber[] Requiredno DescriptionArray of IDs of all sections the product is linked to. Replaces the previous set entirely
Fieldcode Typestring Requiredno DescriptionProduct symbolic code
FieldxmlId Typestring Requiredno DescriptionExternal code
Fieldsort Typenumber Requiredno DescriptionSort order
FielddateActiveFrom Typedatetime Requiredno DescriptionActivity start date
FielddateActiveTo Typedatetime Requiredno DescriptionActivity end date
FieldpreviewText Typestring Requiredno DescriptionPreview text
FieldpreviewTextType Typestring Requiredno DescriptionPreview text format: text or html
FielddetailText Typestring Requiredno DescriptionDetailed description
FielddetailTextType Typestring Requiredno DescriptionDetailed description format: text or html
FieldpreviewPicture Typeobject Requiredno DescriptionPreview picture: { "fileData": ["name.png", "<base64>"] }. { "remove": "Y" } deletes the picture
FielddetailPicture Typeobject Requiredno DescriptionDetail picture, same format
FieldpropertyNNN Typeobject Requiredno DescriptionCatalog property value as an object { "value": … }, where NNN is the property id from GET /v1/catalog-product-properties: "property301": { "value": "linen" }

Full list of fields — GET /v1/catalog-skus/fields.

The body must contain at least one writable field. An empty PATCH ({}) is rejected with 400 EMPTY_UPDATE_BODY, and a PATCH without a single recognized writable field is rejected with 400 NO_RECOGNIZED_UPDATE_FIELDS. The message of the second error lists the writable fields.

id is passed in the path; it cannot be passed in the body. The type, available, bundle, createdBy, and modifiedBy fields are filled by Bitrix24, and iblockId is set only on create — writing any of them is rejected with 400 READONLY_FIELD.

Examples

curl — personal key

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/catalog-skus/7203" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Basic T-shirt, cotton"
  }'

curl — OAuth application

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/catalog-skus/7203" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Basic T-shirt, cotton"
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-skus/7203', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Basic T-shirt, cotton',
  }),
})

const { success, data } = await res.json()
console.log('New name:', data.name)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-skus/7203', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Basic T-shirt, cotton',
  }),
})

const { success, data } = await res.json()

Response fields

Field Type Description
Fieldsuccess Typeboolean DescriptionAlways true on success
Fielddata Typeobject DescriptionFull object of the updated parent product. The field set is the same as GET /v1/catalog-skus/:id

Response example

The main fields are shown; propertyNNN properties are omitted.

JSON
{
  "success": true,
  "data": {
    "id": 7203,
    "iblockId": 25,
    "iblockSectionId": null,
    "iblockSection": null,
    "name": "Basic T-shirt, cotton",
    "type": 3,
    "active": true,
    "available": true,
    "bundle": false,
    "code": null,
    "xmlId": "7203",
    "sort": 500,
    "createdBy": 1295,
    "modifiedBy": 1295,
    "dateCreate": "2026-10-08T18:45:34.000Z",
    "timestampX": "2026-10-08T18:46:21.000Z"
  }
}

Error response example

404 — no parent product with the specified id exists:

JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "sku does not exist."
  }
}

Errors

HTTP Code Description
HTTP404 CodeENTITY_NOT_FOUND DescriptionNo product with the specified id exists (sku does not exist.)
HTTP404 CodeENTITY_NOT_FOUND DescriptionThe id belongs to a regular product (catalogSku <id> not found). The update is still written, see "Known specifics"
HTTP400 CodeEMPTY_UPDATE_BODY DescriptionThe request body is empty — pass at least one field
HTTP400 CodeNO_RECOGNIZED_UPDATE_FIELDS DescriptionThe body contains no recognized writable field. The message lists the writable fields
HTTP400 CodeREADONLY_FIELD DescriptionA read-only field was passed in the body: id, type, iblockId, available, bundle, createdBy, modifiedBy
HTTP403 CodeSCOPE_DENIED DescriptionThe key lacks the catalog scope
HTTP401 CodeMISSING_API_KEY DescriptionThe X-Api-Key header was not passed

Full list of common API errors — Errors.

Known specifics

A catalog property is passed as an object. A PATCH with a scalar property value returns 200 but does not write the value: a string property is cleared, and a checkbox keeps its previous value. Pass { "value": … } — this changes both a string and a "Y"/"N" checkbox.

The method does not check that the id belongs to a parent product. With the id of a regular product, the call updates that product and returns 404 ENTITY_NOT_FOUND with the message catalogSku <id> not found — here 404 does not mean the write failed. Check the record before updating: GET /v1/catalog-skus/:id returns 404 ENTITY_NOT_FOUND for an id that does not belong to a parent product.

See also