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

Поиск регулярных сделок

POST /v1/recurring-deals/search

Находит настройки повторения сделок по условиям в теле запроса. Используйте для отбора расписаний и чтения выбранных полей.

Для выборок до 5000 записей используйте список регулярных сделок. Поиск принимает условия в JSON и может разбивать широкий фильтр по датам на интервалы.

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

Поле Тип Обязательный Описание
filter object нет Фильтрация по полям из описания полей регулярной сделки.
Синтаксис фильтрации. Пример поля тела запроса: "filter":{"active":false}
sort string / object / string[] нет Поля сортировки. id — по возрастанию, -id — по убыванию
order object нет Альтернатива sort, например {"id":"desc"}
select string / string[] нет Поля ответа. Строка через запятую или массив имён
limit number / string нет Размер выборки, по умолчанию 50, максимум 5000. Допускается строка с числом
offset number нет Смещение от начала выборки. Значение больше нуля несовместимо с автоматическим разбиением диапазона дат шире 14 дней. Для пагинации используйте autoWindow: false вместе с sort: "id"
autoWindow boolean нет Передайте false, чтобы отключить автоматическое разбиение широкого фильтра по датам на интервалы
withTotal boolean нет Запрос общего количества в meta.total

Примеры

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/recurring-deals/search" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filter":{"active":false},"sort":"id","select":["id","dealId","basedId","active","nextExecution","lastExecution","counterRepeat","startDate","categoryId","isLimit","limitRepeat","limitDate","params"],"limit":2,"withTotal":true}'

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/recurring-deals/search" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"filter":{"active":false},"sort":"id","select":["id","dealId","basedId","active","nextExecution","lastExecution","counterRepeat","startDate","categoryId","isLimit","limitRepeat","limitDate","params"],"limit":2,"withTotal":true}'

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

javascript
const response = await fetch('https://vibecode.bitrix24.tech/v1/recurring-deals/search', {
  method: 'POST',
  headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({"filter":{"active":false},"sort":"id","select":["id","dealId","basedId","active","nextExecution","lastExecution","counterRepeat","startDate","categoryId","isLimit","limitRepeat","limitDate","params"],"limit":2,"withTotal":true}),
})
const result = await response.json()
if (!result.success) throw new Error(result.error.message)
console.log(result.data)

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

javascript
const response = await fetch('https://vibecode.bitrix24.tech/v1/recurring-deals/search', {
  method: 'POST',
  headers: { 'X-Api-Key': 'YOUR_APP_KEY', 'Authorization': 'Bearer USER_SESSION_TOKEN', 'Content-Type': 'application/json' },
  body: JSON.stringify({"filter":{"active":false},"sort":"id","select":["id","dealId","basedId","active","nextExecution","lastExecution","counterRepeat","startDate","categoryId","isLimit","limitRepeat","limitDate","params"],"limit":2,"withTotal":true}),
})
const result = await response.json()
if (!result.success) throw new Error(result.error.message)
console.log(result.data)

Поля ответа

Поле Тип Описание
success boolean Признак успешного запроса
data object[] Настройки повторения. См. поля регулярной сделки
meta.total number Общее число подходящих настроек, если возвращено
meta.hasMore boolean Есть ли следующая часть выборки
meta.durationMs number Время выполнения в миллисекундах, если возвращено
meta.warnings object[] Предупреждения, если возвращены. Неизвестные поля select могут быть проигнорированы при успешном запросе
meta.autoWindowed boolean Применено ли разбиение по датам
meta.windowCount number Число интервалов, если разбиение применено
meta.windowErrors number Число интервалов с ошибкой, если они есть
meta.windowErrorSample object Первая ошибка интервала с кодом и сообщением при частичном отказе
meta.pageErrorSample object Пример ошибки подстраницы при неполной возвращённой выборке

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

JSON
{
  "success": true,
  "data": [
    {
      "id": 1,
      "dealId": 575,
      "basedId": 573,
      "active": false,
      "nextExecution": null,
      "lastExecution": "2020-06-16T22:00:00.000Z",
      "counterRepeat": 2,
      "startDate": "2020-06-15",
      "categoryId": 1,
      "isLimit": "T",
      "limitRepeat": 2,
      "limitDate": null,
      "params": {
        "mode": "multiple",
        "singleBeforeStartDateValue": 0,
        "singleBeforeStartDateType": "day",
        "multipleType": "day",
        "multipleInterval": 1,
        "offsetBeginDateType": "day",
        "offsetBeginDateValue": 1,
        "offsetCloseDateType": "day",
        "offsetCloseDateValue": 1
      }
    },
    {
      "id": 3,
      "dealId": 3865,
      "basedId": 3863,
      "active": false,
      "nextExecution": null,
      "lastExecution": "2021-01-12T22:00:00.000Z",
      "counterRepeat": 2,
      "startDate": "2021-01-14",
      "categoryId": 0,
      "isLimit": "D",
      "limitRepeat": null,
      "limitDate": "2021-01-13",
      "params": {
        "mode": "single",
        "singleBeforeStartDateValue": 1,
        "singleBeforeStartDateType": "day",
        "multipleType": "day",
        "multipleInterval": 1,
        "offsetBeginDateType": "day",
        "offsetBeginDateValue": 0,
        "offsetCloseDateType": "day",
        "offsetCloseDateValue": 0
      }
    }
  ],
  "meta": {
    "total": 4,
    "hasMore": true,
    "durationMs": 123
  }
}

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

400 — неизвестное поле фильтра:

JSON
{
  "success": false,
  "error": {
    "code": "UNKNOWN_FILTER_FIELD",
    "message": "Unknown filter field 'madeUp' for entity 'recurring-deals'. Available: id, dealId, basedId, active, nextExecution, lastExecution, counterRepeat, startDate, categoryId, isLimit, limitRepeat, limitDate"
  }
}

Ошибки

HTTP Код Описание
400 INVALID_REQUEST Тело запроса не является JSON-объектом
400 INVALID_LIMIT limit нельзя интерпретировать как конечное число. Допускаются числа и строки с числом
400 INVALID_SELECT_TYPE select не является строкой или массивом строк
400 INVALID_SORT_TYPE sort не является строкой, объектом или массивом строк
400 UNKNOWN_FILTER_FIELD Фильтр по неизвестному полю. Допустимые поля — в сообщении ошибки и описании полей
400 INVALID_FILTER_FIELD Имя поля начинается с неподдерживаемого префикса @ или !@
400 INVALID_FILTER_OPERATOR Неизвестный оператор, пустой объект условия или логическое условие $or либо $and
400 INVALID_DUPLICATE_FILTER_FIELD Два условия сводятся к одному условию фильтра. Передайте одно из них
400 INVALID_SORT_FIELD В сортировке передано запрещённое имя __proto__, constructor или prototype
400 UNKNOWN_SORT_FIELD Сортировка по неизвестному полю
400 INVALID_SORT_DIRECTION Направление в объекте сортировки не из списка строк asc, desc, ASC, DESC или чисел 1, -1
400 INVALID_FILTER_SHAPE filter не является объектом
400 UNSTABLE_OFFSET_PAGINATION offset > 0 сочетается с автоматическим разбиением диапазона дат шире 14 дней. Для пагинации используйте autoWindow: false вместе с sort: "id"
401 MISSING_API_KEY Не передан заголовок X-Api-Key
401 TOKEN_MISSING Нет настроенных токенов доступа к Битрикс24
403 SCOPE_DENIED API-ключ не имеет скоупа crm
403 BITRIX_ACCESS_DENIED Битрикс24 отказал в доступе, в том числе из-за отсутствия нужного скоупа
422 BITRIX_ERROR Бизнес-отказ Битрикс24 или ограничение тарифа. Причина — в error.message
503 BITRIX_TIMEOUT Битрикс24 не ответил вовремя. Повторите после срока из Retry-After
502 BITRIX_UNAVAILABLE Нет соединения с Битрикс24
429 RATE_LIMITED Превышен лимит запросов. Точное значение — в заголовке x-ratelimit-limit. Повторите после срока из заголовка Retry-After

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

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

В ответе могут присутствовать настройки с active: false. Если нужны только активные расписания, задайте фильтр active: true.

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