#Batch API
Объединяйте несколько вызовов в один HTTP-запрос. Batch API экономит время и снижает количество запросов к серверу.
#Обзор
Batch API позволяет отправить до 50 вызовов в одном HTTP-запросе. Все вызовы выполняются на стороне Битрикс24 параллельно, результаты возвращаются в одном ответе.
Эндпоинт: POST /v1/batch
Авторизация: заголовок X-Api-Key с вашим API-ключом.
#Формат вызова
Batch использует единый entity-формат. Поля автоматически преобразуются (camelCase → Bitrix24 формат).
{
"entity": "deals",
"action": "list",
"params": { "filter": { "stageId": "NEW" } }
}
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
id |
string | нет | Уникальный идентификатор вызова (макс. 64 символа) |
entity |
string | да | Имя сущности (например, deals, tasks, contacts) |
action |
string | да | Операция: list, get, create, update, delete, fields, search |
entityId |
string/number | для get/update/delete | ID записи |
params |
object | нет | Параметры (camelCase имена полей) |
Все 38 сущностей Entity API доступны в batch: deals, contacts, companies, leads, tasks, users, files, folders, payments, warehouses и другие.
#Формат запроса
{
"calls": [
{
"id": "deals",
"entity": "deals",
"action": "list",
"params": { "filter": { "stageId": "NEW" } }
},
{
"id": "tasks",
"entity": "tasks",
"action": "list",
"params": { "filter": { "status": 2 } }
},
{
"id": "user",
"entity": "users",
"action": "get",
"entityId": 1
}
]
}
#Формат ответа
{
"success": true,
"data": {
"results": {
"deals": {
"result": [
{ "ID": "1", "TITLE": "Сделка 1" },
{ "ID": "2", "TITLE": "Сделка 2" }
],
"total": 150
},
"tasks": {
"result": { "tasks": [{ "id": "1", "title": "Задача 1" }] },
"total": 10
},
"user": {
"result": [{ "ID": "1", "NAME": "Иван" }]
}
},
"errors": {},
"summary": {
"total": 3,
"succeeded": 3,
"failed": 0
}
}
}
Структура ответа:
| Поле | Описание |
|---|---|
data.results |
Объект с результатами, ключи — id каждого вызова |
data.results[id].result |
Данные, возвращённые Bitrix24 |
data.results[id].total |
Общее количество записей (для list-операций) |
data.errors |
Объект с ошибками по id неудавшихся вызовов |
data.summary.total |
Общее количество вызовов в batch |
data.summary.succeeded |
Количество успешных вызовов |
data.summary.failed |
Количество неудавшихся вызовов |
#Проверка скоупов
Каждый вызов в batch проверяется индивидуально на соответствие скоупам вашего API-ключа. Если сущность требует скоуп, которого нет у ключа, этот вызов вернёт ошибку SCOPE_NOT_ALLOWED, а остальные выполнятся нормально.
Если все вызовы не прошли проверку скоупов, вернётся общая ошибка 403.
#Лимиты
| Параметр | Ограничение |
|---|---|
| Максимум вызовов в batch | 50 |
Длина id вызова |
64 символа |
#Примеры
#cURL
curl -X POST https://vibecode.bitrix24.tech/v1/batch \
-H "X-Api-Key: $VIBE_KEY" \
-H "Content-Type: application/json" \
-d '{
"calls": [
{
"id": "new_deals",
"entity": "deals",
"action": "list",
"params": {
"filter": { "stageId": "NEW" },
"select": ["id", "title", "amount"]
}
},
{
"id": "won_deals",
"entity": "deals",
"action": "list",
"params": {
"filter": { "stageId": "WON" },
"select": ["id", "title", "amount"]
}
},
{
"id": "total_contacts",
"entity": "contacts",
"action": "list",
"params": {}
}
]
}'
#JavaScript
const res = await fetch('https://vibecode.bitrix24.tech/v1/batch', {
method: 'POST',
headers: {
'X-Api-Key': VIBE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
calls: [
{
id: 'deals',
entity: 'deals',
action: 'list',
params: { filter: { stageId: 'NEW' } }
},
{
id: 'tasks',
entity: 'tasks',
action: 'list',
params: { filter: { status: 2 } }
},
{
id: 'user',
entity: 'users',
action: 'get',
entityId: 1
}
]
})
})
const { data } = await res.json()
console.log('Deals:', data.results.deals.result)
console.log('Tasks:', data.results.tasks.result)
console.log('User:', data.results.user.result)
console.log('Summary:', data.summary)
#Пример с частичными ошибками
Если часть вызовов не прошла проверку скоупов или вернула ошибку на стороне Битрикс24:
{
"success": true,
"data": {
"results": {
"deals": {
"result": [{ "ID": "1", "TITLE": "Сделка" }],
"total": 50
}
},
"errors": {
"payments": {
"code": "SCOPE_NOT_ALLOWED",
"message": "Entity 'payments' requires scope 'sale', but key does not have it"
}
},
"summary": {
"total": 2,
"succeeded": 1,
"failed": 1
}
}
}
#Search в batch
Действие search работает иначе, чем остальные: каждый search-вызов выполняется отдельно (не через нативный batch Битрикс24), с полной авто-пагинацией — до 5000 записей на вызов.
{
"calls": [
{
"id": "active_deals",
"entity": "deals",
"action": "search",
"params": {
"filter": { "$gte": { "createdAt": "2026-01-01" } },
"select": ["id", "title", "stageId"]
}
},
{
"id": "vip_contacts",
"entity": "contacts",
"action": "search",
"params": {
"filter": { "typeId": "CLIENT" }
}
}
]
}
Это удобно для параллельного поиска по нескольким сущностям с фильтрами и авто-пагинацией.
#Когда использовать
- Дашборды — загружайте данные из нескольких сущностей одним запросом
- Синхронизация — получайте списки сделок, контактов и задач параллельно
- Массовые операции — создавайте/обновляйте записи в нескольких сущностях сразу
- Агрегация — считайте количество записей в разных стадиях одним запросом
#Массовая загрузка сообщений чатов
Для загрузки сообщений из нескольких диалогов одним запросом используйте специализированный эндпоинт:
POST /v1/chats/messages/bulk — загружает сообщения из до 50 диалогов в 1 HTTP-запрос через нативный batch Bitrix24. Требует скоуп im.
{
"dialogs": [
{ "dialogId": "chat123", "limit": 20 },
{ "dialogId": "chat456", "lastId": 1000, "limit": 10 },
{ "dialogId": "789" }
]
}
Параметры каждого диалога:
| Поле | Тип | Описание |
|---|---|---|
dialogId |
string | ID диалога ("chat123" для групповых, "123" для 1-на-1) |
lastId |
number | Курсор: загрузить сообщения старше этого ID |
firstId |
number | Курсор: загрузить сообщения новее этого ID |
limit |
number | Количество сообщений на диалог |
Формат ответа аналогичен /v1/batch: { results, errors, summary }.
Используйте
/v1/chats/messages/bulkвместо/v1/batchдля IM-операций — он работает напрямую сim.dialog.messages.getчерез нативный batch и возвращает сообщения с данными пользователей.
#Коды ошибок
| Код | HTTP | Описание |
|---|---|---|
INVALID_REQUEST |
400 | Невалидное тело запроса |
UNKNOWN_ENTITY |
400 | Неизвестная сущность |
MISSING_ENTITY_ID |
400 | Для get/update/delete нужен entityId |
SCOPE_NOT_ALLOWED |
403 | Все вызовы не прошли проверку скоупов |
TOKEN_MISSING |
401 | Ключ не имеет настроенных токенов |
QUEUE_TIMEOUT |
503 | Превышено время ожидания в очереди |
BITRIX_UNAVAILABLE |
502 | Битрикс24 недоступен |
BITRIX_ERROR |
422 | Ошибка Bitrix24 REST API |
TOKEN_REFRESH_FAILED |
401 | Не удалось обновить OAuth-токен |
INTERNAL_ERROR |
500 | Внутренняя ошибка прокси |