Для AI-агентов: markdown этой страницы — /docs-content/entities/catalog-services.md индекс документации — /llms.txt

Услуги каталога

Услуги товарного каталога: список, получение, создание, изменение и удаление. Услуга — запись каталога с типом 7 для работ и сервиса, например монтажа или доставки. Складских полей — остатка, веса и закупочной цены — у услуги нет, цены продажи задаются в Ценах каталога.

Битрикс24 API: catalog.product.service.* Скоуп: catalog

Создать услугу

POST /v1/catalog-services

Создаёт услугу в товарном каталоге. Поля передаются плоско в корне JSON.

Поля запроса (body)

Поле Тип Обяз. Описание
name string да Название услуги
iblockId number да ID товарного каталога — каталога, у которого не заполнен productIblockId. Список: GET /v1/catalogs
iblockSectionId number нет ID раздела каталога. Список: GET /v1/catalog-sections
iblockSection array нет Массив ID разделов каталога, если услуга относится к нескольким разделам. Основным разделом iblockSectionId становится первый ID массива. Список: GET /v1/catalog-sections
active boolean нет Активна ли услуга. По умолчанию true
available boolean нет Доступна ли услуга к покупке. По умолчанию false
measure number нет ID единицы измерения. Список: GET /v1/catalog-measures
vatIncluded boolean нет НДС включён в цену
vatId number нет ID ставки НДС. Список: GET /v1/catalog-vat-rates
code string нет Символьный код
xmlId string нет Внешний код. Без него в ответе приходит id услуги строкой
sort number нет Порядок сортировки. По умолчанию 500
previewText string нет Текст анонса
previewTextType string нет Формат текста анонса: text или html. По умолчанию text
detailText string нет Подробное описание
detailTextType string нет Формат подробного описания: text или html. По умолчанию text
previewPicture object нет Картинка анонса
detailPicture object нет Детальная картинка
propertyNNN string нет Значение свойства каталога, где NNN — id свойства из GET /v1/catalog-product-properties. Строковое свойство принимает строку: "property301": "A-100"

Поля с readonly: true в Полях услуги заполняет система — например, type и createdBy. Такое поле в теле отклоняется с 400 READONLY_FIELD. Цена продажи задаётся отдельно — в POST /v1/catalog-prices с id услуги в productId.

Примеры

curl — личный ключ

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/catalog-services" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Монтаж кондиционера",
    "iblockId": 25,
    "iblockSectionId": 281,
    "measure": 9,
    "vatIncluded": true
  }'

curl — OAuth-приложение

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/catalog-services" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Монтаж кондиционера",
    "iblockId": 25,
    "iblockSectionId": 281,
    "measure": 9,
    "vatIncluded": true
  }'

JavaScript — личный ключ

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-services', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Монтаж кондиционера',
    iblockId: 25,
    iblockSectionId: 281,
    measure: 9,
    vatIncluded: true,
  }),
})

const { success, data } = await res.json()
console.log('ID услуги:', data.id)

JavaScript — OAuth-приложение

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-services', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Монтаж кондиционера',
    iblockId: 25,
    iblockSectionId: 281,
    measure: 9,
    vatIncluded: true,
  }),
})

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

Поля ответа

Поле Тип Описание
success boolean Всегда true при успехе
data object Полный объект созданной услуги. Набор полей — как у GET /v1/catalog-services/:id

Пример ответа

Показаны основные поля.

JSON
{
  "success": true,
  "data": {
    "id": 7231,
    "iblockId": 25,
    "iblockSectionId": 281,
    "iblockSection": [281],
    "name": "Монтаж кондиционера",
    "type": 7,
    "active": true,
    "available": false,
    "code": null,
    "xmlId": "7231",
    "sort": 500,
    "measure": 9,
    "vatId": null,
    "vatIncluded": true,
    "previewText": null,
    "previewTextType": "text",
    "createdBy": 1295,
    "modifiedBy": 1295,
    "dateCreate": "2026-10-08T20:50:59.000Z",
    "timestampX": "2026-10-08T20:50:59.000Z"
  }
}

Пример ответа при ошибке

422 — не передано название:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "Required fields: name",
    "b24Code": "0"
  }
}

Ошибки

HTTP Код Описание
422 BITRIX_ERROR Не передано name (Required fields: name)
422 BITRIX_ERROR Не передан iblockId или каталога с таким iblockId нет (iblock is not catalog)
422 BITRIX_ERROR В iblockId передан ID каталога вариаций, а не товарного каталога (productType is not allowed for this catalog)
400 EMPTY_CREATE_BODY Тело запроса пустое
400 NESTED_FIELDS_ENVELOPE Вместо корневых полей передан объект fields; услуга не создаётся
400 READONLY_FIELD В теле передано поле, которое заполняет система, например type или createdBy
403 SCOPE_DENIED Ключу не хватает скоупа catalog
401 MISSING_API_KEY Не передан заголовок X-Api-Key

Полный список общих ошибок API — Ошибки.

Известные особенности

Новая услуга недоступна к покупке. Если available не передано, услуга создаётся с available: false. Чтобы услугу можно было продавать сразу, передайте "available": true при создании или позже в PATCH /v1/catalog-services/:id.

Неизвестные скалярные поля не отклоняются. Имя, которого нет среди полей услуги, в теле создания пропускается: услуга создаётся без него, ответ — 201. Объект fields отклоняется с 400 NESTED_FIELDS_ENVELOPE до создания — отправляйте поля в корне JSON. Сверяйте имена с Полями услуги.

Смотрите также