Справочник кодов ошибок
Каждая ошибка 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 удалён или уже отвязан. Причина отказа видна в карточке запроса на одобрение; чтобы повторить изменение, его нужно отправить заново.