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

Update a service

PATCH /v1/catalog-services/:id

Updates an existing catalog service. Fields are passed flat at the root of the JSON; pass only the fields you change — the rest keep their current values.

Parameters

Parameter Type Required Description
Parameterid (path) Typenumber Requiredyes DescriptionService identifier. List: GET /v1/catalog-services

Request fields (body)

The main writable fields are name, active, available, and iblockSectionId.

Field Type Required Description
Fieldname Typestring Requiredno DescriptionService name
Fieldactive Typeboolean Requiredno DescriptionWhether the service is active
Fieldavailable Typeboolean Requiredno DescriptionWhether the service is available for purchase
FieldiblockSectionId Typenumber Requiredno DescriptionMain catalog section ID. List: GET /v1/catalog-sections
FieldiblockSection Typearray Requiredno DescriptionArray of IDs of all catalog sections the service belongs to. List: GET /v1/catalog-sections
Fieldmeasure Typenumber Requiredno DescriptionUnit of measure ID. List: GET /v1/catalog-measures
FieldvatIncluded Typeboolean Requiredno DescriptionWhether VAT is included in the price
FieldvatId Typenumber Requiredno DescriptionVAT rate ID. List: GET /v1/catalog-vat-rates
Fieldcode Typestring Requiredno DescriptionSymbolic code
FieldxmlId Typestring Requiredno DescriptionExternal code
Fieldsort Typenumber Requiredno DescriptionSort order
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
FielddetailPicture Typeobject Requiredno DescriptionDetail picture
FieldpropertyNNN Typeobject Requiredno DescriptionCatalog property value, where NNN is the property id from GET /v1/catalog-product-properties. Passed as an object: "property301": { "value": "A-300" }

The body must contain at least one writable field. An empty PATCH is rejected with 400 EMPTY_UPDATE_BODY, and a body with only unknown field names is rejected with 400 NO_RECOGNIZED_UPDATE_FIELDS.

The iblockId field is not accepted on update: the catalog is set on creation. Fields marked readonly: true in Service fields, for example type and createdBy, are filled in by the system. Any of these fields in the body is rejected with 400 READONLY_FIELD.

Examples

curl — personal key

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/catalog-services/7231" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Turnkey air conditioner installation"
  }'

curl — OAuth application

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/catalog-services/7231" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Turnkey air conditioner installation"
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-services/7231', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Turnkey air conditioner installation',
  }),
})

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

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-services/7231', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Turnkey air conditioner installation',
  }),
})

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

Response fields

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

Response example

The main fields are shown.

JSON
{
  "success": true,
  "data": {
    "id": 7231,
    "iblockId": 25,
    "iblockSectionId": 281,
    "iblockSection": [281],
    "name": "Turnkey air conditioner installation",
    "type": 7,
    "active": true,
    "available": false,
    "xmlId": "7231",
    "sort": 500,
    "measure": 9,
    "vatIncluded": true,
    "dateCreate": "2026-10-08T20:50:59.000Z",
    "timestampX": "2026-10-08T20:52:26.000Z"
  }
}

Error response example

404 — no service with the specified id exists:

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

Errors

HTTP Code Description
HTTP404 CodeENTITY_NOT_FOUND DescriptionNo record with the specified id exists, or the record is not a service — for example, a regular catalog product (service does not exist.). The record is not changed
HTTP400 CodeEMPTY_UPDATE_BODY DescriptionThe request body is empty — pass at least one field
HTTP400 CodeNESTED_FIELDS_ENVELOPE DescriptionThe body contains an object under fields instead of root-level fields; the service is not updated
HTTP400 CodeNO_RECOGNIZED_UPDATE_FIELDS DescriptionThe body contains no recognized writable field. The message lists the allowed ones
HTTP400 CodeREADONLY_FIELD DescriptionThe body contains a field that is not accepted on update: iblockId or a read-only field, for example type
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 changes only when passed as an object. A PATCH with a string — "property301": "A-200" — or with null returns 200, but the property value does not change. Pass the new value as an object { "value": "..." }. When you create a service, a string property also accepts a plain string.

iblockSectionId replaces all of the service's sections. If the service belongs to several sections, a PATCH with iblockSectionId leaves it only in the specified section — the iblockSection array in the response contains one ID. To keep several sections, pass them as a full array in iblockSection.

Unknown scalar field names next to known ones are ignored. A body with name and an unknown scalar field name returns 200: name is written, and the unknown name is dropped without a warning. An object under fields is rejected with 400 NESTED_FIELDS_ENVELOPE before the update — send service fields at the JSON root.

See also