Перейти к содержанию

Справочник кодов ошибок

Каждая ошибка API Pert возвращается в едином JSON-формате:

{
  "error": "Описание ошибки для пользователя",
  "code": "MACHINE_READABLE_CODE",
  "details": {
    "field": "name",
    "reason": "required"
  }
}
  • error — человекочитаемое сообщение.
  • code — стабильный машиночитаемый код. Имеет смысл использовать его для условной логики обработки ошибки в клиенте.
  • details (опционально) — структурированные данные о причине ошибки (например, field и reason для валидационных ошибок).

HTTP-статус выводится из поля Kind ошибки:

Kind HTTP
validation 400 Bad Request
malformed 400 Bad Request
unauthorized 401 Unauthorized
forbidden 403 Forbidden
not_found 404 Not Found
conflict 409 Conflict
unavailable 503 Service Unavailable
internal 500 Internal Server Error

Общие

FORBIDDEN

Клиенту запрещён доступ к ресурсу.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Клиент аутентифицирован, но у него нет нужных прав для операции. Не выдаётся при отсутствии ресурса — для этого используется *_NOT_FOUND.

INTERNAL_ERROR

Внутренняя ошибка сервиса.

  • HTTP: 500 Internal Server Error
  • Kind: internal

Подробности

Непредвиденная ошибка на стороне сервера; клиент не должен пытаться автоматически восстановиться по этому коду — нужно повторить операцию позже или обратиться в поддержку.

MALFORMED_JSON

Некорректное тело запроса (не парсится как JSON).

  • HTTP: 400 Bad Request
  • Kind: malformed

Подробности

Тело запроса невалидное (битый JSON, неверная структура).

UNAUTHORIZED

Клиент не аутентифицирован.

  • HTTP: 401 Unauthorized
  • Kind: unauthorized

Подробности

Отсутствует или невалиден bearer-токен / сессионная кука. Клиенту нужно повторить аутентификацию.

VALIDATION_ERROR

Ошибка валидации входных данных.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Значение хотя бы одного поля запроса не соответствует требованиям. Дополнительные данные (имя поля, причина) приходят в Details.

Workspace

WORKSPACE_ALREADY_ASSOCIATED

Workspace уже связан с MPC-конфигурацией.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Попытка повторно ассоциировать workspace с конфигами после того, как ассоциация уже произведена.

WORKSPACE_ALREADY_EXISTS

Конфликт уникальности при создании workspace.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Workspace с таким же уникальным набором атрибутов уже существует.

WORKSPACE_ALREADY_FROZEN

Workspace уже заморожен.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Попытка заморозить workspace, который уже находится в замороженном состоянии.

WORKSPACE_FROZEN

Workspace заморожен, доступны только операции чтения.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Попытка выполнить изменяющую операцию в замороженном workspace. Пока workspace заморожен, разрешены только операции чтения.

WORKSPACE_NOT_FOUND

Workspace не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный workspace отсутствует в БД или недоступен текущему пользователю.

WORKSPACE_NOT_FROZEN

Workspace не заморожен.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Попытка разморозить workspace, который не находится в замороженном состоянии.

WORKSPACE_STATUS_INCOMPATIBLE

Статус workspace не позволяет операцию.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Операция требует определённого статуса workspace (например, активации нужен статус new), но текущий статус другой.

WORKSPACE_UNFREEZE_FORBIDDEN

Недостаточно прав для разморозки workspace.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Workspace был заморожен администратором платформы и может быть разморожен только администратором платформы.

Vault

VAULT_ALREADY_EXISTS

Vault с таким именем уже существует в workspace.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Имя vault должно быть уникальным в рамках workspace.

VAULT_FROZEN

Операция недопустима над замороженным vault.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Vault находится в статусе frozen — действие требует предварительной разморозки.

VAULT_NOT_FOUND

Vault не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный vault отсутствует, удалён или принадлежит другому workspace.

VAULT_UNFREEZE_BLOCKED_BY_AML

Admin не может разморозить AML-замороженный vault.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

AML-провайдер запретил админам снимать заморозку. Для разморозки нужны более широкие полномочия или изменение настроек провайдера.

Wallet

WALLET_ALREADY_EXISTS

Wallet с такой комбинацией параметров уже существует.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Попытка создать wallet/asset для существующей пары vault+currency.

WALLET_ASSET_NOT_FOUND

Asset кошелька не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный asset отсутствует или принадлежит другому workspace.

WALLET_CURRENCY_UNKNOWN

Клиент указал неизвестный currency_id.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Currency_id из запроса не зарегистрирован в системе. Поле currency_id приходит в WebError.Details.

WALLET_NETWORK_MISMATCH

Валюта не соответствует сети воркспейса.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Попытка создать кошелёк для mainnet-валюты в testnet-воркспейсе или testnet-валюты в mainnet-воркспейсе.

WALLET_NOT_FOUND

Кошелёк не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный wallet/asset отсутствует или принадлежит другому workspace.

Whitelisted Address

WHITELISTED_ADDRESS_ALREADY_EXISTS

Whitelisted address уже существует.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Указанный адрес уже добавлен в этот whitelisted-кошелёк.

WHITELISTED_ADDRESS_DUPLICATE_IN_WORKSPACE

Адрес уже добавлен в другой кошелёк этого workspace.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Указанный адрес уже зарегистрирован в рамках данного workspace. Поле address приходит в WebError.Details.

WHITELISTED_ADDRESS_NOT_FOUND

Whitelisted address не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный whitelisted-адрес отсутствует или принадлежит другому кошельку.

WHITELISTED_CURRENCY_UNKNOWN

Клиент указал неизвестный currency_id.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Currency_id из запроса не зарегистрирован в системе. Поле currency_id приходит в WebError.Details.

WHITELISTED_WALLET_ALREADY_EXISTS

Whitelisted wallet с таким именем уже существует.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Имя whitelisted-кошелька должно быть уникальным в рамках workspace.

WHITELISTED_WALLET_NOT_FOUND

Whitelisted wallet не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный whitelisted-кошелёк отсутствует или принадлежит неактивному workspace.

AML

AML_PROVIDER_ALREADY_EXISTS

AML-провайдер уже используется.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

В workspace уже подключен AML-провайдер. Необходимо сначала удалить подключенного AML-провайдера, а затем подключить нового.

AML_PROVIDER_INVALID_API_KEY

Некорректный API-ключ AML-провайдера.

  • HTTP: 400 Bad Request
  • Kind: malformed

Подробности

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

AML_PROVIDER_NOT_FOUND

AML-провайдер не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Workspace ссылается на AML-провайдера, которого нет среди зарегистрированных в системе. Клиенту следует выбрать другого провайдера из списка доступных.

AML_SCREENING_UNAVAILABLE

Сервис AML-скрининга временно недоступен.

  • HTTP: 503 Service Unavailable
  • Kind: unavailable

Подробности

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

Backup

BACKUP_NOT_FOUND

Backup не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Backup отсутствует, ещё не подготовлен или больше не доступен для запрошенной операции.

BACKUP_STATUS_INCOMPATIBLE

Статус backup не позволяет операцию.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Ожидался один статус, найден другой (например, для подтверждения нужен received).

BACKUP_WORKSPACE_INACTIVE

Workspace неактивен для backup-операции.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для активного workspace разрешено создавать/проверять backup; в неактивном статусе операция отклонена.

Co-signer

COSIGNER_PART_NOT_FOUND

Co-signer part не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный part отсутствует, уже закоммичен (его конфиг очищен) или связанный pending-intent недоступен.

COSIGNER_PART_STATUS_INVALID

Некорректный статус part для операции.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Part находится в состоянии, при котором запрошенная операция недопустима (например, попытка commit без предварительного receive).

Gas station

GAS_STATION_CANNOT_ASSIGN_SELF

Попытка активировать auto-fuel на вольте, который сам является gas station.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Gas station vault не может быть источником пополнения для самого себя — выберите другой vault.

GAS_STATION_NETWORK_MISMATCH

Валюта не соответствует сети воркспейса.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Попытка настроить gas station для mainnet-валюты в testnet-воркспейсе или testnet-валюты в mainnet-воркспейсе. Поле currency_id приходит в WebError.Details.

GAS_STATION_NOT_FOUND

Gas station или связанная конфигурация не найдены.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Для workspace/vault не назначена gas station, либо отсутствует asset-конфигурация в назначенной gas station.

Intent

INTENT_BATCH_ACQUIRE_WRONG_ENDPOINT

Batch-sign intent acquire через неверный эндпоинт.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Batch-sign intent должен acquire-ться через /pending-intent/{id}/acquire-sign, а не через /acquire.

INTENT_NOT_ACQUIRABLE

Intent нельзя acquire текущим пользователем.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Пользователь не подходит на роль acquire-er (нет прав либо intent адресован другому target).

INTENT_NOT_FOUND

Pending intent не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный pending intent отсутствует, отозван или принадлежит другому workspace.

INTENT_NOT_REJECTABLE

Sign intent нельзя отклонить.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Отклонить запрос на подпись можно, только пока подпись собирается. Приходит, если intent не типа sign, уже исполнен или отозван, его подпись уже ушла в исполнение, либо транзакция уже в терминальном статусе. Текущие статусы приходят в WebError.Details (intent_status, transaction_status).

INTENT_NOT_SIGNABLE

Intent нельзя подписать.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для операции AcquireSign intent должен быть типа sign.

INTENT_PAYLOAD_MISSING

Payload intent отсутствует или null.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Тело pending intent не содержит обязательной секции intent.

INTENT_SIGNING_UNAVAILABLE

Не удалось подписать intent.

  • HTTP: 503 Service Unavailable
  • Kind: unavailable

Подробности

Внешняя система подписи временно недоступна; операцию можно повторить.

INTENT_STATUS_INVALID

Некорректный статус intent для операции.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Операция требует определённого статуса (active/acquired); текущий статус другой и приходит в WebError.Details.

Transaction

TRANSACTION_ALREADY_EXISTS

Идемпотентный ключ уже использован.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

По этому X-Idempotency-Key транзакция уже создана. Повторный запрос не создаёт новую и не выполняет балансовую проверку заново. ID уже существующей транзакции кладётся в WebError.Details под ключом transaction_id, чтобы клиент мог её получить.

TRANSACTION_AMOUNT_TOO_SMALL

Сумма перевода меньше минимально допустимой в сети.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Сумма перевода ниже порога, который сеть согласна обработать (dust-порог). Нужно увеличить сумму перевода.

TRANSACTION_APPROVAL_ALREADY_RECORDED

Попытка изменить уже принятое решение по транзакции.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Решение этого пользователя по запросу на подтверждение уже учтено и не может быть изменено. Ранее записанное решение приходит в WebError.Details под ключом approval_status. Повтор того же самого решения ошибкой не считается и возвращает успех — ретрай после потери ответа безопасен.

TRANSACTION_APPROVAL_INVALID

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

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Пользователь не входит в список approvers, запрос на подтверждение уже завершён / отозван, либо указанная транзакция не относится к этому запросу на подтверждение.

TRANSACTION_APPROVERS_UNAVAILABLE

Ни у одного апрувера нет привязанного устройства.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Правила политики потребовали аппрувал, но у выбранных апруверов нет ни одного зарегистрированного устройства, через которое можно подтвердить транзакцию. Транзакция помечается failed. Клиенту нужно сначала зарегистрировать устройства апруверов и создать транзакцию заново.

TRANSACTION_ASSET_MISMATCH

Source и target asset не совпадают.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Для перевода между внутренними кошельками источник и приёмник должны относиться к одной и той же валюте.

TRANSACTION_BLOCKED_BY_POLICY

Транзакция заблокирована правилами политики переводов.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Правила политики не разрешают эту операцию. Причина и метаданные решения едут в WebError.Details.

TRANSACTION_BROADCAST_REJECTED

Сеть отклонила транзакцию при отправке.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Внешняя система обработки транзакций отклонила транзакцию при попытке отправить её в сеть (общий случай, без более специфичной причины).

TRANSACTION_DROPPED_BY_PLATFORM

Платформа отменила транзакцию до отправки в сеть.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Платформа приняла решение не отправлять транзакцию в сеть (например, после ручного вмешательства оператора).

TRANSACTION_EXPIRED_BEFORE_BROADCAST

Транзакция истекла до отправки в сеть.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Срок действия транзакции истёк раньше, чем её успели отправить в сеть (например, устарел использованный blockhash/nonce-контекст).

TRANSACTION_FEE_LIMIT_TOO_LOW

fee_limit не покрывает текущую комиссию сети.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Сеть подорожала между котировкой и созданием транзакции. В отличие от CodeTransactionFeeStale (устарела после подписания), тут транзакция ещё не создана — нужна свежая котировка и повтор с новым fee_limit. Также возвращается в error_code транзакции, отклонённой по этой причине позже.

TRANSACTION_FEE_RATE_TOO_LOW

Заданная ставка комиссии ниже минимума сети.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

fee_rate_sat_per_vb ниже минимальной ставки, которую сеть сейчас принимает к ретрансляции. Нужно увеличить ставку и создать перевод заново. Также возвращается в error_code транзакции, отклонённой по этой причине.

TRANSACTION_FEE_STALE

Комиссия успела устареть до отправки в сеть.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Между расчётом комиссии и отправкой транзакции сеть успела подорожать настолько, что рассчитанная комиссия больше не актуальна. Нужно пересоздать транзакцию со свежей котировкой комиссии.

TRANSACTION_INSUFFICIENT_BALANCE

На источнике недостаточно available-баланса.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Available-баланс источника меньше суммы перевода (плюс комиссия, если она списывается из того же актива). В WebError.Details кладутся available и required в атомарных единицах.

TRANSACTION_INSUFFICIENT_FEE_BALANCE

У источника не хватает базового актива на комиссию сети.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Переводится токен, а комиссия сети списывается в базовом активе сети (нативной монете), а не в самом токене. Available-баланса этого базового актива меньше комиссии. В WebError.Details кладутся available, required (в атомарных единицах базового актива) и asset (идентификатор базового актива). Если для вольта включена авто-заправка, она запускается в фоне — повтор перевода может пройти позже, когда заправка дойдёт.

TRANSACTION_INVALID_TO_ADDRESS

Адрес получателя некорректен для выбранной сети.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Адрес получателя не проходит проверку формата выбранной сети. Нужно проверить адрес и создать перевод заново.

TRANSACTION_NOT_CANCELABLE

Транзакцию уже нельзя отменить.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Отмена возможна, только пока транзакция не передана в сеть. Как только подпись собрана и транзакция ушла на рассылку, отменить её средствами платформы нельзя — исход определяет блокчейн. Также возвращается, если транзакция уже в терминальном статусе (в том числе отменена ранее). Текущий статус кладётся в WebError.Details под ключом status.

TRANSACTION_NOT_FOUND

Транзакция не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенная транзакция отсутствует или принадлежит другому workspace.

TRANSACTION_ONCHAIN_FAILED

Транзакция реально исполнилась в сети и завершилась неудачей.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Транзакция дошла до сети и была включена в блок, но её исполнение завершилось ошибкой (например, revert). Это финальный результат: в отличие от CodeTransactionProviderUnavailable, повторная попытка с теми же параметрами не поможет.

TRANSACTION_ONE_TIME_ADDRESS_DISALLOWED

В воркспейсе выключены переводы на разовый адрес.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

В настройках воркспейса снят флаг one_time_address_allowed, и ручной ввод адреса получателя недоступен: перевод можно отправить только на кошелёк воркспейса (target_wallet_id) или на адрес из whitelist (target_whitelisted_asset_id). Любой запрос с target_address отклоняется до создания транзакции. Снять запрет может владелец воркспейса.

TRANSACTION_PROVIDER_UNAVAILABLE

Внешняя система обработки транзакций временно недоступна.

  • HTTP: 503 Service Unavailable
  • Kind: unavailable

Подробности

Не удалось получить статус транзакции из-за таймаута или сбоя на стороне внешней системы обработки транзакций. Можно повторить запрос позже.

TRANSACTION_STATUS_INCOMPATIBLE

Статус транзакции не позволяет операцию.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Операция требует определённого статуса (например, разморозка нужна только для frozen). Текущий статус кладётся в WebError.Details.

TRANSACTION_TARGET_MISSING

Не задан адрес/кошелёк назначения.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

В запросе нужно указать либо target_address, либо target_wallet_id.

TRANSACTION_TOO_MANY_PENDING_TRANSFERS

С адреса уже отправляется максимум одновременных переводов.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

У адреса-источника уже есть предельное число переводов в процессе (создан, но ещё не подтверждён в сети). Нужно дождаться завершения одного из них перед созданием нового.

TRANSACTION_UNFREEZE_BLOCKED_BY_AML

Admin не может разморозить AML-замороженную транзакцию.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

AML-провайдер запретил админам снимать заморозку транзакций.

TRANSACTION_UPSTREAM_ERROR

Ошибка от внешней системы обработки транзакций.

  • HTTP: статус наследуется от Kind, который выводится из status_code в Details
  • Kind: validation | not_found | conflict | unauthorized | forbidden | unavailable | internal

Подробности

Внешняя система обработки транзакций вернула не-2xx ответ. Все полезные поля upstream-ответа (status_code, error_code, error_details, transaction_id, status, expired_at) доступны через WebError.Details. Если в upstream-ответе был error_code, именно он позволяет клиенту реагировать на конкретный сценарий.

Company

COMPANY_NOT_FOUND

Компания не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенная компания отсутствует в системе.

Webhook

WEBHOOK_LIMIT_EXCEEDED

Превышен лимит webhooks для workspace.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для workspace настроено максимально допустимое количество webhooks. Удалите неактуальные перед созданием новых.

WEBHOOK_NOT_FOUND

Webhook не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный webhook отсутствует или принадлежит другому workspace.

WEBHOOK_SIGNING_KEY_UNAVAILABLE

KMS-подписант не сконфигурирован.

  • HTTP: 503 Service Unavailable
  • Kind: unavailable

Подробности

Попытка получить публичный ключ для проверки подписи, но trust-сервис не настроен. Скорее всего ошибка конфигурации сервиса.

WEBHOOK_URL_INVALID

URL вебхука не прошёл проверку.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

URL не парсится, использует недопустимую схему или хост не резолвится в публичный IP.

User

TOTP_INVALID

Переданный TOTP-код не подошёл.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Код не совпал ни с основным TOTP, ни с backup-кодом. Неудачные попытки учитываются брутфорс-защитой (см. CodeTOTPTooManyAttempts).

TOTP_REQUIRED

Для операции требуется TOTP-код, но он не передан.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

У пользователя включена 2FA — повторить запрос с totp_code. Если доступ к TOTP утерян (сценарий забытого пароля), обратиться в поддержку.

TOTP_RESET_TOO_MANY_ATTEMPTS

Превышен лимит неверных паролей при сбросе 2FA.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

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

TOTP_TOO_MANY_ATTEMPTS

Превышен лимит неудачных попыток ввода TOTP-кода.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

По пользователю накоплено слишком много неверных попыток 2FA за окно. Проверка временно заблокирована во избежание брутфорса; повторить позже.

USER_CANNOT_PERFORM_OPERATION_ON_HIMSELF

Действие над собственной учётной записью не разрешено.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Пользователь-инициатор не может выполнить действие, где объектом является он сам. Например, изменить свою роль, удалить или заблокировать себя и тд.

USER_NOT_FOUND

Пользователь не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Пользователь не существует в системе (в обычном или платформенном тенантах)

USER_STATE_INCOMPATIBLE

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

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для выполнения операции требуется определенное состояние аккаунта пользователя. Это может быть конкретный статус, роль, факт регистрации в системе, наличие/отсутствие TOTP и тд.

Role

ROLE_ASSIGNMENT_LIMIT_REACHED

Достигнут лимит держателей роли.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

У роли задан максимум держателей в тенанте (у платформенной роли — на платформе), и он уже набран. Проверяется при приглашении, создании API-пользователя и смене роли, в том числе при исполнении одобренного согласованием изменения.

ROLE_NOT_FOUND

Роль не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Роль не существует в системе.

Permission

PERMISSION_NOT_FOUND

Пермишен не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Пермишен не существует в системе.

Tenant

TENANT_INACTIVE

Тенант не активирован.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для выполнения операции требуется, чтобы тенант был активирован

TENANT_NOT_FOUND

Тенант не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Тенант не существует в системе.

TENANT_TYPE_INACTIVE

Тип тенанта не активирован.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для выполнения операции требуется, чтобы тип тенант был активирован

TENANT_TYPE_NOT_FOUND

Тип тенанта не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Тип тенанта не существует в системе.

Session

SESSION_ALREADY_LOGGED_OUT

Сессия уже завершена.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Невозможно выйти из сессии, которая уже завершена (logout уже выполнен).

SESSION_EXPIRED

Время действия сессии истекло.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Время действия сессии истекло

SESSION_NOT_FOUND

Сессия не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Сессия не существует в системе.

TOKEN_EXPIRED

Срок действия access-токена истёк.

  • HTTP: 401 Unauthorized
  • Kind: unauthorized

Подробности

Токен подписан верно, но время его жизни вышло. Обновите токен и повторите запрос — это штатная ситуация, а не ошибка интеграции. Чтобы не получать её вовсе, обновляйте токен заранее по expires_at.

TOKEN_NEED_REFRESH

Содержимое токена устарело.

  • HTTP: 401 Unauthorized
  • Kind: unauthorized

Подробности

Токен ещё не истёк, но выдан до изменения прав пользователя или переключения рабочего пространства в сессии. Обновите токен и повторите запрос.

TOKEN_REVOKED

Токен отозван.

  • HTTP: 401 Unauthorized
  • Kind: unauthorized

Подробности

Сессия токена завершена: выход из системы, отвязка устройства, блокировка или удаление пользователя, сброс пароля или 2FA. Обновление токена не поможет — требуется новая аутентификация.

Device

DEVICE_ALREADY_EXISTS

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

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Девайс с таким же уникальным набором атрибутов уже существует.

DEVICE_INACTIVE

Устройство не активировано.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для выполнения операции требуется, чтобы устройство было активировано

DEVICE_NOT_FOUND

Устройство не найдено.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Устройство пользователя не существует в системе.

DEVICE_UNPAIR_FORBIDDEN

Отвязка устройства запрещена ролью пользователя.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Роль пользователя в тенанте помечена unpairable_device: true в roles.yml — отвязка/отзыв устройства запрещены для всех, включая самого пользователя и платформенного администратора.

API Key

API_KEY_ALREADY_REVOKED

API ключ уже был отозван.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Невозможно отозвать API ключ, который уже отозван.

API_KEY_EXPIRED

Время действия API ключа истекло.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Невозможно использовать API ключ, время действия которого истекло

API_KEY_NOT_FOUND

API ключ не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

API ключ не существует в системе.

API_KEY_RATE_LIMIT_REACHED

Превышен или достигнут лимит запросов.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Невозможно использовать API ключ, у которого достигнуто ограничение на количество запросов

Service Account

SERVICE_ACCOUNT_ALREADY_EXISTS

Конфликт уникальности при создании сервис аккаунта.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Сервис аккаунт с таким же уникальным набором атрибутов уже существует.

SERVICE_ACCOUNT_INACTIVE

Сервисный аккаунт не активирован.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Для выполнения операции требуется, чтобы сервисный аккаунт был активирован

SERVICE_ACCOUNT_NOT_FOUND

Сервисный аккаунт не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Сервисный аккаунт не существует в системе.

Policy

POLICY_NOT_FOUND

Политика не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Политика не существует в воркспейсе.

POLICY_VERSION_NOT_FOUND

Версия политика не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Версия политики не существует в воркспейсе.

TRANSFER_POLICY_INVALID

Активная политика переводов настроена некорректно.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Сработавшее правило активной политики переводов невозможно применить к транзакции: в правиле нет действующих подписантов, набор апруверов пуст или после исключения инициатора и неактивных участников меньше требуемого порога, либо настройки подписантов противоречат друг другу. Транзакция помечается failed. Повторять её бессмысленно, пока администратор не исправит политику. Конкретная причина приходит в сообщении ошибки. В отличие от TRANSACTION_APPROVERS_UNAVAILABLE, проблема здесь в самой политике, а не в отсутствии устройств у корректно заданных апруверов.

Change Approval

CHANGE_REQUEST_ALREADY_FINALIZED

Запрос уже закрыт.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

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

CHANGE_REQUEST_CANCEL_NOT_ALLOWED

Отменить запрос может только инициатор.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Запрос на одобрение отменяет только тот, кто его создал. Подтверждающие закрывают чужой запрос голосом против, а не отменой.

CHANGE_REQUEST_NOT_FOUND

Запрос на одобрение не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запроса с таким идентификатором в этом тенанте нет: он никогда не создавался, создан в другом тенанте или уже удалён.

CHANGE_VOTE_CONFLICT

Голос противоречит уже поданному.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

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

CHANGE_VOTE_DEVICE_REQUIRED

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

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

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

CHANGE_VOTE_NOT_ALLOWED

Голосовать по этому запросу нельзя.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Голосующий не входит в состав подтверждающих по этому запросу.

Devicelogs

DEVICE_LOG_BUNDLE_INVALID

Архив логов не прошёл проверку.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Содержимое не является gzip-архивом, либо его контрольная сумма не совпадает с переданной.

DEVICE_LOG_BUNDLE_NOT_FOUND

Архив логов недоступен.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Логи по заявке ещё не выгружены или уже удалены по истечении срока хранения.

DEVICE_LOG_BUNDLE_TOO_LARGE

Архив логов превышает допустимый размер.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Размер архива до кодирования в base64 больше лимита, выданного в подтверждении заявки.

DEVICE_LOG_REQUEST_ALREADY_OPEN

У устройства уже есть открытая заявка.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Одновременно допускается одна заявка в статусе requested или approved. Отмените текущую заявку, прежде чем заводить новую.

DEVICE_LOG_REQUEST_NOT_FOUND

Заявка на логи не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

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

DEVICE_LOG_REQUEST_STATUS_INVALID

Статус заявки не допускает операцию.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Например, выгрузка логов возможна только по подтверждённой заявке, а подтверждение — только по заявке, ожидающей решения.

Group

GROUP_MEMBERS_LIMIT_REACHED

Достигнут лимит числа членов группы.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

User_groups.max_members_per_group (roles.yml, дефолт 100, 0 = без лимита). Проверка на уровне приложения при добавлении членов.

GROUP_NAME_TAKEN

Имя группы занято.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

В тенанте уже существует группа с таким именем.

GROUP_NOT_FOUND

Группа не найдена.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Группа пользователей не существует в системе.

ROLE_FORBIDDEN_FOR_GROUP

Роль пользователя запрещает членство в группах.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Роль пользователя в тенанте группы входит в список user_groups.membership_forbidden_roles (roles.yml), по умолчанию VIEWER. Проверка выполняется только в момент добавления: смена роли уже состоящего в группе пользователя членство не пересматривает.

USER_ALREADY_IN_GROUP

Пользователь уже состоит в группе.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Повторное добавление пользователя в группу.

USER_NOT_IN_GROUP

Пользователь не состоит в группе.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Попытка удалить из группы пользователя, который в ней не состоит.

Quorum

CHANGE_APPROVAL_PAYLOAD_INVALID

Описание согласованного изменения непригодно к применению.

  • HTTP: 400 Bad Request
  • Kind: malformed

Подробности

Согласованное изменение не удалось применить, потому что его описание повреждено или неполно. Приходит не ответом на запрос, а причиной отказа в карточке согласования: изменение отклонено окончательно, нужно создать запрос заново.

CHANGE_APPROVAL_UNAVAILABLE

Сервис согласования изменений недоступен.

  • HTTP: 503 Service Unavailable
  • Kind: unavailable

Подробности

Проверить, требует ли изменение согласования участниками воркспейса, сейчас невозможно. Изменение не применено; запрос стоит повторить позже.

GROUP_REFERENCED_BY_QUORUM_SETTINGS

Группа используется в настройках кворума.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Группу нельзя удалить, пока на неё ссылается настройка кворума какого-либо действия. Сначала переключите или отключите соответствующие настройки.

QUORUM_ACTION_UNKNOWN

Неизвестное гейтуемое действие.

  • HTTP: 400 Bad Request
  • Kind: validation

Подробности

Ключ действия отсутствует в реестре гейтуемых действий, деактивирован или не применим к типу данного тенанта.

QUORUM_APPROVAL_REQUIRED

Действие требует подтверждения кворумом.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

Изменение не применено, потому что по настройкам тенанта оно требует одобрения (владельца, кворума администраторов или заданной группы). Зарегистрирован запрос на одобрение; в Details приходят approval_request_uuid (идентификатор запроса), action (ключ действия), operation (операция внутри действия, если у действия их несколько — например, приглашение, удаление или смена роли пользователя), mode (режим одобрения, те же значения, что в настройках кворума: QUORUM_APPROVAL_MODE_OWNER_ONLY, QUORUM_APPROVAL_MODE_ADMIN_QUORUM или QUORUM_APPROVAL_MODE_SPECIFIC_GROUP) и expires_at (срок действия запроса, RFC 3339 UTC). После сбора одобрений изменение применяется автоматически — повторять запрос не нужно; статус можно отслеживать по идентификатору запроса.

QUORUM_CHANGE_REQUESTS_DISABLED

Изменения настроек кворумов через запросы выключены.

  • HTTP: 403 Forbidden
  • Kind: forbidden

Подробности

У вызывающего есть право только предлагать изменения настроек кворумов (PROPOSE_QUORUM_SETTINGS), а согласование изменений самих настроек кворумов выключено: в этом режиме настройки меняет только владелец, и изменение не принято. Предложить изменение можно, когда владелец включит согласование изменений настроек.

QUORUM_GROUP_MANAGEMENT_APPROVAL_DISABLED

Согласование управления группами выключено.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Правило согласования в режиме QUORUM_APPROVAL_MODE_SPECIFIC_GROUP (действие подтверждают участники группы) можно включить или перевести на группу, только пока в тенанте включено согласование действия «Управление группами»: иначе состав подтверждающей группы менялся бы без согласования. Изменение не принято; сначала включите согласование управления группами.

QUORUM_GROUP_MANAGEMENT_APPROVAL_IN_USE

Согласование управления группами нужно включённым правилам.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Согласование действия «Управление группами» нельзя выключить, пока в тенанте включено хотя бы одно другое правило в режиме QUORUM_APPROVAL_MODE_SPECIFIC_GROUP: подтверждающие группы этих правил остались бы без защиты. Ключи таких правил приходят в details полем action_keys. Изменение не принято; сначала выключите эти правила или переведите их в другой режим.

QUORUM_GROUP_NOT_IN_TENANT

Группа апруверов не принадлежит тенанту.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Группа, указанная в настройке кворума, не существует или принадлежит другому тенанту.

QUORUM_NO_ELIGIBLE_APPROVERS

Некому подтвердить запрос.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

По текущим настройкам кворума действенных апруверов не хватает: владелец отсутствует или неактивен, админов меньше порога, либо группа апруверов не добирает порог. Возвращается гейтом при регистрации запроса и при сохранении настроек: включённое правило с недостижимым составом (PUT …/quorum/actions/{action_key}) или порог кворума админов выше числа действенных админов при включённом правиле в режиме QUORUM_APPROVAL_MODE_ADMIN_QUORUM (PUT …/quorum/threshold). Инициатор остаётся в составе апруверов и подтверждает изменение с привязанного устройства.

Rule

POLICY_RULE_INVALID_SIGNER_CONFIG

Противоречивая настройка подписантов в правиле политики.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

В правиле одновременно включён режим «подписывает инициатор» и заданы другие подписанты или группы. Правило нужно исправить.

POLICY_RULE_NO_ELIGIBLE_APPROVERS

В правиле политики недостаточно действующих апруверов.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Набор апруверов сработавшего правила пуст (например, указана пустая группа), либо после исключения инициатора или неактивных участников апруверов меньше требуемого порога. Транзакции по этому правилу невозможны, пока правило не исправят.

POLICY_RULE_NO_ELIGIBLE_INITIATORS

В правиле политики нет ни одного действующего инициатора.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

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

POLICY_RULE_NO_ELIGIBLE_SIGNERS

В правиле политики нет ни одного действующего подписанта.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Сработавшее правило активной политики не содержит ни одного действующего подписанта (например, в подписантах указана пустая группа). Транзакции по этому правилу невозможны, пока правило не исправят.

Tags

TAG_ALREADY_EXISTS

Tag с таким label уже существует.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Label уникален в пределах workspace, и в нём уже есть tag с таким label. Возвращается при создании и при переименовании tag.

TAG_ATTACHED_TO_VAULT

Tag привязан к vault

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Невозможно выполнить операцию (обычно удаление) тк tag привязан к vault. Сначала необходимо отвязать tag от vault

TAG_IS_USED_IN_POLICY_RULE

Tag используется в правилах политик

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

Невозможно выполнить операцию (обычно удаление), тк tag используется в одном или нескольких правилах политик

TAG_NOT_FOUND

Tag не найден.

  • HTTP: 404 Not Found
  • Kind: not_found

Подробности

Запрошенный tag отсутствует, удалён или принадлежит другому workspace.

TAG_OPERATIONS_NOT_APPLICABLE

Одобренную привязку или отвязку тегов применить нельзя.

  • HTTP: 409 Conflict
  • Kind: conflict

Подробности

В ответах API не встречается. Так закрывается одобренный запрос на привязку или отвязку тегов, если к моменту одобрения ни одна его операция уже не выполнима: vault заморожен или не найден, превышен лимит тегов на vault, tag удалён или уже отвязан. Причина отказа видна в карточке запроса на одобрение; чтобы повторить изменение, его нужно отправить заново.