Справочник API

Авторизация аккаунта

Импортировать сессию

Импортируйте URL сессии или данные выбранного канала, чтобы начать авторизацию. TikTok session использует tiktok.cookies. При pending проверяйте авторизацию и состояние выполнения до authorized и running. HTTP 200 сам по себе не означает завершения авторизации.

POSThttps://api.unifyport.ai/v1/accounts/{account_id}/auth/session

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

TelegramXFacebookTikTokWhatsApp Protocol

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

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

Подготовьте данные сессии по правилам канала: Telegram и X используют URL или ссылку на существующую сессию; объект данных whatsapp-protocol нужен только для WhatsApp Protocol. Следуйте руководству канала и не записывайте сессии и ключи в журнал.

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

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

Заголовки

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

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

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

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

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

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

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

Тело запроса

session_url
string

URL или ссылка на существующий артефакт сессии провайдера. Для Facebook обязателен session_url на JSON с массивом cookies и c_user, xs, datr. Успешный импорт не означает готовность runtime.

format: uri

whatsapp-protocol
object

Учётные данные для импорта сессии WhatsApp Protocol. Передаются только в /v1/accounts/{account_id}/auth/session в этом вложенном объекте, не через provider_data. При его указании обязательны phone, static_pub_key, static_pri_key, identity_pub_key и identity_pri_key. Ответы не возвращают ключи протокола или другие конфиденциальные учётные данные. phone используется для проверки согласованности личности; открытый и закрытый ключи протокола — только для запуска на стороне вышестоящего сервиса. Платформа подставляет фиксированное значение edge_routing; передавать его запрещено.

phone
string

Если при импорте сессии передан whatsapp-protocol, поле phone обязательно и должно быть непустой строкой для проверки соответствия идентичности. Форматированный ввод допускает пробелы, дефисы, скобки и знак плюса; сервер нормализует его в положительную числовую строку.

minLength: 1

platform
integer

Значение платформы для импорта сессии WhatsApp Protocol (int32).

format: int32

app_version
string

Версия приложения для импорта сессии WhatsApp Protocol.

server_address
string

Адрес сервера провайдера для импорта сессии WhatsApp Protocol.

fallback_server_addresses[]
string[]

Список резервных адресов серверов для импорта сессии WhatsApp Protocol.

country
string

Код страны для импорта сессии WhatsApp Protocol.

device
integer

Значение устройства для импорта сессии WhatsApp Protocol (uint32).

format: uint32

static_pub_key
string

Открытый ключ протокола; только для записи.

minLength: 1

static_pri_key
string

Закрытый ключ протокола; только для записи.

minLength: 1

identity_pub_key
string

Открытый ключ идентификации; только для записи.

minLength: 1

identity_pri_key
string

Закрытый ключ идентификации; только для записи.

minLength: 1

hash
string

Устаревшее поле совместимости; значение игнорируется и не сохраняется. Рекомендуется опускать.

peer_kem_public
string

Открытый ключ KEM другой стороны; только для записи.

auth_hex_data
string

Текущие данные аутентификации в шестнадцатеричном виде; только для записи.

authhexdata
string

Устаревшее поле данных аутентификации в шестнадцатеричном виде; только для записи.

pq_handshake_mode
string

Режим рукопожатия PQ для импорта сессии WhatsApp Protocol.

use_xxkem_handshake
boolean

Использовать ли рукопожатие XXKEM для импорта сессии WhatsApp Protocol.

tiktok
object

Только для аккаунтов TikTok с auth_mode=session. При передаче tiktok должен быть единственным полем верхнего уровня; внутри допускаются только cookies и необязательный user_id. Весь импортируемый JSON не должен превышать 65536 байт. Успешная проверка формата не означает действительность учетных данных или успешную авторизацию. Если требуется сканирование QR или код подтверждения, возвращается соответствующий статус ожидания; режим session пока не поддерживает интерактивное продолжение этих шагов. Повторный импорт не гарантирует замену существующего сеанса входа или горячую замену Cookie.

user_id
string

Необязательное поле совместимости, не используется для проверки или привязки личности; фактическая личность определяется результатом авторизации.

cookies[]
object[]

Обязательно при передаче tiktok: массив из 1–128 Cookie, доступный только для записи. Дубли пар имя/домен запрещены; другие экспортированные атрибуты Cookie сохраняются. Действительность определяется результатом входа.

minItems: 1 · maxItems: 128

name
string

Обязательное непустое имя каждого TikTok Cookie.

minLength: 1

value
string

Обязательное непустое значение каждого TikTok Cookie; только для записи.

minLength: 1

domain
string

Обязательный непустой домен каждого TikTok Cookie; экспортированное значение сохраняется.

minLength: 1

path
string

Обязательный путь каждого TikTok Cookie; должен начинаться с /.

pattern: ^/

expires
number

Необязательная экспортированная метка Unix в секундах или маркер сессионного Cookie; истечение срока при импорте не проверяется.

secure
boolean

Необязательный экспортированный флаг Secure для TikTok Cookie.

http_only
boolean

Необязательный экспортированный флаг HttpOnly для TikTok Cookie.

same_site
string

Необязательное экспортированное значение SameSite для TikTok Cookie.

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

Прочитайте результат авторизации, затем проверьте runtime_status. Импорт сессии и активное соединение — разные этапы.

Ответ pending · TikTok session

{
  "request_id": "<REQUEST_ID>",
  "data": {
    "account_id": "acc_example",
    "provider": "tiktok",
    "action": "import_session",
    "status": "pending",
    "runtime_status": "starting"
  }
}

Ответ authorized

{
  "request_id": "<REQUEST_ID>",
  "data": {
    "account_id": "acc_example",
    "status": "authorized"
  }
}

Тело ответа

account_id
string

Аккаунт провайдера, к которому относится этот ответ.

status
string

Текущий статус потока авторизации, например pending_auth, awaiting_qr_scan, awaiting_code, pending, passkey_required, passkey_pending, passkey_confirmation, passkey_confirmation_sent, authorized или failed.

Ответы

200

200 OK

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

400

Bad Request

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

401

Unauthorized

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

403

Forbidden

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

404

Not Found

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

409

Conflict

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

500

Internal Server Error

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

502

Bad Gateway

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

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

Проверьте 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"
  }
}
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_action · 30005 · 400

Действие аккаунта не распознано; используйте документированное действие.

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

Пример JSON; message зависит от фактической причины · 400 · 30005
{
  "request_id": "req_example",
  "error": {
    "code": "unsupported_action",
    "numeric_code": "30005",
    "message": "Action not supported"
  }
}
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_already_authorized · 20016 · 409

Аккаунт уже авторизован, повторная авторизация этим действием отклонена. Обновите состояние и используйте завершённый результат; не зацикливайте авторизацию или отмену.

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

Пример JSON; message зависит от фактической причины · 409 · 20016
{
  "request_id": "req_example",
  "error": {
    "code": "account_already_authorized",
    "numeric_code": "20016",
    "message": "Account is already authorized; re-authentication is not required"
  }
}
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"
  }
}
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"
  }
}
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_account_mismatch · 20017 · 409

Идентификатор канала в запросе не совпадает с привязкой аккаунта.

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

Пример JSON; message зависит от фактической причины · 409 · 20017
{
  "request_id": "req_example",
  "error": {
    "code": "provider_account_mismatch",
    "numeric_code": "20017",
    "message": "Authenticated provider account does not match the bound account; re-scan with the original account"
  }
}
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"
  }
}
wallet_account_creation_in_progress · 20030 · 409

В этом рабочем пространстве уже создаётся аккаунт с оплатой из кошелька, либо инициализация целевого аккаунта ещё не завершена.

Действия и повторы: При конфликте создания подождите согласно Retry-After и повторно используйте Idempotency-Key, если он был указан в исходном запросе. Если ошибка получена при авторизации, возьмите billing.operation_id из ответа создания и выполните GET /v1/account-operations/{operation_id}. Дождитесь data.state=SUCCEEDED, затем повторите исходное действие для того же аккаунта. billing.state=ACTIVE не означает завершения инициализации; не создавайте новый аккаунт.

Пример 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"
  }
}
run_auth_action_failed · 20010 · 500

Действие авторизации: действие авторизации не выполнено; проверьте текущий процесс, не предполагая необходимость начать заново.

Действия и повторы: Проверьте текущий процесс авторизации и необходимость действий пользователя. Не начинайте новую авторизацию только из-за этого сбоя и не отправляйте действия в истёкшую или завершённую сессию.

Пример JSON; message зависит от фактической причины · 500 · 20010
{
  "request_id": "req_example",
  "error": {
    "code": "run_auth_action_failed",
    "numeric_code": "20010",
    "message": "Failed to run auth action"
  }
}
run_auth_action_failed · 20020 · 500

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

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

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

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

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

Действия и повторы: Проверьте текущий процесс авторизации и необходимость действий пользователя. Не начинайте новую авторизацию только из-за этого сбоя и не отправляйте действия в истёкшую или завершённую сессию.

Пример 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

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

Действия и повторы: Проверьте текущий процесс авторизации и необходимость действий пользователя. Не начинайте новую авторизацию только из-за этого сбоя и не отправляйте действия в истёкшую или завершённую сессию.

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

Синхронный запрос whatsapp-protocol выявил ограничение входа с numeric_code=30020. Это может затронуть импорт сессии, runtime, отправку и запросы контактов; HTTP-статус и code текущей операции сохраняются. Не переносите на этот канал контракт событий WhatsApp с 20102.

Действия и повторы: Остановите автоматическую отправку и повторы. Попросите пользователя проверить и устранить ограничение в официальном приложении WhatsApp. Возобновляйте работу после устранения и необходимой повторной авторизации. Прежний running не доказывает снятие ограничения.

Каналы: WhatsApp Protocol

Пример · 502 · 30020
{
  "request_id": "req_example_account_restricted",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30020",
    "message": "Account login is restricted. Check the official WhatsApp app for details."
  }
}