Коды ошибок
Код ошибки приходит в поле error.code — это стабильный машиночитаемый идентификатор. Поле
error.message содержит текст на языке из Accept-Language; ниже приведены русские тексты.
Формат ошибки — в разделе Формат данных.
Коды и тексты в таблице берутся из кода бэкенда при сборке документации.
| Код | HTTP | Сообщение (ru) | Когда возникает |
|---|---|---|---|
validation_failed | 400 | Проверьте правильность заполнения полей | Тело, query или параметр пути не прошли проверку. Поля с ошибками — в details.errors. |
unauthorized | 401 | Требуется вход в систему | Нет access-токена, он истёк или недействителен, сессия завершена или пользователь заблокирован. |
forbidden | 403 | Недостаточно прав для этого действия | Нет нужного доступа. Какого — в details.permission. |
not_found | 404 | Не найдено | Несуществующий путь; POST /v1/orgs с clientId несуществующего клиента. |
conflict | 409 | Действие конфликтует с текущим состоянием | POST /v1/orgs/{id}/branches, PATCH /v1/orgs/{id}/branches/{branchId}: филиал с таким названием в организации уже есть. |
too_many_requests | 429 | Слишком много запросов. Повторите позже | Превышен лимит запросов к /v1/auth/* с одного IP или 5 SMS-кодов в час на номер. См. Retry-After. |
internal_error | 500 | Внутренняя ошибка. Мы уже разбираемся | Непредвиденная ошибка сервера. |
invalid_credentials | 401 | Неверный номер телефона или пароль | POST /v1/auth/login: неверный номер или пароль, либо вход по паролю не включён. |
invalid_code | 401 | Неверный или просроченный код | /v1/auth/verify-phone, /v1/auth/login/sms, /v1/auth/password/reset: код неверный, истёк или уже использован. |
code_attempts_exceeded | 429 | Слишком много неверных попыток. Запросите новый код через 15 минут | Код введён неверно 5 раз. Новые коды на номер не отправляются 15 минут, Retry-After: 900. |
code_resend_too_soon | 429 | Новый код можно запросить через {seconds} с | Новый код запрошен раньше чем через 60 секунд после предыдущего. Секунды — в details.retryAfter и Retry-After. |
session_expired | 401 | Сессия истекла, войдите снова | POST /v1/auth/refresh: refresh-токен отсутствует, истёк, уже использован или сессия завершена. |
user_blocked | 403 | Учётная запись заблокирована | /v1/auth/login, /v1/auth/login/sms, /v1/auth/password/reset: учётная запись заблокирована. |
phone_taken | 409 | Этот номер телефона уже зарегистрирован | POST /v1/auth/register, POST /v1/portal/users: номер уже зарегистрирован. |
password_mismatch | 400 | Пароли не совпадают | Не отдельный код ответа: приходит как details.errors[].message у validation_failed, когда passwordConfirmation не совпадает с password. |
current_password_invalid | 422 | Текущий пароль указан неверно | PUT /v1/me/password: текущий пароль не передан или неверен. |
password_required | 422 | Сначала задайте пароль | PATCH /v1/me, POST /v1/portal/users, PATCH /v1/portal/users/{id}: способ входа password без заданного пароля. |
invalid_phone | — | Неверный номер телефона | Зарезервирован, сейчас не возвращается: неверный телефон даёт validation_failed с details.errors. |
user_not_found | 404 | Пользователь не найден | Методы /v1/portal/users/{id}. |
role_not_found | 404 | Роль не найдена | POST /v1/portal/users/{id}/role-assignments, POST и PATCH /v1/orgs/{id}/members: роли с таким roleId нет. |
role_assignment_not_found | 404 | Назначение роли не найдено | DELETE /v1/portal/users/{id}/role-assignments/{assignmentId}. |
role_already_assigned | 409 | У пользователя уже есть эта роль | POST /v1/portal/users/{id}/role-assignments: роль уже назначена. |
role_scope_mismatch | 422 | Эту роль нельзя назначить здесь: роли сотрудников reKassa — только на платформе, роли клиента — только в его организациях | Портал: роль клиента нельзя назначить на уровне платформы. Сотрудники организации: роль не клиентская или принадлежит другому клиенту. |
insufficient_rank | 403 | Нельзя управлять ролью или пользователем уровнем выше или равным вашему | Портал и сотрудники организации: пользователь или роль того же или более высокого ранга, чем ваш. |
permission_not_held | 403 | Нельзя выдать доступы, которых нет у вас самих | Портал и сотрудники организации: у роли или пользователя есть доступы, которых нет у вас. Список — в details.missing. |
cannot_change_own_status | 422 | Нельзя заблокировать самого себя | POST /v1/portal/users/{id}/block и /unblock для самого себя. |
session_not_found | 404 | Сессия не найдена | DELETE /v1/me/sessions/{id}: сессии нет или она чужая. |
organization_not_found | 404 | Организация не найдена | Методы /v1/orgs/{id}/... и POST /v1/portal/orgs/{id}/verification: организации нет. |
branch_not_found | 404 | Филиал не найден | PATCH /v1/orgs/{id}/branches/{branchId}, branchId у сотрудника: в организации нет такого филиала. |
tin_taken | 409 | Организация с таким ИНН уже зарегистрирована. Запросите доступ у её владельца | POST /v1/orgs: организация с таким ИНН уже зарегистрирована. |
requisites_incomplete | 422 | Заполните реквизиты перед отправкой на проверку | POST /v1/orgs/{id}/verify: не заполнены реквизиты для проверки. Список полей — в details.missing. |
verification_state_invalid | 422 | Действие недоступно при текущем статусе проверки | PATCH /v1/orgs/{id} на проверке; POST /v1/orgs/{id}/verify не из not_started или needs_action; решение по организации не в pending. |
member_not_found | 404 | Сотрудник не найден в этой организации | PATCH, DELETE /v1/orgs/{id}/members/{userId} и PUT .../pin: пользователь не сотрудник организации. |
member_exists | 409 | Этот пользователь уже сотрудник организации | POST /v1/orgs/{id}/members: пользователь уже сотрудник организации. |
cannot_manage_self | 422 | Нельзя менять собственную роль | PATCH и DELETE /v1/orgs/{id}/members/{userId} для самого себя. |
pin_taken | 409 | Этот PIN уже занят другим сотрудником организации | PUT /v1/orgs/{id}/members/{userId}/pin: такой PIN уже у другого сотрудника организации. |
didox_not_configured | 503 | Интеграция с Didox не настроена | Автозаполнение и договоры, если на сервере не заданы доступы Didox. |
didox_unavailable | 502 | Didox временно недоступен. Повторите позже | Didox не ответил или отказал во входе: автозаполнение, отправка договора, обновление статуса, удаление черновика. |
didox_rejected | 502 | Didox отклонил запрос: {reason} | Didox отклонил запрос; его текст — в details.reason (например, «Оферта не подписана»). Также PDF больше 10 МБ. |
company_not_found | 404 | Организация с таким ИНН не найдена | GET /v1/orgs/lookup/{tin}: Didox не знает такой ИНН/ПИНФЛ. |
contract_not_found | 404 | Договор не найден | /v1/portal/contracts/{id}/...: договора нет. |
contract_state_invalid | 422 | Действие недоступно при текущем статусе договора | Отправка не из generated; обновление статуса не из draft или signed_by_us; удаление подписанного нами договора. |
contract_in_progress | 409 | У организации уже есть договор на подписании или заключённый договор | POST /v1/portal/orgs/{id}/contracts: у организации уже есть договор на подписании или заключённый. |
Сообщение code_resend_too_soon содержит подстановку: вместо {seconds} приходит число секунд,
например «Новый код можно запросить через 37 с».