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

Поле, которого нет среди записываемых, больше не отбрасывается молча — запрос отклоняется с 400 INVALID_PARAMS, и в тексте ошибки перечислены записываемые имена. Поля только для чтения, которые приходят в ответах товарных позиций (priceAccount, ownerId, storeId и другие) по-прежнему принимаются и игнорируются, поэтому объект, прочитанный через GET, можно отправить обратно без чистки.

Добавить товар в сделку

POST /v1/deals/:id/products

Добавляет одну товарную позицию в сделку. В отличие от PUT /v1/deals/:id/products, не заменяет существующие позиции.

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

Параметр Тип Обяз. Описание
id (path) number да ID сделки
productId number нет ID товара из каталога. Если задан без productName, имя подставляется из каталога. Каталог: GET /v1/products
productName string нет Название товарной позиции — для произвольной строки без товара из каталога. Укажите хотя бы одно из productId / productName.
price number нет Цена за единицу
quantity number нет Количество
discount number нет Сумма скидки
taxRate number нет Ставка налога (%)
taxIncluded boolean нет Налог включён в цену

Примеры

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/deals/741/products" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "productId": 1, "price": 25000, "quantity": 2 }'

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/deals/741/products" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "productId": 1, "price": 25000, "quantity": 2 }'

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/deals/741/products', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ productId: 1, price: 25000, quantity: 2 }),
})

const { success, data } = await res.json()
console.log('ID строки:', data.id)

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/deals/741/products', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ productId: 1, price: 25000, quantity: 2 }),
})

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

Поля ответа

Поле Тип Описание
data object Созданная товарная строка целиком, HTTP-статус 201. Состав полей — Поля товаров

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

Показаны основные поля. Полный список — Поля товаров.

JSON
{
  "success": true,
  "data": {
    "id": 1465,
    "productId": 1,
    "productName": "Серверное оборудование",
    "price": 25000,
    "quantity": 2,
    "discount": 0,
    "discountTypeId": 2,
    "taxIncluded": false
  }
}

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

404 — сделка не найдена:

JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Элемент не найден"
  }
}

Ошибки

HTTP Код Описание
400 INVALID_PARAMS Тело содержит имя, которого нет среди записываемых полей — см. Поля товаров
404 ENTITY_NOT_FOUND Сделка не найдена
403 SCOPE_DENIED API-ключ не имеет скоупа crm
401 TOKEN_MISSING API-ключ не имеет настроенных токенов

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

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