#Поиск позиций корзины

POST /v1/basket-items/search

Поиск позиций корзины с фильтрацией и авто-пагинацией. Аналогичен `GET /v1/basket-items`, но через POST — удобнее для сложных запросов с большим количеством условий.

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

Параметр Тип По умолч. Описание
filter object Фильтрация по полям позиции.
Синтаксис фильтрации
limit number 50 Количество записей (до 5000)
select string[] Выборка полей: ["id", "orderId", "name", "quantity", "price"]
order object Сортировка: { "id": "desc" }

#Примеры

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/basket-items/search" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "orderId": 33 },
    "limit": 10,
    "select": ["id", "orderId", "name", "quantity", "price", "currency"]
  }'

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/basket-items/search" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "orderId": 33 },
    "limit": 10,
    "select": ["id", "orderId", "name", "quantity", "price", "currency"]
  }'

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/basket-items/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: { orderId: 33 },
    limit: 10,
    select: ['id', 'orderId', 'name', 'quantity', 'price', 'currency'],
  }),
})

const { success, data, meta } = await res.json()
console.log('Найдено:', meta.total)

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/basket-items/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: { orderId: 33 },
    limit: 10,
    select: ['id', 'orderId', 'name', 'quantity', 'price', 'currency'],
  }),
})

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

#Поля ответа

Поле Тип Описание
success boolean Всегда true при успехе
data array Массив позиций корзины
meta.total number Общее количество записей, соответствующих фильтру
meta.hasMore boolean Есть ли ещё записи за пределами limit

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

JSON
{
  "success": true,
  "data": [
    {
      "id": 9,
      "orderId": 33,
      "name": "Домашние Тапочки Любимый Спорт",
      "quantity": 1,
      "price": 470,
      "currency": "RUB"
    }
  ],
  "meta": {
    "total": 1,
    "hasMore": false
  }
}

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

400 — фильтр по несуществующему полю:

JSON
{
  "success": false,
  "error": {
    "code": "UNKNOWN_FILTER_FIELD",
    "message": "Unknown field 'foo'. Available: id, orderId, productId, name, price, ..."
  }
}

#Ошибки

HTTP Код Описание
400 UNKNOWN_FILTER_FIELD Фильтр по полю, которого нет в схеме
403 SCOPE_DENIED API-ключ не имеет скоупа sale
401 TOKEN_MISSING API-ключ не имеет настроенных токенов

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

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

select ограничивает поля в ответе. Если передан select, в каждом элементе data[] будут только перечисленные поля. Без select возвращаются все поля позиции.

Поиск товара по всем заказам. Фильтр {"productId": 119} без orderId найдёт все позиции с этим товаром по всему порталу — это даёт срез продаж конкретного товара.

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