
## Список позиций оплаты CRM

`GET /v1/crm-payments/:id/products`

Возвращает позиции оплаты CRM — сколько единиц каждого товара входит в оплату. Нужен, чтобы получить `id` позиции перед изменением количества или удалением.

## Параметры

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

Параметров в строке запроса нет: позиции приходят все сразу, без пагинации и фильтров.

## Примеры

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

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

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

```bash
curl "https://vibecode.bitrix24.tech/v1/crm-payments/573/products" \
  -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', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { data, meta } = await res.json()
console.log(`Позиций в оплате: ${meta.total}`)
for (const item of data) {
  console.log(`Позиция ${item.id}: ${item.quantity} шт.`)
}
```

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

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

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

## Поля ответа

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | `true` при успехе |
| `data` | array | Позиции оплаты. У оплаты без позиций — пустой массив |
| `data[].id` | number | ID позиции оплаты. Передаётся как `itemId` в [`PATCH /v1/crm-payments/:id/products/:itemId`](/docs/entities/crm-payments/products-update) и [`DELETE /v1/crm-payments/:id/products/:itemId`](/docs/entities/crm-payments/products-delete) |
| `data[].paymentId` | number | ID оплаты |
| `data[].quantity` | number | Количество единиц товара в позиции |
| `data[].entityId` | number | ID позиции корзины связанного заказа. Список: [`GET /v1/basket-items`](/docs/entities/basket-items/list) с `filter[orderId]` — ID заказа из поля `orderId` оплаты в [`GET /v1/payments/:id`](/docs/entities/payments/get) |
| `meta.total` | number | Количество позиций в оплате |

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

```json
{
  "success": true,
  "data": [
    {
      "id": 445,
      "paymentId": 573,
      "quantity": 2,
      "entityId": 1391
    }
  ],
  "meta": {
    "total": 1
  }
}
```

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

404 — оплаты с таким ID нет:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Payment has not been found"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 404 | `ENTITY_NOT_FOUND` | Оплаты с таким `id` нет |
| 400 | `INVALID_ID` | `id` не положительное целое число |
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос, причина — в `error.message` |
| 403 | `BITRIX_ACCESS_DENIED` | У пользователя ключа нет доступа к объекту CRM или оплате в Битрикс24 |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |
| 401 | `MISSING_API_KEY` | Не передан `X-Api-Key` |

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

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

**В позиции нет ID товарной строки сделки.** `entityId` указывает на позицию корзины заказа, а не на товарную строку сделки, которая передавалась как `rowId` при [добавлении позиции](/docs/entities/crm-payments/products-add). Название, цена и товар позиции — в позиции корзины по `entityId`.

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

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