Аккаунты
Список аккаунтов
Возвращает аккаунты провайдеров в текущем workspace. Состояние аутентификации доступно через эндпоинты Authentication.
https://api.unifyport.ai/v1/accountsПоддерживаемые каналы
Перед вызовом
Используйте X-Api-Key нужного рабочего пространства на сервере. Перед запуском замените все заполнители.
Параметры запроса
Заголовки
X-Api-KeyAPI-ключ рабочей области. Рабочая область определяется по этому заголовку.
Параметры запроса
limitМаксимальное число аккаунтов на странице: от 1 до 100, по умолчанию 20. Недопустимое значение или повторная передача параметра limit возвращает 400 invalid_request (numeric_code=10000). Для следующих страниц значение можно менять.
minimum: 1 · maximum: 100
cursorНепрозрачный курсор списка аккаунтов. Для первой страницы опустите параметр или передайте пустую строку; для следующей передайте data.next_cursor из предыдущего ответа без изменений. Действителен только в workspace, где был выдан. Недопустимый cursor, повторная передача параметра или использование в другом workspace возвращает 400 invalid_request (numeric_code=10000).
Тело запроса
Этот эндпоинт не требует JSON-тела запроса.
Как понять результат
Читайте аккаунты из data.items. При data.has_more=true передайте data.next_cursor без изменений как cursor следующей страницы. Состояние авторизации аккаунта запрашивается отдельно через API авторизации.
Ответ 200 OK
{
"request_id": "<REQUEST_ID>",
"data": {
"items": [
{
"id": "acc_example",
"name": "Telegram Production",
"provider": "telegram",
"region": "global",
"status": "active",
"runtime_status": "running",
"auth_mode": "qrcode",
"capabilities": [
"send_message",
"receive_message"
],
"metadata": {
"env": "production"
},
"provider_account_ref": "provider-side-identifier",
"provider_profile": {
"id": "778899",
"phone": "8600000000000",
"username": "production_bot",
"display_name": "Production Bot",
"first_name": "Production",
"last_name": "Bot",
"avatar_url": "https://example.com/avatar.jpg",
"bio": "Customer support"
}
}
],
"has_more": false
}
}
Тело ответа
provider_profileobjectПрофиль, сообщённый провайдером, например display_name. Не возвращается до аутентификации аккаунта.
provider_profileПрофиль, сообщённый провайдером, например display_name. Не возвращается до аутентификации аккаунта.
idНепрозрачный идентификатор аккаунта в подключённом канале. Для WhatsApp это может быть canonical LID без суффикса устройства.
device_idНеобязательный номер устройства входа в сведениях аккаунта WhatsApp, если текущую сессию можно определить. Может измениться после повторной авторизации и не является постоянным идентификатором.
minimum: 0 · maximum: 65535
phoneНормализованный телефон без пробелов, дефисов и начального плюса.
usernameИмя пользователя у провайдера, если доступно.
display_nameОтображаемое имя аккаунта; для WhatsApp оно формируется с приоритетом BusinessName и резервным переходом на PushName.
push_namePushName, сейчас заданный в аккаунте WhatsApp; другие провайдеры не определяют семантику этого поля.
business_nameWhatsApp BusinessName; поле отсутствует, если provider не возвращает значение.
first_nameИмя, сообщённое провайдером.
last_nameФамилия, сообщённая провайдером.
avatar_urlURL аватара аккаунта у провайдера.
bioОписание или статус аккаунта у провайдера.
platformИдентификатор платформы входа, который WhatsApp сообщает при сопряжении. Считайте его непрозрачной строкой и поддерживайте неизвестные значения; для других провайдеров смысл поля не определён. Это не поле device_platform.
billingobjectОплаченный период только аккаунтов кошелька; баланс не доказывает покупку.
billingОплаченный период только аккаунтов кошелька; баланс не доказывает покупку.
period_start_atНачало оплаченного периода с сервера.
format: date-time
period_end_atКонец оплаченного периода с сервера.
format: date-time
amount_minorНеизменяемая сумма сервера в центах USD; точное целое число.
minimum: 1 · format: int64
currencyТолько USD.
operation_idПубличный ID из billing.operation_id или ответа удаления; используйте неизменным в исходном пространстве.
stateСостояние оплаты или операции не доказывает авторизацию, подключение или зачисление возврата.
enum: ACTIVE, DELETING, DELETED, COMPENSATED, REVIEW
idУникальный идентификатор аккаунта (acc_...). Используйте его в маршрутах уровня аккаунта.
nameПонятное человеку имя аккаунта.
providerИдентификатор канала. Используйте значение API без изменений; возвращаемые этим API значения указаны в enum ниже.
enum: telegram, whatsapp, line, twitter, facebook, zalo, tiktok, whatsapp-protocol
regionРегион выхода в сеть по умолчанию, выбранный для аккаунта.
statusСостояние жизненного цикла аккаунта, например active.
runtime_statusНормализованное состояние runtime: одно из unknown, starting, running, stopping, stopped, reconnecting, disconnected или error.
enum: unknown, starting, running, stopping, stopped, reconnecting, disconnected, error
auth_modeПоток аутентификации, используемый аккаунтом: code, qrcode или session. TikTok поддерживает qrcode и session, но переключение между ними в существующем аккаунте не поддерживается.
capabilities[]Возможности, включённые для аккаунта, например send_message и receive_message.
metadataВаши собственные метки окружения, сохранённые в аккаунте.
provider_account_refИдентификатор на стороне провайдера, который можно привязать для сопоставления аккаунта с вашей собственной системой.
proxyПрокси, явно настроенный клиентом; учётные данные выхода в сеть по умолчанию платформы не возвращаются.
has_moreЕсть ли следующая страница списка аккаунтов.
next_cursorНепрозрачный курсор следующей страницы списка аккаунтов, возвращается только при has_more=true. Передайте его без изменений как cursor для следующей страницы; на последней странице поле отсутствует.
Ответы
200200 OK
Запрос выполнен. См. пример тела ответа.
400Bad Request
Тело запроса, путь или параметры некорректны.
401Unauthorized
Заголовок X-Api-Key отсутствует или недействителен.
403Forbidden
Запрос распознан, но операция запрещена.
404Not Found
Запрошенный ресурс не найден. Сверьте error.code с текущей операцией.
500Internal Server Error
Сервис столкнулся с неожиданной ошибкой.
При ошибке запроса
Проверьте HTTP и error.code/numeric_code, сохраните request_id. Исправьте параметры, завершите авторизацию или проверьте runtime. До повторной отправки или записи выясните результат предыдущей попытки. Справочник ошибок
Сопоставляйте HTTP-статус, error.code и error.numeric_code с текущей операцией. Числовой код — строка. Сохраняйте request_id для диагностики: это не ключ идемпотентности и не идентификатор задачи.
- 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" } }- 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" } }- list_accounts_failed · 20000 · 500
Список аккаунтов: сервис не смог получить достоверный результат запроса.
Действия и повторы: Сохраните request_id, проверьте идентификаторы и доступ аккаунта. Повторяйте чтение после проверки причины; неудачный запрос не доказывает отсутствие ресурса или пустой результат.
Пример JSON; message зависит от фактической причины · 500 · 20000
{ "request_id": "req_example", "error": { "code": "list_accounts_failed", "numeric_code": "20000", "message": "Failed to list accounts" } }