Обновить товар

PATCH /v1/catalog-products/:id

Изменяет существующий товар. Поля передаются плоско в корне JSON. Передавайте только изменяемые поля — остальные сохраняют текущие значения. В ответ приходит полный объект обновлённого товара.

Параметры

Параметр Тип Обяз. Описание
id (path) number да Идентификатор товара

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

Поле Тип Обяз. Описание
name string нет Название товара
active boolean нет Активен ли товар
iblockSectionId number нет ID раздела каталога. Список: GET /v1/catalog-sections
measure number нет ID единицы измерения
weight number нет Вес единицы товара
vatIncluded boolean нет НДС включён в цену
canBuyZero boolean нет Разрешить покупку при нулевом остатке
quantityTrace boolean нет Включить учёт количества
subscribe boolean нет Разрешить подписку на товар
barcodeMulti boolean нет Отдельные штрихкоды для единиц товара
withoutOrder boolean нет Доступен к заказу без наличия на складе
purchasingPrice number нет Закупочная цена. Не применяется при включённом управлении складом
purchasingCurrency string нет Валюта закупочной цены. Не применяется при включённом управлении складом
quantity number нет Остаток на складе. Не применяется при включённом управлении складом
code string нет Символьный код товара
xmlId string нет Внешний код
sort number нет Индекс сортировки
vatId number нет ID ставки НДС
height number нет Высота
length number нет Длина
width number нет Ширина
dateActiveFrom datetime нет Начало активности
dateActiveTo datetime нет Конец активности
previewText string нет Описание для анонса
detailText string нет Детальное описание
previewTextType string нет Тип описания анонса: text или html
detailTextType string нет Тип детального описания: text или html
previewPicture object нет Картинка анонса: { "fileData": ["имя.png", "<base64>"] } или { "remove": "Y" }
detailPicture object нет Детальная картинка (тот же формат)
iblockSection object нет Массив всех разделов, к которым привязан товар
propertyNNN object/array нет Значение свойства товара, где NNN — ID свойства: { "valueId": …, "value": … } (или массив для множественных)

Пользовательские свойства товара передаются как propertyNNN; on-premise-поля (recurSchemeType, recurSchemeLength, trialPriceId) тоже принимаются. Полный список полей — в `GET /v1/catalog-products/fields`.

Тело должно содержать хотя бы одно записываемое поле. Пустой PATCH ({}) отклоняется с 400 EMPTY_UPDATE_BODY, а PATCH, в котором нет ни одного распознанного записываемого поля (например только опечатки), — с 400 NO_RECOGNIZED_UPDATE_FIELDS. Раньше такой запрос возвращал 200 с неизменённым объектом, вводя клиента в заблуждение. Поля-объекты iblockSection/previewPicture/detailPicture пишутся, но по ним нельзя фильтровать и сортировать (запрос отклоняется явной ошибкой UNKNOWN_FILTER_FIELD/UNKNOWN_SORT_FIELD); для надёжной фильтрации используйте индексируемые поля (code, xmlId, sort, vatId, размеры).

id передаётся в пути, в теле его передавать нельзя — он только для чтения. Поля available и bundle вычисляются Битрикс24 и при записи отвечают READONLY_FIELD. iblockId задаётся только при создании: смена каталога через PATCH отклоняется с READONLY_FIELD — Битрикс24 не переносит товар между каталогами (раньше такой запрос возвращал 200, но товар оставался на месте). Поля аудита createdBy и modifiedBy заполняются системой и при записи тоже отвечают READONLY_FIELD.

Примеры

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

Terminal
curl -X PATCH "https://vibecode.bitrix24.tech/v1/catalog-products/541" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Кабель USB-C, 2 м"
  }'

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

Terminal
curl -X PATCH "https://vibecode.bitrix24.tech/v1/catalog-products/541" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Кабель USB-C, 2 м"
  }'

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-products/541', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Кабель USB-C, 2 м',
  }),
})

const { success, data } = await res.json()
console.log('Новое название:', data.name)

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/catalog-products/541', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Кабель USB-C, 2 м',
  }),
})

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

Поля ответа

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

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

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

JSON
{
  "success": true,
  "data": {
    "id": 541,
    "iblockId": 25,
    "iblockSectionId": null,
    "name": "Кабель USB-C, 2 м",
    "active": true,
    "measure": 9,
    "available": true,
    "bundle": false,
    "canBuyZero": true,
    "quantityTrace": false,
    "subscribe": true,
    "vatIncluded": false,
    "purchasingPrice": 110,
    "purchasingCurrency": "RUB",
    "quantity": null,
    "dateCreate": "2021-08-06T12:59:15.000Z",
    "timestampX": "2026-06-15T13:11:33.000Z",
    "xmlId": "541"
  }
}

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

422 — товара с указанным id не существует:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "product does not exist."
  }
}

Ошибки

HTTP Код Описание
422 BITRIX_ERROR Товара с указанным id не существует (product does not exist.)
400 EMPTY_UPDATE_BODY Тело запроса пустое — передайте хотя бы одно поле
400 NO_RECOGNIZED_UPDATE_FIELDS В теле нет ни одного распознанного записываемого поля (только опечатки/мусор)
400 READONLY_FIELD В теле передано поле только для чтения, например id, available или bundle
403 SCOPE_DENIED Ключу не хватает скоупа catalog
401 MISSING_API_KEY Не передан заголовок X-Api-Key

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

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