Перейти к основному содержимому

Статусы и обработка ошибок

Статусы проверки​

У каждой сессии есть статус. Он меняется по ходу проверки:

СтатусЧто значитЧто делать
sentПроверка инициирована, ждём действия пользователяОпрашивать статус
deliveredКод/звонок доставлены пользователюОпрашивать статус
verifiedНомер подтверждёнПропустить пользователя дальше
expiredИстёк срок сессии (expires_at)Предложить начать заново
failedПодтвердить не удалосьПредложить другой метод или повтор

verified, expired и failed — финальные статусы: после них опрашивать сессию больше не нужно.

Коды ответов HTTP​

КодКогда
201Проверка создана
200Успешный запрос статуса, баланса, проверки кода
400Некорректный запрос: формат номера, неверный код, неизвестный метод
401Неверные api_key / api_secret
402Проверку нельзя начать: нет средств, нет свободного канала, нет тарифа
403Метод закрыт для вашего аккаунта
404Сессия с таким request_id не найдена
409Сессия уже завершена — подтверждена, истекла или отклонена
422Канал не может доставить на этот номер
502 / 503Отказ или недоступность поставщика на нашей стороне

Тело ошибки​

Все ошибки приходят в формате Problem Details, одинаковым телом на любом эндпоинте:

{
"type": "https://httpstatuses.io/400",
"title": "Bad Request",
"status": 400,
"detail": "Unsupported verification method.",
"instance": "POST /v1/verify",
"error_code": "validation_error",
"trace_id": "00-695d0ed5dddfb4f56c13602834697387-5ff95907ea42cb09-00"
}

Ветвитесь по error_code, а не по detail и не по status. detail — текст для человека, он меняется; один и тот же код ответа покрывает разные причины. trace_id приложите к обращению в поддержку — по нему мы находим запрос в логах.

Отдельных полей у ошибки может быть больше: на неверном коде приходит attempts_remaining — сколько попыток осталось до того, как сессия будет отклонена.

Коды ошибок​

error_codeHTTPЧто произошлоЧто делать
validation_error400Запрос не прошёл проверку: формат номера, отсутствующее поле, неизвестный методИсправить запрос; метод с опечаткой или неподключённый на платформе попадает сюда же
region_not_supported400Номер не российскийСейчас поддерживаются только +7
invalid_code400Пользователь ввёл неверный кодПоказать «Неверный код», учесть attempts_remaining
invalid_credentials401Неверные api_key / api_secretПроверить учётные данные
insufficient_balance402На балансе не хватает средств на это подтверждениеПополнить баланс
no_gateway_available402Нет свободного канала доставки прямо сейчасПовторить через несколько секунд или переключиться на другой метод
pricing_unavailable402Для метода нет действующего тарифаОбратиться в поддержку — это не ваша ошибка
method_not_available403Метод закрыт для вашего аккаунтаЗапросить подключение
not_found404Сессии с таким request_id нетПроверить идентификатор
not_pending409Сессия уже завершена: подтверждена, истекла или отклоненаСоздать новую проверку
delivery_unavailable422Канал не может доставить на этот номерПереключиться на другой метод — каскадом
provider_error502Поставщик отказалПовторить или переключить метод
lookup_unavailable503Сервис проверки номера недоступенПовторить позже

Коды стабильны: мы можем добавить новый, но не переименовываем существующие. Неизвестный код обрабатывайте как общую ошибку своего класса status, а не падайте на нём.

Рекомендации​

  • Тайм-аут. Если сессия дошла до expired, не пытайтесь её «дожать» — создайте новую.
  • Идемпотентность на вашей стороне. Храните request_id и не создавайте новую проверку, пока активна текущая.
  • Понятные сообщения. На 400 при вводе кода покажите «Неверный код» и дайте запросить новый.
  • Мониторинг баланса. Ловите 402 и заранее предупреждайте о низком балансе — см. Баланс и статистика.