Для 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 — личный ключ
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-приложение
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 — личный ключ
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-приложение
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 | Пример ошибки подстраницы при неполной возвращённой выборке |
Пример ответа
{
"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 — неизвестное поле фильтра:
{
"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.