Для AI-агентов: markdown этой страницы — /docs-content/chats/messages.md индекс документации — /llms.txt
Сообщения
Читайте, отправляйте, редактируйте и удаляйте сообщения, отмечайте их прочитанными, открывайте чат одним запросом или на конкретном сообщении и загружайте переписку из нескольких диалогов одним запросом.
Скоуп: im | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key
Чтение сообщений
GET /v1/chats/:dialogId/messages
Возвращает сообщения диалога с поддержкой постраничной загрузки через курсор. Алиас me в качестве dialogId адресует личный диалог текущего пользователя — подробнее в Обзоре чатов.
Параметры
| Параметр | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
dialogId (path) |
string | да | — | ID диалога: числовой ID пользователя для личных сообщений, chatXXX для групповых — поле dialogId строки последних диалогов, ID пользователя — из списка пользователей. Специальный алиас me — личный диалог текущего пользователя |
limit (query) |
number | нет | 50 | Количество сообщений на странице, принимается до 200. В обычном режиме облачный Битрикс24 возвращает не больше 50 записей за вызов, в режиме v2 — до 200 — см. «Известные особенности» |
lastId (query) |
number | нет | — | Курсор для загрузки более старых сообщений: вернуть сообщения с ID меньше указанного |
firstId (query) |
number | нет | — | Курсор для загрузки более новых сообщений: вернуть сообщения с ID больше указанного. В режиме v2 отклоняется |
format (query) |
string | нет | — | v2 включает режим v2 — см. «Режим v2» ниже. Любое другое значение игнорируется, ответ прежний. Повтор format не отклоняется: из format=v1&format=v2 берётся последнее значение, то есть режим v2, а format=v2&format=v1 даёт прежний ответ. Форма format[]=v2 включает режим v2, если все её значения — v2 |
order (query) |
string | нет | desc |
Только режим v2: desc — сообщения старше lastId, asc — новее lastId |
Режим v2. format=v2 читает ленту методом im.v2.Chat.Message.tail. В data приходит объект v2 — messages, users, files, reactions и другие коллекции — и hasNextPage, ключи в camelCase; реакции едут в той же странице. Режим принимает только format, limit (от 1 до 200, со срезанием и эхом), lastId и order; firstId отклоняется с 400 INVALID_PARAMS — вперёд листайте через order=asc и lastId. Граница lastId исключающая: страница после 52523 начинается с 52522. Конец ленты — hasNextPage: false. Запрос режима отличается от примеров ниже только строкой запроса: GET /v1/chats/chat42/messages?format=v2&limit=50&lastId=1002 — 50 сообщений старше 1002; заголовки авторизации те же. Режим v2 может сделать вас участником: если чат разрешает автовступление — например, чат комментариев, коллаб или чат задачи, — вызов добавляет текущего пользователя в участники, как загрузка чата. Поэтому в режиме v2 вызов считается изменяющим, и ключ только для чтения получает 403 WRITE_BLOCKED_READONLY_KEY; обычный режим остаётся чтением.
Примеры
curl — личный ключ
curl "https://vibecode.bitrix24.tech/v1/chats/chat42/messages?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl "https://vibecode.bitrix24.tech/v1/chats/chat42/messages?limit=20" \
-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/messages?limit=20',
{
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
}
)
const { success, data } = await res.json()
console.log('Сообщения:', data.messages)
console.log('Участники:', data.users)
JavaScript — OAuth-приложение
const res = await fetch(
'https://vibecode.bitrix24.tech/v1/chats/chat42/messages?limit=20',
{
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
}
)
const { success, data } = await res.json()
Поля ответа
Обычный режим — без format=v2:
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.chatId |
number | ID чата |
data.messages |
array | Массив сообщений |
data.messages[].id |
number | ID сообщения |
data.messages[].chatId |
number | ID чата, которому принадлежит сообщение |
data.messages[].authorId |
number | ID автора сообщения. 0 — системное сообщение |
data.messages[].date |
string | Дата отправки (ISO 8601) |
data.messages[].text |
string | Текст сообщения |
data.messages[].unread |
boolean | Не прочитано текущим пользователем |
data.messages[].uuid |
string|null | Уникальный идентификатор сообщения (задаётся отправителем) |
data.messages[].replaces |
array | Список ID замещённых сообщений |
data.messages[].params |
array|object | Дополнительные параметры сообщения (форматирование, системные метки) |
data.messages[].disappearingDate |
string|null | Дата автоудаления сообщения (ISO 8601) или null |
data.users |
array | Участники диалога с профилями |
data.users[].id |
number | ID пользователя |
data.users[].name |
string | Отображаемое имя |
data.users[].active |
boolean | Активен ли пользователь на портале |
data.files |
array | Файлы, прикреплённые к сообщениям |
meta.requestedLimit |
number | Переданный limit до срезания. Присутствует вместе с appliedLimit, только когда переданное значение вышло за диапазон от 1 до 200 |
meta.appliedLimit |
number | Применённое после срезания значение limit |
Режим v2 — format=v2. Поля data.chatId в этом режиме нет: ID чата несёт каждое сообщение.
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
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.users |
array | Авторы сообщений страницы |
data.files |
array | Файлы сообщений страницы |
data.reactions |
array | Реакции на сообщения страницы — по элементу на сообщение с реакциями |
data.reactions[].messageId |
number | ID сообщения из data.messages этого же ответа |
data.reactions[].reactionCounters |
object | Число реакций по коду реакции, например {"like": 2} |
data.reactions[].reactionUsers |
object | ID пользователей, поставивших реакцию, по коду реакции; Битрикс24 перечисляет не всех, а первых несколько. Профиль — по ID пользователя |
data.reactions[].ownReactions |
array | Коды реакций текущего пользователя |
data.hasNextPage |
boolean | false — страниц в выбранном направлении больше нет |
meta.requestedLimit |
number | Переданный limit до срезания. Присутствует вместе с appliedLimit, только когда переданное значение вышло за диапазон от 1 до 200 |
meta.appliedLimit |
number | Применённое после срезания значение limit |
Кроме перечисленных, объект v2 может нести другие коллекции мессенджера — например, additionalMessages с сообщениями, на которые отвечают сообщения страницы, и copilot; их состав определяет Битрикс24.
Пример ответа
Обычный режим:
{
"success": true,
"data": {
"chatId": 42,
"messages": [
{
"id": 1001,
"chatId": 42,
"authorId": 5,
"date": "2026-06-05T10:00:00+03:00",
"text": "Добрый день! Как дела?",
"unread": false,
"uuid": null,
"replaces": [],
"params": [],
"disappearingDate": null
},
{
"id": 1002,
"chatId": 42,
"authorId": 7,
"date": "2026-06-05T10:01:00+03:00",
"text": "Всё хорошо, спасибо.",
"unread": true,
"uuid": null,
"replaces": [],
"params": [],
"disappearingDate": null
}
],
"users": [
{
"id": 5,
"active": true,
"name": "Иван Петров",
"firstName": "Иван",
"lastName": "Петров",
"workPosition": "Менеджер",
"color": "#3bc8f5",
"gender": "M",
"bot": false,
"type": "user"
}
],
"files": []
}
}
Пример ответа — режим v2
{
"success": true,
"data": {
"messages": [
{
"id": 1002,
"chatId": 42,
"authorId": 7,
"date": "2026-09-20T10:01:00+03:00",
"text": "Всё готово",
"params": {}
},
{
"id": 1001,
"chatId": 42,
"authorId": 5,
"date": "2026-09-20T10:00:00+03:00",
"text": "Посмотрите макет",
"params": {}
}
],
"users": [],
"files": [],
"reactions": [
{
"messageId": 1001,
"reactionCounters": { "like": 1 },
"reactionUsers": { "like": [7] },
"ownReactions": []
}
],
"hasNextPage": true
}
}
Пример ответа при ошибке
422 — обычный режим, диалог не найден или нет доступа:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "Access denied"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 422 | BITRIX_ERROR |
Битрикс24 вернул ошибку (текст в поле message). В обычном режиме так приходят и «диалог не найден», и «нет доступа». В режиме v2 код портала приходит в error.b24Code |
| 403 | BITRIX_ACCESS_DENIED |
Режим v2: у пользователя нет доступа к чату — Битрикс24 отказал с кодом ACCESS_DENIED |
| 404 | ENTITY_NOT_FOUND |
Битрикс24 вернул ошибку NOT_FOUND. В режиме v2 код портала приходит в error.b24Code |
| 400 | INVALID_PARAMS |
Режим v2: firstId, параметр вне format, limit, lastId, order, повтор параметра, кроме format, или нечисловое значение. Проверяется до обращения к Битрикс24 |
| 502 | BITRIX_UNAVAILABLE |
Битрикс24 недоступен или вернул ошибку сервера |
| 502 | ME_ALIAS_RESOLUTION_FAILED |
Не удалось определить пользователя при использовании алиаса me |
| 403 | SCOPE_DENIED |
Ключу не хватает скоупа im |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Только режим v2: ключ только для чтения, а лента v2 может сделать владельца ключа участником чата — см. права доступа |
| 401 | TOKEN_MISSING |
Не передан X-Api-Key или не настроены токены |
Полный список общих ошибок API — Ошибки.
Известные особенности
Пагинация через курсор. Эндпоинт использует курсорную пагинацию, а не смещение по номеру страницы. Для загрузки более старых сообщений передайте lastId равным наименьшему id из последнего ответа. Для загрузки более новых — передайте firstId равным наибольшему id.
Потолок страницы в обычном режиме — 50 сообщений за вызов. Параметр limit принимает значения до 200, но в обычном режиме облачный Битрикс24 возвращает не больше 50 записей за вызов независимо от переданного значения. Коробочные порталы могут отдавать больше. Историю глубже 50 сообщений читайте курсором lastId — страница за страницей. В режиме v2 этого потолка нет: метод im.v2.Chat.Message.tail отдаёт за вызов столько сообщений, сколько передано в limit, до 200.
Порядок сообщений. Сообщения возвращаются в порядке убывания — от новых к старым. В режиме v2 с order=asc порядок обратный: от старых к новым, начиная со следующего после lastId.
Режим v2 и ключи ответа. Ключи-имена полей приводятся к camelCase: параметр сообщения FILE_ID приходит как fileId. Ключи-данные остаются как есть: словарь data.copilot.roles ключуется кодом роли, и copilot_assistant приходит как copilot_assistant — тем же значением, что role у чата и сообщения в data.copilot, поэтому роль находится прямым обращением roles[role]. Поля внутри роли приводятся к camelCase как обычно. Отсутствующий чат на портале приходит как 422 BITRIX_ERROR с error.b24Code CHAT_NOT_FOUND.