Для AI-агентов: markdown этой страницы — /docs-content/chats/messages/load.md индекс документации — /llms.txt
Загрузка чата
GET /v1/chats/:dialogId/load
Открывает чат одним запросом: карточка чата, первая страница сообщений, закреплённые сообщения, участники и файлы. Первая страница строится вокруг последнего прочитанного сообщения, а если чат помечен непрочитанным — вокруг метки.
Параметры
| Параметр | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
ПараметрdialogId (path) |
Типstring | Обяз.да | По умолч.— | ОписаниеID диалога: числовой ID пользователя для личных сообщений, chatXXX для групповых, me — личный диалог текущего пользователя. Берётся из поля dialogId строки последних диалогов, ID пользователя — из списка пользователей |
ПараметрmessageLimit (query) |
Типnumber | Обяз.нет | По умолч.50 | ОписаниеСколько сообщений взять по каждую сторону от опорного: страница — до messageLimit сообщений до него, само сообщение и до messageLimit после. От 1 до 200: значение вне диапазона срезается, переданное и применённое значения — в meta.requestedMessageLimit и meta.appliedMessageLimit |
ПараметрpinLimit (query) |
Типnumber | Обяз.нет | По умолч.50 | ОписаниеСколько закреплённых сообщений вернуть. От 1 до 200, переданное и применённое значения — в meta.requestedPinLimit и meta.appliedPinLimit |
ПараметрignoreMark (query) |
Типboolean | Обяз.нет | По умолч.false |
Описаниеtrue — строить первую страницу от последнего прочитанного сообщения, не учитывая метку «непрочитанное» |
Параметрshallow (query) |
Типboolean | Обяз.нет | По умолч.false |
Описаниеtrue — облегчённая загрузка, см. ниже. С true другие параметры не принимаются. Значение кроме true и false отклоняется |
Другие параметры и повторы отклоняются с 400 INVALID_PARAMS.
Облегчённая загрузка. shallow=true открывает чат: в data приходят карточка чата, его участники и контекст чата — recentConfig, parentChat, copilot, messagesAutoDeleteConfigs, callInfo, — но нет страницы сообщений, закреплённых сообщений, файлов и флагов hasPrevPage / hasNextPage. Это вызов для шапки чата или экрана настроек. Облегчённая загрузка тоже может сделать вас участником. Для обычного личного ключа сотрудника это разрешённое именованное чтение существующего чата. shallow=false — полная загрузка. Запрос без shallow получает тот же ответ полной загрузки и те же отказы.
Ключ только чтения. В режиме READONLY этот запрос читает существующий чат: передайте его chatN либо числовой ID собеседника, подтверждённый в последних диалогах того же сотрудника. Для me проверяется уже существующий личный диалог. Проверка просматривает не больше 4000 исходных строк последних диалогов. Если привязка не подтверждена, ответ — 403 WRITE_BLOCKED_READONLY_KEY, без обращения к методу, который мог бы создать чат. Границы проверки и разрешённых эффектов чтения — в правах доступа.
Исключение для этих именованных чтений действует только для обычного личного ключа сотрудника — как с вебхуком, так и с ранее настроенными OAuth-токенами. Ключ приложения с пользовательской Bearer-сессией, менеджмент-ключ и ключ с неподтверждённым видом владельца в режиме READONLY получают 403 WRITE_BLOCKED_READONLY_KEY до проверки привязки существующего чата и вызова именованного метода мессенджера. Обычные чтения без этих эффектов остаются доступны ключам приложений. Режим с записью не меняется.
Примеры
curl — личный ключ
curl "https://vibecode.bitrix24.tech/v1/chats/chat42/load?messageLimit=30" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl "https://vibecode.bitrix24.tech/v1/chats/chat42/load?messageLimit=30" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/chat42/load?messageLimit=30', {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
console.log('Чат:', data.chat.name)
console.log('Сообщения:', data.messages.length, 'ещё раньше:', data.hasPrevPage)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/chat42/load?messageLimit=30', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
console.log('Чат:', data.chat.name)
console.log('Сообщения:', data.messages.length, 'ещё раньше:', data.hasPrevPage)
curl — облегчённая загрузка
curl "https://vibecode.bitrix24.tech/v1/chats/chat42/load?shallow=true" \
-H "X-Api-Key: YOUR_API_KEY"
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata.chat |
Типobject | ОписаниеКарточка чата: id, dialogId, name, type, owner, role, entityType, entityId, permissions и другие поля |
Полеdata.messages |
Типarray | ОписаниеПервая страница сообщений |
Полеdata.messages[].id |
Типnumber | ОписаниеID сообщения — курсор lastId следующей страницы и messageId для сообщений вокруг сообщения |
Полеdata.messages[].chatId |
Типnumber | ОписаниеID чата — совпадает с data.chat.id |
Полеdata.messages[].authorId |
Типnumber | ОписаниеID автора — профиль в data.users этого же ответа или по ID пользователя. 0 — системное сообщение |
Полеdata.messages[].date |
Типstring | ОписаниеДата отправки (ISO 8601) |
Полеdata.messages[].text |
Типstring | ОписаниеТекст сообщения |
Полеdata.messages[].params |
Типobject | ОписаниеДополнительные параметры сообщения, ключи в camelCase |
Полеdata.pins |
Типarray | ОписаниеЗакреплённые сообщения |
Полеdata.users |
Типarray | ОписаниеУчастники, упомянутые на странице |
Полеdata.files |
Типarray | ОписаниеФайлы сообщений страницы |
Полеdata.reactions |
Типarray | ОписаниеРеакции на сообщения страницы |
Полеdata.hasPrevPage |
Типboolean | ОписаниеЕсть сообщения старше первой страницы |
Полеdata.hasNextPage |
Типboolean | ОписаниеЕсть сообщения новее первой страницы |
Полеdata.recentConfig |
Типobject | ОписаниеКонтекст чата: в каких разделах списка чатов виден чат |
Полеdata.parentChat |
Типobject|null | ОписаниеКонтекст чата: краткая карточка родительского чата или null |
Полеdata.copilot |
Типobject|null | ОписаниеКонтекст чата: роли CoPilot. null вне чатов CoPilot |
Полеdata.messagesAutoDeleteConfigs |
Типarray | ОписаниеКонтекст чата: настройки автоудаления сообщений |
Полеdata.callInfo |
Типobject | ОписаниеКонтекст чата: chatId и token — звонковый токен текущего пользователя. Эндпоинт передаёт его без изменений. Не пишите его в журналы |
Полеmeta.requestedMessageLimit |
Типnumber | ОписаниеПереданный messageLimit, когда он вышел за диапазон от 1 до 200 |
Полеmeta.appliedMessageLimit |
Типnumber | ОписаниеПрименённое значение messageLimit — только если он был приведён к границе |
Полеmeta.requestedPinLimit |
Типnumber | ОписаниеПереданный pinLimit, когда он вышел за диапазон от 1 до 200 |
Полеmeta.appliedPinLimit |
Типnumber | ОписаниеПрименённое значение pinLimit — только если он был приведён к границе |
Пример ответа
{
"success": true,
"data": {
"chat": {
"id": 42,
"dialogId": "chat42",
"name": "Проект",
"type": "chat",
"owner": 5,
"role": "member"
},
"messages": [
{
"id": 1002,
"chatId": 42,
"authorId": 7,
"date": "2026-09-20T10:01:00+03:00",
"text": "Всё готово",
"params": {}
}
],
"pins": [],
"users": [],
"files": [],
"reactions": [],
"hasPrevPage": true,
"hasNextPage": false
}
}
Пример ответа при ошибке
422 — чата нет на портале:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "Указанный чат не существует",
"hint": "dialogId must be a userId (number as string) for DMs or \"chat{N}\" for group chats. Examples: \"1\" for user 1, \"chat123\" for group chat 123. Create a group chat first via POST /v1/bots/:botId/chats if needed.",
"b24Code": "CHAT_NOT_FOUND"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодINVALID_PARAMS |
ОписаниеПараметр вне messageLimit, pinLimit, ignoreMark, shallow, повтор параметра или некорректное значение. С shallow=true — любой другой параметр. shallow не true и не false. Проверяется до обращения к Битрикс24 |
| HTTP404 | КодENTITY_NOT_FOUND |
ОписаниеБитрикс24 вернул «не найдено». Код портала — в error.b24Code |
| HTTP422 | КодBITRIX_ERROR |
ОписаниеБитрикс24 вернул ошибку. Код портала — в error.b24Code. Сюда же приходит отсутствующий чат — с CHAT_NOT_FOUND и текстом «Указанный чат не существует», а не с 404 |
| HTTP502 | КодME_ALIAS_RESOLUTION_FAILED |
ОписаниеНе удалось определить пользователя при использовании алиаса me |
| HTTP403 | КодBITRIX_ACCESS_DENIED |
ОписаниеУ пользователя нет доступа к чату — Битрикс24 отказал с кодом ACCESS_DENIED |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеРежим только чтения: существующий чат не подтверждён в ограниченном окне последних диалогов либо передан создающий или неоднозначный алиас. Вызывающий создание метод не отправляется на портал |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеИменованное чтение в режиме READONLY недоступно ключу приложения, менеджмент-ключу или ключу с неподтверждённым видом владельца |
| HTTP403 | КодSCOPE_DENIED |
ОписаниеAPI-ключ не имеет скоупа im |
| HTTP401 | КодTOKEN_MISSING |
ОписаниеAPI-ключ не имеет настроенных токенов Битрикс24 |
Полный список общих ошибок API — Ошибки.
Известные особенности
Открытие чата может сделать вас участником. Если чат разрешает автовступление — например, чаты комментариев, коллабы, чаты задач, — вызов добавляет текущего пользователя в участники, как открытие чата в интерфейсе Битрикс24. Это поведение портала, эндпоинт его не скрывает. Ключу READONLY эта операция чтения разрешена как точечное исключение. Права пользователя и скоуп im всё ещё проверяются. Открытие само не отмечает сообщения прочитанными. Другие эффекты загрузки чата — обновление присутствия, быстрый доступ к файлам после проверки прав, подписка на обновления чата и фоновое событие внешнего чата — перечислены в правах доступа. Для коллаба или рабочей группы это фоновое событие может запустить отложенное преобразование проекта. То же исключение для автовступления относится к ленте в режиме v2 и к сообщениям вокруг сообщения.
Ключи ответа. Ключи-имена полей приводятся к camelCase: параметр сообщения FILE_ID приходит как fileId. Ключи-данные остаются как есть: ключи словаря data.copilot.roles — коды ролей, и copilot_assistant приходит как copilot_assistant — тем же значением, что role у чата и сообщения в data.copilot, поэтому роль находится прямым обращением roles[role]. Поля внутри роли приводятся к camelCase.
Дальше — лента. Более старые сообщения читайте лентой в режиме v2 с lastId, равным наименьшему id страницы.
Облегчённая загрузка — без сообщений. После shallow=true страницу сообщений дочитывайте лентой в режиме v2, а чтобы открыть чат на конкретном сообщении, используйте загрузку вокруг сообщения.