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

Поиск чатов

Найдите нужный чат: последние диалоги, счётчики непрочитанного, папки и разделы списка, каналы, коллабы и внешние чаты, общие чаты, изменения с момента, чат CRM-сущности, поиск, сведения о диалоге, внешний ID диалога и проверка доступа.

Скоуп: im | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key

Последние диалоги

GET /v1/chats/recent

Возвращает список последних диалогов текущего пользователя: закреплённые диалоги первыми, далее по времени последнего сообщения.

Общий параметр filter этим эндпоинтом не применяется. По умолчанию API сохраняет прежний ответ HTTP 200 и прежние данные, добавляет заголовок Warning: 299 - "filter is not supported on this endpoint and was ignored", а сервер фиксирует использование неподдерживаемого фильтра в журнале. Проверка параметров для format=v2 сохраняется без изменений.

Параметры

Параметр Тип Обяз. По умолч. Описание
Параметрformat (query) Типstring Обяз.нет По умолч.— Описаниеv2 включает режим v2 — см. «Режим v2» ниже. Любое другое значение игнорируется, ответ прежний. Повтор format не отклоняется: из format=v1&format=v2 берётся последнее значение, то есть режим v2, а format=v2&format=v1 даёт прежний ответ. Форма format[]=v2 включает режим v2, если все её значения — v2
ПараметрskipOpenLines (query) Типstring Обяз.нет По умолч.— ОписаниеИсключить линии открытых каналов. Принимает true, Y или y
ПараметрskipChat (query) Типstring Обяз.нет По умолч.— ОписаниеИсключить групповые чаты. Принимает true, Y или y
ПараметрskipDialog (query) Типstring Обяз.нет По умолч.— ОписаниеИсключить личные диалоги. Принимает true, Y или y
ПараметрunreadOnly (query) Типstring Обяз.нет По умолч.— ОписаниеТолько диалоги с непрочитанными сообщениями. Принимает true, Y или y
ПараметрonlyOpenLines (query) Типstring Обяз.нет По умолч.— ОписаниеТолько линии открытых каналов. Принимает true, Y или y
ПараметрonlyCopilot (query) Типstring Обяз.нет По умолч.— ОписаниеТолько чаты с AI-ассистентом. Принимает true, Y или y
ПараметрonlyChannel (query) Типstring Обяз.нет По умолч.— ОписаниеТолько каналы. Принимает true, Y или y
ПараметрlastMessageDate (query) Типstring Обяз.нет По умолч.— ОписаниеДата последнего сообщения для постраничной навигации (ISO 8601). В режиме v2 — курсор по правилу ниже, формат YYYY-MM-DDTHH:MM:SS со смещением или Z, без долей секунды
ПараметрupdatedAfter (query) Типstring Обяз.нет По умолч.— ОписаниеРежим дельты: вернуть диалоги, изменённые начиная с указанного момента. Дата в ISO 8601 с явным смещением или Z. Несовместим с offset и lastMessageDate
Параметрlimit (query) Типnumber Обяз.нет По умолч.50 ОписаниеКоличество элементов в ответе. Максимум 200. В режиме v2 — от 50 до 200: меньшее значение поднимается до 50, большее срезается до 200, в обоих случаях переданное и применённое значения возвращаются в meta
Параметрoffset (query) Типnumber Обяз.нет По умолч.0 ОписаниеСмещение для постраничной навигации

Режим дельты. Параметр updatedAfter переключает эндпоинт в режим «что изменилось с указанного момента»: GET /v1/chats/recent?updatedAfter=2026-06-28T00:00:00Z. В ответ приходит массив диалогов, у которых dateUpdate не раньше переданного момента. Граница включительна — диалог с dateUpdate, равным переданному моменту, попадает в ответ, поэтому при сдвиге курсора на максимальное увиденное значение пограничная запись придёт повторно.

Размером выборки в этом режиме управляет сервер: читается одна страница до 200 диалогов. Переданный limit на неё не влияет и возвращается в meta.requestedLimit вместе с применённым meta.appliedLimit.

Если в meta пришло truncated со значением true, дельта может быть неполной: за отданной страницей есть ещё диалоги, либо форму ответа не удалось разобрать. В этом случае не сдвигайте updatedAfter, а получите полный список постраничным режимом с курсором lastMessageDate. Число возвращённых строк признаком полноты не является — короткий ответ приходит и тогда, когда за ним есть ещё данные.

Дата без явного смещения — например 2026-06-29 10:00:00 — отклоняется с 400 INVALID_PARAMS: такое значение читается по-разному в зависимости от часового пояса сервера, поэтому момент требуется указать однозначно.

Режим v2. format=v2 переключает эндпоинт в режим v2: первая страница запрашивается без lastMessageDate, следующие — с ним. В data приходит объект v2 — recentItems и коллекции chats, users, messages, files — с ключами в camelCase. Режим принимает только format, limit, lastMessageDate и unreadOnly (true или false). Любой другой параметр, в том числе параметры прежнего режима и их формы в верхнем регистре (OFFSET, LIMIT, LAST_UPDATE), отклоняется с 400 INVALID_PARAMS и именем параметра. Список всегда общий, без вложенных разделов. У режима своя корзина лимита запросов, отдельная от прежнего режима.

Курсор следующей страницы — наименьшая непустая dateLastActivity среди незакреплённых строк текущей страницы. Сравнивайте моменты времени, а не строки: смещение у дат бывает разным. Граница включительная, а закреплённые чаты с датой не новее курсора открывают каждую страницу — повторы снимайте по chatId. Конец списка — только hasNextPage: false. Если при hasNextPage: true курсора нет или он равен прежнему, повторите запрос с бо́льшим limit, вплоть до 200. true без продвижения и при 200 — отказ, а не конец списка. Строк ответа не отбрасывайте, даже когда показываете меньше: курсор считается по всему ответу, и отброшенные строки больше не придут. Обход — не снимок: чат, поднятый новой активностью из-под курсора во время обхода, в нём не появится, поэтому после обхода перечитайте первую страницу. Для полного обхода берите limit=200: закреплённые строки повторяются на каждой странице, и маленькая страница тратит запросы на повторы.

Примеры

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

Terminal
curl "https://vibecode.bitrix24.tech/v1/chats/recent?limit=20" \
  -H "X-Api-Key: YOUR_API_KEY"

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

Terminal
curl "https://vibecode.bitrix24.tech/v1/chats/recent?limit=20" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/recent?limit=20', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
console.log('Последние диалоги:', data.items)

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/recent?limit=20', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})
const { data } = await res.json()

Поля ответа

Поле Тип Описание
Полеsuccess Типboolean ОписаниеВсегда true при успехе
Полеdata Типobject|array ОписаниеОбъект результата. В режиме дельты — массив диалогов, см. абзац под таблицей
Полеdata.items Типarray ОписаниеМассив последних диалогов
Полеdata.items[].id Типstring ОписаниеИдентификатор диалога (chatXXX для группового чата или числовой ID для личного диалога)
Полеdata.items[].chatId Типnumber ОписаниеЧисловой ID чата
Полеdata.items[].type Типstring ОписаниеТип диалога: chat, openlines, copilot, channel
Полеdata.items[].title Типstring ОписаниеНазвание диалога
Полеdata.items[].avatar Типobject ОписаниеАватар диалога
Полеdata.items[].avatar.url Типstring ОписаниеURL изображения аватара. Пустая строка, если аватар не задан
Полеdata.items[].avatar.color Типstring ОписаниеЦвет аватара в шестнадцатеричном формате, например #4ba984
Полеdata.items[].message Типobject ОписаниеПоследнее сообщение в диалоге
Полеdata.items[].message.id Типnumber ОписаниеID сообщения
Полеdata.items[].message.text Типstring ОписаниеТекст сообщения
Полеdata.items[].message.authorId Типnumber ОписаниеID автора сообщения
Полеdata.items[].message.date Типstring ОписаниеДата сообщения (ISO 8601)
Полеdata.items[].message.file Типboolean ОписаниеСодержит ли сообщение файл
Полеdata.items[].message.attach Типboolean ОписаниеСодержит ли сообщение вложение
Полеdata.items[].message.sticker Типstring | null ОписаниеСтикер сообщения или null
Полеdata.items[].message.status Типstring ОписаниеСтатус сообщения (например, received)
Полеdata.items[].lastId Типnumber ОписаниеID последнего прочитанного сообщения
Полеdata.items[].unread Типboolean ОписаниеЕсть ли непрочитанные сообщения
Полеdata.items[].counter Типnumber ОписаниеКоличество непрочитанных сообщений
Полеdata.items[].pinned Типboolean ОписаниеДиалог закреплён
Полеdata.items[].dateUpdate Типstring ОписаниеДата последнего обновления диалога (ISO 8601)
Полеdata.items[].dateLastActivity Типstring ОписаниеДата последней активности (ISO 8601)
Полеdata.items[].chat Типobject ОписаниеРасширенная информация о чате
Полеdata.items[].chat.id Типnumber ОписаниеЧисловой ID чата
Полеdata.items[].chat.name Типstring ОписаниеСистемное название чата
Полеdata.items[].chat.type Типstring ОписаниеТип чата: chat, general, openlines, copilot, channel, mail, crm и другие
Полеdata.items[].chat.owner Типnumber ОписаниеID владельца чата
Полеdata.items[].chat.userCounter Типnumber ОписаниеКоличество участников
Полеdata.items[].chat.role Типstring ОписаниеРоль текущего пользователя: OWNER, MANAGER, MEMBER
Полеdata.items[].chat.entityType Типstring ОписаниеТип связанной сущности (CRM, TASKS, MAIL, GENERAL и другие)
Полеdata.items[].chat.entityId Типstring ОписаниеID связанной сущности
Полеdata.hasMorePages Типboolean Описаниеtrue, если есть следующая страница
Полеdata.hasMore Типboolean ОписаниеДублирует hasMorePages. Сохранён для обратной совместимости
Полеmeta.requestedLimit Типnumber ОписаниеПереданный limit до срезания. Присутствует вместе с appliedLimit, только когда переданное значение вышло за диапазон от 1 до 200, когда limit передан в режиме дельты или когда в режиме v2 он меньше 50 или больше 200
Полеmeta.appliedLimit Типnumber ОписаниеПрименённое значение limit — только если он был приведён к границе. В режиме дельты приходит при любом переданном limit и равно размеру серверной страницы — 200
Полеmeta.mode Типstring ОписаниеЗначение delta. Приходит только в режиме дельты
Полеmeta.returned Типnumber ОписаниеЧисло диалогов в ответе. Приходит только в режиме дельты
Полеmeta.truncated Типboolean ОписаниеПриходит со значением true, когда дельту не удалось подтвердить полной: за отданной страницей есть ещё диалоги либо форма ответа не разобрана
Полеdata.recentItems Типarray ОписаниеРежим v2: строки списка в порядке портала — закреплённые первыми, далее по активности
Полеdata.recentItems[].dialogId Типstring ОписаниеРежим v2: ID диалога (chatXXX или ID пользователя) — его принимают загрузка чата и лента сообщений
Полеdata.recentItems[].chatId Типnumber ОписаниеРежим v2: ID чата — ключ для снятия повторов. Совпадает с data.chat.id загрузки чата
Полеdata.recentItems[].pinned Типboolean ОписаниеРежим v2: чат закреплён
Полеdata.recentItems[].dateLastActivity Типstring|null ОписаниеРежим v2: момент последней активности. Наименьшее значение среди незакреплённых строк — курсор следующей страницы
Полеdata.hasNextPage Типboolean ОписаниеРежим v2: false — конец списка

В режиме дельты data — массив диалогов с теми же полями элемента, что перечислены выше для data.items. Поля hasMorePages и hasMore в этом режиме не возвращаются, их роль выполняет meta.truncated.

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

Постраничный режим:

JSON
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "chat456",
        "chatId": 456,
        "type": "chat",
        "title": "Команда разработки",
        "avatar": {
          "url": "",
          "color": "#4ba984"
        },
        "message": {
          "id": 1201,
          "text": "Обновление задачи готово",
          "authorId": 1,
          "date": "2026-06-03T16:51:12+03:00",
          "file": false,
          "attach": false,
          "sticker": null,
          "status": "received"
        },
        "lastId": 1195,
        "pinned": false,
        "unread": false,
        "counter": 0,
        "dateUpdate": "2026-06-03T16:51:12+03:00",
        "dateLastActivity": "2026-06-03T16:51:12+03:00",
        "chat": {
          "id": 456,
          "name": "Команда разработки",
          "type": "chat",
          "owner": 1,
          "userCounter": 5,
          "role": "OWNER",
          "entityType": "",
          "entityId": ""
        }
      },
      {
        "id": "chat123",
        "chatId": 123,
        "type": "crm",
        "title": "Чат по сделке",
        "avatar": {
          "url": "",
          "color": "#f76187"
        },
        "message": {
          "id": 980,
          "text": "Договор согласован",
          "authorId": 7,
          "date": "2026-06-02T14:08:10+03:00",
          "file": false,
          "attach": false,
          "sticker": null,
          "status": "received"
        },
        "lastId": 0,
        "pinned": false,
        "unread": false,
        "counter": 0,
        "dateUpdate": "2026-06-02T14:08:10+03:00",
        "dateLastActivity": "2026-06-02T14:08:10+03:00",
        "chat": {
          "id": 123,
          "name": "Чат по сделке",
          "type": "crm",
          "owner": 1,
          "userCounter": 2,
          "role": "MEMBER",
          "entityType": "CRM",
          "entityId": "DEAL|42"
        }
      }
    ],
    "hasMorePages": true,
    "hasMore": true
  }
}

Режим дельты. Показаны основные поля элемента, полный набор — в таблице выше:

JSON
{
  "success": true,
  "data": [
    {
      "id": "chat456",
      "chatId": 456,
      "type": "chat",
      "title": "Команда разработки",
      "pinned": false,
      "unread": false,
      "counter": 0,
      "dateUpdate": "2026-06-29T10:12:44+03:00",
      "dateLastActivity": "2026-06-29T10:12:44+03:00"
    }
  ],
  "meta": {
    "mode": "delta",
    "returned": 1
  }
}

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

403 — нет скоупа im:

JSON
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'im' scope"
  }
}

Ошибки

HTTP Код Описание
HTTP200 КодWarning: 299 ОписаниеФильтр игнорируется по умолчанию; прежние данные сохраняются, предупреждение передаётся заголовком Warning.
HTTP400 только при включённом строгом режиме КодUNSUPPORTED_FILTER ОписаниеСерверный режим выключен по умолчанию; до его включения эндпоинт сохраняет HTTP 200 и прежние данные.
HTTP400 КодINVALID_PARAMS ОписаниеupdatedAfter передан без явного смещения или Z, либо не является датой
HTTP400 КодINVALID_PARAMS ОписаниеupdatedAfter передан вместе с offset или lastMessageDate
HTTP400 КодINVALID_PARAMS ОписаниеРежим v2: параметр вне format, limit, lastMessageDate, unreadOnly, повтор параметра, кроме format, нечисловой limit, unreadOnly не true и не false или lastMessageDate не в формате YYYY-MM-DDTHH:MM:SS со смещением или Z либо с несуществующей датой или временем (2026-02-30, 24:00)
HTTP403 КодSCOPE_DENIED ОписаниеAPI-ключ не имеет скоупа im
HTTP401 КодTOKEN_MISSING ОписаниеAPI-ключ не имеет настроенных токенов Битрикс24
HTTP422 КодBITRIX_ERROR ОписаниеБитрикс24 вернул ошибку (подробности в message)
HTTP502 КодBITRIX_UNAVAILABLE ОписаниеБитрикс24 недоступен или вернул ошибку сервера

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

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

  • Флаги skipOpenLines и onlyOpenLines взаимоисключающие: включение обоих приводит к результату, при котором ни один из чатов открытых линий не попадёт в список.
  • В обычном режиме глубокий offset передаётся в Битрикс24. Небольшое окно читается из одной буферной страницы, неполная граничная строка может потребовать один дозапрос. Новая активность между запросами может менять порядок списка. В обычном режиме граница даты включительная: передайте dateLastActivity последнего незакреплённого элемента, не передавайте offset и удаляйте повторы по chatId. Закреплённые строки и строки с той же датой могут повторяться. Если курсор не продвинулся, увеличьте limit до 200.
  • Ответ содержит поле data.copilot с конфигурацией AI-ассистента портала. К списку диалогов оно не относится.
  • В режиме дельты диалог с нечитаемым значением dateUpdate остаётся в ответе: лишняя запись безопаснее потерянного изменения.
  • Фильтры семейств skip*, only* и unreadOnly действуют и в режиме дельты, сужая просматриваемую страницу.
  • В режиме v2 ключи-имена полей приводятся к camelCase, а ключи-данные остаются как есть: ключи словаря data.copilot.roles — коды ролей, и copilot_assistant приходит как copilot_assistant — тем же значением, что role у чата, поэтому роль находится прямым обращением roles[role].
  • На портале без методов v2 режим отвечает 422 BITRIX_ERROR с кодом портала в error.b24Code и не откатывается на прежний ответ молча: форма ответа другая.

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