Справочник API

Аккаунты

Создать аккаунт

Создаёт аккаунт провайдера. auth_mode обязателен и принимает qrcode, code или session. Если комбинации provider + auth_mode нужен телефон, передайте provider_data.phone; значение сохраняется для следующих действий аутентификации. Для кошелька аккаунт создаётся сразу, без предварительного запроса цены. 201 подтверждает создание и списание; перед авторизацией проверьте billing.state. Параллельное создание в одном пространстве возвращает 409 wallet_account_creation_in_progress. Idempotency-Key необязателен; после тайм-аута сначала сверьте результат, а повтор с исходным ключом предотвращает вторую покупку.

POSThttps://api.unifyport.ai/v1/accounts

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

all

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

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

Используйте API Key нужного пространства. Аккаунты с оплатой из кошелька оплачиваются в USD на 30 дней. Баланс и пополнение доступны в Dashboard.

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

Заголовки

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

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

Content-Type
stringобязательно

Используйте application/json при отправке JSON-тела запроса.

Idempotency-Key
string

Idempotency-Key необязателен при создании из кошелька. Для повтора с неизвестным результатом используйте исходный ключ; без него запрос после завершения создаст новый аккаунт.

Тело запроса

name
string

Понятное человеку имя аккаунта.

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

Клиентский идентификатор провайдера: telegram, whatsapp, whatsapp-protocol, line, twitter, zalo или tiktok.

enum: telegram, whatsapp, line, twitter, zalo, tiktok, whatsapp-protocol, x, x_client, twitter_client

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

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

minLength: 1

status
string

Бизнес-состояние аккаунта, например active или inactive.

runtime_status
string

Запрашиваемое состояние runtime, если провайдер позволяет менять его через настройки аккаунта.

enum: unknown, starting, running, stopping, stopped, reconnecting, disconnected, error

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

Обязателен при создании аккаунта: qrcode, code или session.

enum: qrcode, code, session

capabilities[]
string[]

В PATCH пропустите для сохранения, передайте [] для очистки; null недопустим.

metadata
object

В PATCH пропустите для сохранения, передайте {} для очистки; null недопустим.

provider_account_ref
string

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

provider_data
object

Настройки провайдера. В PATCH отсутствие сохраняет значение; {} очищает без добавления учётных данных по умолчанию; null недопустим. TikTok provider_data.enable_comment принимает только Boolean, по умолчанию false; строки, числа и null дают 400 invalid_request. Изменения онлайн требуют reconnect; успех start не подтверждает применение, отключение не отзывает события из очереди. Telegram api_id и api_hash необязательны для code, qrcode и session; собственные данные передаются парой строк одного приложения. При создании без собственных данных и пропуске полей учётных данных в непустой замене используются значения платформы по умолчанию; если нужные значения недоступны, запрос завершается ошибкой. Смена значений по умолчанию не заменяет данные существующих аккаунтов. Не записывайте секреты в журнал.

proxy
object

Необязательная конфигурация исходящего прокси для аккаунта.

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

Для кошелька аккаунт создаётся сразу, без предварительного запроса цены. 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_profile
object

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

id
string

Непрозрачный идентификатор аккаунта в подключённом канале. Для WhatsApp это может быть canonical LID без суффикса устройства.

device_id
integer

Необязательный номер устройства входа в сведениях аккаунта WhatsApp, если текущую сессию можно определить. Может измениться после повторной авторизации и не является постоянным идентификатором.

minimum: 0 · maximum: 65535

phone
string

Нормализованный телефон без пробелов, дефисов и начального плюса.

username
string

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

display_name
string

Отображаемое имя аккаунта; для WhatsApp оно формируется с приоритетом BusinessName и резервным переходом на PushName.

push_name
string

PushName, сейчас заданный в аккаунте WhatsApp; другие провайдеры не определяют семантику этого поля.

business_name
string

WhatsApp BusinessName; поле отсутствует, если provider не возвращает значение.

first_name
string

Имя, сообщённое провайдером.

last_name
string

Фамилия, сообщённая провайдером.

avatar_url
string

URL аватара аккаунта у провайдера.

bio
string

Описание или статус аккаунта у провайдера.

platform
string

Идентификатор платформы входа, который WhatsApp сообщает при сопряжении. Считайте его непрозрачной строкой и поддерживайте неизвестные значения; для других провайдеров смысл поля не определён. Это не поле device_platform.

billing
object

Оплаченный период только аккаунтов кошелька; баланс не доказывает покупку.

period_start_at
string

Начало оплаченного периода с сервера.

format: date-time

period_end_at
string

Конец оплаченного периода с сервера.

format: date-time

amount_minor
integer

Неизменяемая сумма сервера в центах USD; точное целое число.

minimum: 1 · format: int64

currency
string

Только USD.

operation_id
string

Публичный ID из billing.operation_id или ответа удаления; используйте неизменным в исходном пространстве.

state
string

Состояние оплаты или операции не доказывает авторизацию, подключение или зачисление возврата.

enum: ACTIVE, DELETING, DELETED, COMPENSATED, REVIEW

id
string

Уникальный идентификатор аккаунта (acc_...). Используйте его в маршрутах уровня аккаунта.

name
string

Понятное человеку имя аккаунта.

provider
string

Идентификатор канала. Используйте значение API без изменений; возвращаемые этим API значения указаны в enum ниже.

enum: telegram, whatsapp, line, twitter, zalo, tiktok, whatsapp-protocol

region
string

Регион провайдера, в котором выделен аккаунт.

status
string

Состояние жизненного цикла аккаунта, например active.

runtime_status
string

Нормализованное состояние runtime: одно из unknown, starting, running, stopping, stopped, reconnecting, disconnected или error.

enum: unknown, starting, running, stopping, stopped, reconnecting, disconnected, error

auth_mode
string

Поток аутентификации, используемый аккаунтом: code, qrcode или session.

capabilities[]
string[]

Возможности, включённые для аккаунта, например send_message и receive_message.

metadata
object

Ваши собственные метки окружения, сохранённые в аккаунте.

provider_account_ref
string

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

proxy
object

Настройки исходящего прокси аккаунта, если они заданы.

Ответы

201

201 Created

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

400

Bad Request

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

401

Unauthorized

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

403

Forbidden

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

404

Not Found

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

409

Conflict

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

500

Internal Server Error

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

503

Service 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"
  }
}