Аккаунты
Создать аккаунт
Создаёт аккаунт провайдера. auth_mode обязателен и принимает qrcode, code или session. Если комбинации provider + auth_mode нужен телефон, передайте provider_data.phone; значение сохраняется для следующих действий аутентификации. Для кошелька аккаунт создаётся сразу, без предварительного запроса цены. 201 подтверждает создание и списание; перед авторизацией проверьте billing.state. Параллельное создание в одном пространстве возвращает 409 wallet_account_creation_in_progress. Idempotency-Key необязателен; после тайм-аута сначала сверьте результат, а повтор с исходным ключом предотвращает вторую покупку.
https://api.unifyport.ai/v1/accountsПоддерживаемые каналы
Перед вызовом
Используйте X-Api-Key нужного рабочего пространства на сервере. Перед запуском замените все заполнители.
Используйте API Key нужного пространства. Аккаунты с оплатой из кошелька оплачиваются в USD на 30 дней. Баланс и пополнение доступны в Dashboard.
Параметры запроса
Заголовки
X-Api-KeyAPI-ключ рабочей области. Рабочая область определяется по этому заголовку.
Content-TypeИспользуйте application/json при отправке JSON-тела запроса.
Idempotency-KeyIdempotency-Key необязателен при создании из кошелька. Для повтора с неизвестным результатом используйте исходный ключ; без него запрос после завершения создаст новый аккаунт.
Тело запроса
nameПонятное человеку имя аккаунта.
providerКлиентский идентификатор провайдера: telegram, whatsapp, whatsapp-protocol, line, twitter, zalo или tiktok.
enum: telegram, whatsapp, line, twitter, zalo, tiktok, whatsapp-protocol, x, x_client, twitter_client
regionРегион провайдера, используемый для выделения. Выберите регион со значением allocatable: true из Список регионов провайдера.
minLength: 1
statusБизнес-состояние аккаунта, например active или inactive.
runtime_statusЗапрашиваемое состояние runtime, если провайдер позволяет менять его через настройки аккаунта.
enum: unknown, starting, running, stopping, stopped, reconnecting, disconnected, error
auth_modeОбязателен при создании аккаунта: qrcode, code или session.
enum: qrcode, code, session
capabilities[]В PATCH пропустите для сохранения, передайте [] для очистки; null недопустим.
metadataВ PATCH пропустите для сохранения, передайте {} для очистки; null недопустим.
provider_account_refИдентификатор аккаунта на стороне провайдера, обычно заполняемый после авторизации.
provider_dataНастройки провайдера. В PATCH отсутствие сохраняет значение; {} очищает без добавления учётных данных по умолчанию; null недопустим. TikTok provider_data.enable_comment принимает только Boolean, по умолчанию false; строки, числа и null дают 400 invalid_request. Изменения онлайн требуют reconnect; успех start не подтверждает применение, отключение не отзывает события из очереди. Telegram api_id и api_hash необязательны для code, qrcode и session; собственные данные передаются парой строк одного приложения. При создании без собственных данных и пропуске полей учётных данных в непустой замене используются значения платформы по умолчанию; если нужные значения недоступны, запрос завершается ошибкой. Смена значений по умолчанию не заменяет данные существующих аккаунтов. Не записывайте секреты в журнал.
proxyНеобязательная конфигурация исходящего прокси для аккаунта.
Как понять результат
Для кошелька аккаунт создаётся сразу, без предварительного запроса цены. 201 подтверждает создание и списание; перед авторизацией проверьте billing.state. Параллельное создание в одном пространстве возвращает 409 wallet_account_creation_in_progress. Idempotency-Key необязателен; после тайм-аута сначала сверьте результат, а повтор с исходным ключом предотвращает вторую покупку.
Ответ 201 · PREPAID_QUOTA
{
"request_id": "<REQUEST_ID>",
"data": {
"id": "acc_example",
"name": "Telegram Production",
"provider": "telegram",
"region": "<REGION>",
"status": "active",
"runtime_status": "stopped",
"auth_mode": "qrcode",
"capabilities": [
"send_message",
"receive_message"
]
}
}
Ответ 201 · ACCOUNT_WALLET_30D
{
"request_id": "<REQUEST_ID>",
"data": {
"id": "acc_example",
"name": "Messaging account",
"provider": "telegram",
"region": "<REGION>",
"status": "active",
"runtime_status": "stopped",
"auth_mode": "qrcode",
"capabilities": [
"send_message",
"receive_message"
],
"billing": {
"period_start_at": "2026-10-19T00:00:00Z",
"period_end_at": "2026-11-18T00:00:00Z",
"amount_minor": 1000,
"currency": "USD",
"operation_id": "op_example",
"state": "ACTIVE"
}
}
}
Тело ответа
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, 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.
capabilities[]Возможности, включённые для аккаунта, например send_message и receive_message.
metadataВаши собственные метки окружения, сохранённые в аккаунте.
provider_account_refИдентификатор на стороне провайдера, который можно привязать для сопоставления аккаунта с вашей собственной системой.
proxyНастройки исходящего прокси аккаунта, если они заданы.
Ответы
201201 Created
Запрос выполнен. См. пример тела ответа.
400Bad Request
Тело запроса, путь или параметры некорректны.
401Unauthorized
Заголовок X-Api-Key отсутствует или недействителен.
403Forbidden
Запрос распознан, но операция запрещена.
404Not Found
Запрошенный ресурс не найден. Сверьте error.code с текущей операцией.
409Conflict
Запрошенная операция конфликтует с существующим аккаунтом провайдера или ресурсом.
500Internal Server Error
Сервис столкнулся с неожиданной ошибкой.
503Service Unavailable
Необходимая серверная служба временно недоступна.
При ошибке запроса
Проверьте HTTP и error.code/numeric_code, сохраните request_id. Исправьте параметры, завершите авторизацию или проверьте runtime. До повторной отправки или записи выясните результат предыдущей попытки. Справочник ошибок
Сопоставляйте HTTP-статус, error.code и error.numeric_code с текущей операцией. Числовой код — строка. Сохраняйте request_id для диагностики: это не ключ идемпотентности и не идентификатор задачи.
- auth_mode_phone_required · 20019 · 400
При создании аккаунта этот способ требует provider_data.phone.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример JSON; message зависит от фактической причины · 400 · 20019
{ "request_id": "req_example", "error": { "code": "auth_mode_phone_required", "numeric_code": "20019", "message": "Phone number is required for this auth mode" } }- 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" } }- unsupported_provider_auth_mode · 20018 · 400
Используйте поддерживаемый каналом auth_mode.
Действия и повторы: Выберите поддерживаемые канал и действие. Повтор запроса не добавит возможностей и не откроет доступ к бета-функциям.
Пример JSON; message зависит от фактической причины · 400 · 20018
{ "request_id": "req_example", "error": { "code": "unsupported_provider_auth_mode", "numeric_code": "20018", "message": "Auth mode not supported by this provider" } }- wallet_invalid_request · 20021 · 400
Проверьте параметры создания с баланса и необязательный заголовок Idempotency-Key.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример JSON; message зависит от фактической причины · 400 · 20021
{ "request_id": "req_example", "error": { "code": "wallet_invalid_request", "numeric_code": "20021", "message": "Invalid wallet account request" } }- 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_allocation_busy · 20011 · 409
Распределение аккаунта занято; повторите позже.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20011
{ "request_id": "req_example", "error": { "code": "account_allocation_busy", "numeric_code": "20011", "message": "Allocation is busy in the current region; please retry later" } }- duplicate_provider_account · 20015 · 409
Эта учётная запись канала уже привязана к другому аккаунту пространства.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20015
{ "request_id": "req_example", "error": { "code": "duplicate_provider_account", "numeric_code": "20015", "message": "A provider account with the same identity already exists in this workspace" } }- no_allocatable_server · 20013 · 409
В регионе нет свободной ёмкости; запросите доступные регионы.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20013
{ "request_id": "req_example", "error": { "code": "no_allocatable_server", "numeric_code": "20013", "message": "No allocatable server in the current region" } }- wallet_account_creation_in_progress · 20030 · 409
В этом пространстве уже создаётся аккаунт с баланса. Дождитесь завершения и повторите запрос.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20030
{ "request_id": "req_example", "error": { "code": "wallet_account_creation_in_progress", "numeric_code": "20030", "message": "Account creation is in progress; please wait" } }- wallet_idempotency_conflict · 20024 · 409
Ключ идемпотентности связан с другими параметрами. Сначала проверьте исходную операцию.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20024
{ "request_id": "req_example", "error": { "code": "wallet_idempotency_conflict", "numeric_code": "20024", "message": "Idempotency key was used for a different request" } }- wallet_insufficient_funds · 20023 · 409
Баланса недостаточно. Владелец может пополнить кошелёк и проверить исходный запрос.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20023
{ "request_id": "req_example", "error": { "code": "wallet_insufficient_funds", "numeric_code": "20023", "message": "Insufficient wallet balance" } }- wallet_workspace_disabled · 20022 · 409
Новые покупки с баланса отключены; существующие операции не считаются отменёнными.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20022
{ "request_id": "req_example", "error": { "code": "wallet_workspace_disabled", "numeric_code": "20022", "message": "New wallet purchases are disabled" } }- workspace_account_quota_exceeded · 20014 · 409
Достигнут лимит аккаунтов для сообщений; проверьте квоту и использование.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 409 · 20014
{ "request_id": "req_example", "error": { "code": "workspace_account_quota_exceeded", "numeric_code": "20014", "message": "Workspace account quota exceeded" } }- create_account_failed · 20002 · 500
Создать аккаунт: создание ресурса завершилось ошибкой или его результат не подтверждён.
Действия и повторы: Перед повторным созданием проверьте список или состояние ресурсов: возможно, первая попытка уже сработала. Устраните причину и сохраните request_id; не создавайте дубликаты автоматически.
Пример JSON; message зависит от фактической причины · 500 · 20002
{ "request_id": "req_example", "error": { "code": "create_account_failed", "numeric_code": "20002", "message": "Failed to create account" } }- allocation_service_unavailable · 20012 · 503
Сервис распределения временно недоступен; повторите позже.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 503 · 20012
{ "request_id": "req_example", "error": { "code": "allocation_service_unavailable", "numeric_code": "20012", "message": "Allocation service is temporarily unavailable" } }- wallet_unavailable · 20028 · 503
Данные или настройки кошелька недоступны. Результат записи может быть неизвестен; проверьте исходную операцию.
Действия и повторы: Перед повторным изменением прочитайте текущее состояние ресурса и выясните результат предыдущей попытки. Сохраните request_id; не повторяйте запись автоматически при неизвестном результате.
Пример JSON; message зависит от фактической причины · 503 · 20028
{ "request_id": "req_example", "error": { "code": "wallet_unavailable", "numeric_code": "20028", "message": "Wallet service is unavailable" } }