Справочник API

Беседы

Список бесед

Возвращает беседы в реальном времени. limit: 1..100, по умолчанию 20. type содержит точные значения user / group / channel без trim. В WhatsApp без label_id возвращаются избранные / «特别关注» беседы. Невалидный cursor обрабатывается провайдерами по-разному.

GEThttps://api.unifyport.ai/v1/accounts/{account_id}/conversations

Поддерживаемые каналы

TelegramWhatsAppLINEXFacebookTikTok

Перед вызовом

Используйте X-Api-Key нужного рабочего пространства на сервере. Перед запуском замените все заполнители.

Откуда взять параметры
account_id
Возьмите data.id из создания или запроса аккаунта. Идентификатор относится к рабочему пространству X-Api-Key. Получить аккаунт

Параметры запроса

Заголовки

X-Api-Key
stringобязательно

API-ключ рабочей области. Рабочая область определяется по этому заголовку.

Параметры пути

account_id
stringобязательно

Идентификатор для маршрута раздела conversations.

Параметры запроса

type
string

Точные значения enum через запятую: user, group или channel. Пробелы не обрезаются, регистр не изменяется, пустые элементы не игнорируются. Недопустимые значения возвращают 400 invalid_conversation_type. В WhatsApp group включает группы объявлений сообщества; все групповые беседы WhatsApp возвращают type=group.

cursor
string

Непрозрачный курсор провайдера. Передавайте предыдущий next_cursor без изменений; пропустите или оставьте пустым для первой страницы. Поддельные, просроченные или повторно используемые в других запросах курсоры могут игнорироваться, сбрасываться на первую страницу или вызывать ошибку провайдера. Не рассчитывайте на единообразный ответ 400.

limit
integer

Размер страницы от 1 до 100; значение по умолчанию указано на странице эндпоинта.

minimum: 1 · maximum: 100

label_id
string

Точный ID метки. В WhatsApp без label_id возвращаются избранные / «特别关注» беседы.

Тело запроса

Этот эндпоинт не требует JSON-тела запроса.

Как понять результат

Оцените результат по полям ответа и HTTP-статусу этого API, затем выберите следующий шаг в связанных операциях.

Ответ 200 OK

{
  "request_id": "<REQUEST_ID>",
  "data": {
    "items": [
      {
        "conversation_id": "peer_example",
        "type": "user",
        "title": "Display name",
        "avatar_url": "",
        "unread_count": 3,
        "last_message_at": "2026-05-13T10:00:00Z"
      }
    ],
    "next_cursor": "",
    "has_more": false
  }
}

Тело ответа

conversation_id
string

Идентификатор беседы. Используйте его как цель при отправке сообщений или вызове маршрутов бесед.

type
string

Стандартный тип беседы: user, group или channel. Группы объявлений сообщества WhatsApp по-прежнему используют group.

enum: user, group, channel

title
string

Отображаемое название беседы.

username
string

Имя пользователя беседы на стороне провайдера, если доступно.

avatar_url
string

URL аватара или пустая строка, если он не задан.

description
string

Описание группы или канала, когда оно доступно.

last_message_at
string

Метка времени RFC3339 самого последнего сообщения.

format: date-time

last_message_text
string

Текстовый фрагмент последнего сообщения, если доступен.

unread_count
integer

Число непрочитанных сообщений в беседе.

format: int64

members_count
integer

Число участников; возвращается для групповых бесед.

format: int64

subscribers_count
integer

Число подписчиков канала, если доступно.

format: int64

is_pinned
boolean

Закреплена ли беседа подключённым аккаунтом.

is_muted
boolean

Отключены ли уведомления беседы для подключённого аккаунта.

created_at
string

Время создания беседы по данным провайдера, если доступно.

format: date-time

extra
object

Дополнительные поля провайдера. Групповые беседы WhatsApp могут содержать классификацию групп объявлений; список бесед не гарантирует наличие этой классификации.

is_announcement_group
boolean

Предоставляется только для групп WhatsApp. true подтверждает, что это группа объявлений сообщества; false означает, что текущие данные подтверждают несоответствие условиям такой группы. Отсутствие поля означает неизвестное состояние; null не возвращается. Эта классификация не указывает на право текущего аккаунта отправлять сообщения.

next_cursor
string

Непрозрачный курсор для следующей страницы. Передайте его обратно как cursor; пустая строка означает, что больше страниц нет.

has_more
boolean

true, когда за пределами этой страницы доступно больше результатов.

Ответы

200

200 OK

Запрос выполнен. См. пример тела ответа.

400

Bad Request

Тело запроса, путь или параметры некорректны.

401

Unauthorized

Заголовок X-Api-Key отсутствует или недействителен.

403

Forbidden

Запрос распознан, но операция запрещена.

404

Not Found

Запрошенный ресурс не найден. Сверьте error.code с текущей операцией.

409

Conflict

Запрошенная операция конфликтует с существующим аккаунтом провайдера или ресурсом.

500

Internal Server Error

Сервис столкнулся с неожиданной ошибкой.

501

Not Implemented

Выбранный провайдер не реализует эту операцию.

502

Bad Gateway

Адаптер или вышестоящий провайдер не смог завершить операцию.

При ошибке запроса

Проверьте HTTP и error.code/numeric_code, сохраните request_id. Исправьте параметры, завершите авторизацию или проверьте runtime. До повторной отправки или записи выясните результат предыдущей попытки. Справочник ошибок

Сопоставляйте HTTP-статус, error.code и error.numeric_code с текущей операцией. Числовой код — строка. Сохраняйте request_id для диагностики: это не ключ идемпотентности и не идентификатор задачи.

invalid_conversation_type · 37000 · 400

type должен быть user, group или channel.

Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.

Пример JSON; message зависит от фактической причины · 400 · 37000
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_conversation_type",
    "numeric_code": "37000",
    "message": "Field 'type' must be one of: user, group, channel"
  }
}
invalid_request · 10000 · 400

Проверьте JSON и обязательные поля.

Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.

Пример JSON; message зависит от фактической причины · 400 · 10000
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_request",
    "numeric_code": "10000",
    "message": "Invalid request parameters"
  }
}
invalid_target_workspace · 11003 · 400

Целевое рабочее пространство в заголовке переопределения пусто или задано неверно. Удалите этот заголовок и используйте API-ключ нужного пространства.

Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.

Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.

Пример JSON; message зависит от фактической причины · 400 · 11003
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_target_workspace",
    "numeric_code": "11003",
    "message": "Invalid target workspace"
  }
}
provider_invalid_request · 30001 · 400

Проверьте поля и форматы, специфичные для канала.

Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.

Пример JSON; message зависит от фактической причины · 400 · 30001
{
  "request_id": "req_example",
  "error": {
    "code": "provider_invalid_request",
    "numeric_code": "30001",
    "message": "Provider rejected the request"
  }
}
unsupported_conversation_type · 37001 · 400

Канал не поддерживает операцию; выберите доступную в таблице возможностей.

Действия и повторы: Выберите поддерживаемые канал и действие. Повтор запроса не добавит возможностей и не откроет доступ к бета-функциям.

Пример JSON; message зависит от фактической причины · 400 · 37001
{
  "request_id": "req_example",
  "error": {
    "code": "unsupported_conversation_type",
    "numeric_code": "37001",
    "message": "Operation not supported for this conversation type"
  }
}
invalid_api_key · 11001 · 401

Проверьте правильность и активность ключа API.

Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.

Пример JSON; message зависит от фактической причины · 401 · 11001
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_api_key",
    "numeric_code": "11001",
    "message": "Invalid API key"
  }
}
missing_api_key · 11000 · 401

Добавьте заголовок X-Api-Key.

Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.

Пример · 401 · 11000
{
  "request_id": "req_xxx",
  "error": {
    "code": "missing_api_key",
    "numeric_code": "11000",
    "message": "Missing X-Api-Key header"
  }
}
workspace_override_forbidden · 11002 · 403

Запрос пытается переопределить рабочее пространство без необходимых прав. Удалите заголовок переопределения и используйте API-ключ нужного рабочего пространства.

Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.

Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.

Пример JSON; message зависит от фактической причины · 403 · 11002
{
  "request_id": "req_example",
  "error": {
    "code": "workspace_override_forbidden",
    "numeric_code": "11002",
    "message": "Workspace override is not allowed"
  }
}
target_workspace_not_found · 11004 · 404

Переопределённое рабочее пространство не найдено или недоступно. Проверьте его принадлежность, удалите заголовок переопределения и используйте нужный API-ключ; повторы не дадут доступ.

Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.

Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.

Пример JSON; message зависит от фактической причины · 404 · 11004
{
  "request_id": "req_example",
  "error": {
    "code": "target_workspace_not_found",
    "numeric_code": "11004",
    "message": "Target workspace not found"
  }
}
account_binding_not_found · 30006 · 409

Нет активной привязки к подключению канала; проверьте состояние аккаунта.

Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.

Пример JSON; message зависит от фактической причины · 409 · 30006
{
  "request_id": "req_example",
  "error": {
    "code": "account_binding_not_found",
    "numeric_code": "30006",
    "message": "Account is not bound to an available server"
  }
}
egress_configuration_pending · 20032 · 409

Сейчас невозможно подтвердить или загрузить сетевую конфигурацию платформы по умолчанию. Это не означает выход аккаунта из системы.

Условие: Операция использует выделяемую платформой сетевую ёмкость или закреплённую за аккаунтом конфигурацию сети по умолчанию.

Действия и повторы: Сохраните request_id и проверьте аккаунт или результат создания перед повторной записью. Дождитесь восстановления ёмкости или конфигурации либо обратитесь в поддержку. Не создавайте аккаунты, не меняйте сеть и не перезапускайте их автоматически снова и снова.

Пример JSON; message зависит от фактической причины · 409 · 20032
{
  "request_id": "req_example",
  "error": {
    "code": "egress_configuration_pending",
    "numeric_code": "20032",
    "message": "Account network configuration is pending verification"
  }
}
provider_not_ready · 30009 · 409

Подключение не готово. Перед повтором проверьте авторизацию и runtime_status.

Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.

Пример JSON; message зависит от фактической причины · 409 · 30009
{
  "request_id": "req_example",
  "error": {
    "code": "provider_not_ready",
    "numeric_code": "30009",
    "message": "Provider client is not ready"
  }
}
provider_not_ready · 30014 · 409

Отсутствует экземпляр провайдера, нужный аккаунту. Это проблема доступности среды выполнения, а не доказательство истечения авторизации.

Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.

Каналы: WhatsApp

Пример JSON; message зависит от фактической причины · 409 · 30014
{
  "request_id": "req_example",
  "error": {
    "code": "provider_not_ready",
    "numeric_code": "30014",
    "message": "Provider instance is missing"
  }
}
provider_not_ready · 30015 · 409

Среда выполнения провайдера остановлена. Перед запуском выясните, не было ли это намеренным; остановка сама по себе не означает выход из аккаунта.

Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.

Каналы: WhatsApp

Пример JSON; message зависит от фактической причины · 409 · 30015
{
  "request_id": "req_example",
  "error": {
    "code": "provider_not_ready",
    "numeric_code": "30015",
    "message": "Provider runtime is stopped"
  }
}
list_conversations_failed · 20020 · 500

Проверьте account_id и используйте X-Api-Key рабочего пространства владельца аккаунта. Текущий ключ не даёт доступа к аккаунту, которого нет в этом пространстве.

Условие: Применяется, когда аккаунт не найден: прежние HTTP-статус и код операции сохраняются, а numeric_code уточняет отсутствие аккаунта.

Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.

Пример JSON; message зависит от фактической причины · 500 · 20020
{
  "request_id": "req_example",
  "error": {
    "code": "list_conversations_failed",
    "numeric_code": "20020",
    "message": "Account not found"
  }
}
list_conversations_failed · 30010 · 500

Провайдер не выполнил операцию. message может содержать исходную причину после «Provider operation failed:»; текст меняется и не является стабильным программным интерфейсом.

Условие: Применяется, когда канал не сообщает более точную категорию сбоя; сохраняется ошибка текущей операции.

Действия и повторы: Сохраните request_id, проверьте идентификаторы и доступ аккаунта. Повторяйте чтение после проверки причины; неудачный запрос не доказывает отсутствие ресурса или пустой результат.

Каналы: WhatsApp

Пример JSON; message зависит от фактической причины · 500 · 30010
{
  "request_id": "req_example",
  "error": {
    "code": "list_conversations_failed",
    "numeric_code": "30010",
    "message": "Provider operation failed"
  }
}
list_conversations_failed · 37003 · 500

Список бесед: сервис не смог получить достоверный результат запроса.

Действия и повторы: Сохраните request_id, проверьте идентификаторы и доступ аккаунта. Повторяйте чтение после проверки причины; неудачный запрос не доказывает отсутствие ресурса или пустой результат.

Пример JSON; message зависит от фактической причины · 500 · 37003
{
  "request_id": "req_example",
  "error": {
    "code": "list_conversations_failed",
    "numeric_code": "37003",
    "message": "Failed to list conversations"
  }
}
unsupported_by_provider · 30003 · 501

Канал не поддерживает операцию; выберите доступную в таблице возможностей.

Действия и повторы: Выберите поддерживаемые канал и действие. Повтор запроса не добавит возможностей и не откроет доступ к бета-функциям.

Пример · 501 · 30003
{
  "request_id": "req_xxx",
  "error": {
    "code": "unsupported_by_provider",
    "numeric_code": "30003",
    "message": "Operation not supported by this provider"
  }
}
provider_adapter_not_found · 30004 · 502

Сервис канала недоступен. Проверьте состояние или повторите позже; перед повтором записи проверьте предыдущий результат.

Действия и повторы: Сохраните request_id, проверьте идентификаторы и доступ аккаунта. Повторяйте чтение после проверки причины; неудачный запрос не доказывает отсутствие ресурса или пустой результат.

Пример JSON; message зависит от фактической причины · 502 · 30004
{
  "request_id": "req_example",
  "error": {
    "code": "provider_adapter_not_found",
    "numeric_code": "30004",
    "message": "Provider adapter unavailable"
  }
}
provider_unavailable · 30002 · 502

Сервис канала недоступен. Проверьте состояние или повторите позже; перед повтором записи проверьте предыдущий результат.

Действия и повторы: Сохраните request_id, проверьте идентификаторы и доступ аккаунта. Повторяйте чтение после проверки причины; неудачный запрос не доказывает отсутствие ресурса или пустой результат.

Пример · 502 · 30002
{
  "request_id": "req_example_provider_unavailable",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30002",
    "message": "Provider service unavailable"
  }
}
provider_unavailable · 30010 · 502

Провайдер не выполнил операцию. message может содержать исходную причину после «Provider operation failed:»; текст меняется и не является стабильным программным интерфейсом.

Действия и повторы: Сохраните request_id, проверьте идентификаторы и доступ аккаунта. Повторяйте чтение после проверки причины; неудачный запрос не доказывает отсутствие ресурса или пустой результат.

Каналы: WhatsApp

Пример · 502 · 30010
{
  "request_id": "req_example_operation_failed",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30010",
    "message": "Provider operation failed: Example operation could not be completed"
  }
}
provider_unavailable · 30021 · 502

Во время этого запроса аккаунт не был подключён к платформе обмена сообщениями. При добавлении контакта WhatsApp возможен ответ 500 / create_contact_failed / 30021. Это не доказывает выход из аккаунта или сохранение текущего состояния disconnected. Сначала запросите текущее состояние, затем выберите способ восстановления.

Действия и повторы: Приостановите операции, которым нужно соединение. Сначала вызовите POST /v1/accounts/{account_id}/runtime/refresh, восстановите соединение по актуальному состоянию и подтвердите runtime_status=running перед бизнес-запросами. Перед повторной отправкой выясните результат предыдущей записи.

Каналы: WhatsApp

Пример · 502 · 30021
{
  "request_id": "req_example_connection_disconnected",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30021",
    "message": "example operation: websocket not connected"
  }
}