
## Удалить позицию из оплаты CRM

`DELETE /v1/crm-payments/:id/products/:itemId`

Удаляет позицию из оплаты CRM, сумма оплаты пересчитывается сразу. Восстановить удалённую позицию через API нельзя — при необходимости добавьте её заново.

## Параметры

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|---------|
| `id` (path) | number | да | ID оплаты. Список оплат объекта: [`GET /v1/crm-payments`](/docs/entities/crm-payments/list) |
| `itemId` (path) | number | да | ID позиции оплаты, а не товарной строки сделки. Список: [`GET /v1/crm-payments/:id/products`](/docs/entities/crm-payments/products-list), поле `data[].id` |

## Примеры

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

```bash
curl -X DELETE "https://vibecode.bitrix24.tech/v1/crm-payments/573/products/445" \
  -H "X-Api-Key: YOUR_API_KEY"
```

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

```bash
curl -X DELETE "https://vibecode.bitrix24.tech/v1/crm-payments/573/products/445" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/crm-payments/573/products/445', {
  method: 'DELETE',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

if (res.status === 204) {
  console.log('Позиция удалена')
}
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/crm-payments/573/products/445', {
  method: 'DELETE',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

if (res.status === 204) {
  console.log('Позиция удалена')
}
```

## Ответ

При успешном удалении возвращается HTTP-статус `204 No Content` с пустым телом — успех проверяется по статусу. Новая сумма оплаты — в [`GET /v1/crm-payments/:id`](/docs/entities/crm-payments/get).

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

```http
HTTP/1.1 204 No Content
```

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

404 — позиции с таким `itemId` нет в этой оплате, в том числе уже удалённой:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Payable item has not been found in this payment."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 404 | `ENTITY_NOT_FOUND` | Позиции с таким `itemId` нет в этой оплате, в том числе уже удалённой — сообщение `Payable item has not been found in this payment.` |
| 404 | `ENTITY_NOT_FOUND` | Оплаты с таким `id` нет — сообщение `Payment has not been found` |
| 400 | `INVALID_ID` | `id` или `itemId` не положительное целое число |
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос, причина — в `error.message` |
| 422 | `BITRIX_NO_EFFECT` | Битрикс24 не подтвердил удаление |
| 403 | `BITRIX_ACCESS_DENIED` | У пользователя ключа нет доступа к объекту CRM или оплате в Битрикс24 |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | Ключу запрещена запись |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |
| 401 | `MISSING_API_KEY` | Не передан `X-Api-Key` |

Полный список общих ошибок API — [Ошибки](/docs/errors).

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

**Количество позиции возвращается в остаток строки.** После удаления позиции на 3 единицы `quantity` строки в [доступных товарных строках](/docs/entities/crm-payments/available-products) снова включает эти 3 единицы, и их можно добавить в эту или другую оплату.

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

- [Список позиций оплаты](/docs/entities/crm-payments/products-list)
- [Добавить позицию в оплату](/docs/entities/crm-payments/products-add)
- [Изменить количество в позиции](/docs/entities/crm-payments/products-update)
- [Удалить оплату CRM](/docs/entities/crm-payments/delete)
- [Оплаты CRM](/docs/entities/crm-payments)
