Перейти к содержимому
FidmosДокументация

Коды ошибок

У ошибок Fidmos три разные формы — они зависят от того, какой эндпоинт ответил. Эта страница показывает каждую форму и её коды.

  • Встройка (/api/v1/embed/*) — конверт { "error": "<код>" }, HTTP 422 (или 401 для invalid_client).
  • Токен (POST /oauth/token) — стандарт OAuth 2.0 (RFC 6749): { "error": "...", "error_description": "..." }.
  • UserInfo и Server-to-Server API — форма Laravel: { "message": "...", "errors": { … } } либо 401/403 для проблем с токеном.

Это дёргает виджет входа (sdk.js), не вы — ошибки показывает окно. Конверт { "error": "<код>" }.

Код HTTP Причина
invalid_client 401 неизвестный или неактивный client_id
invalid_redirect_uri 422 redirect_uri не в списке разрешённых
invalid_origin 422 источник страницы не разрешён для клиента

Их вызывает виджет входа (шаги под /api/v1/embed/: login, login/send, telegram, siwe/*, identity/create, complete) — вам, партнёру, дёргать их не нужно. Общие для любого шага окна — ошибки проверки потока:

Код Причина
flow_expired поток не найден или истёк
parent_origin_mismatch запрос пришёл с чужого источника

Отправка кода (/login/send):

Код Причина
code_send_limit исчерпан лимит отправок кода
flow_too_short у потока мало времени жизни — новый код не выдаётся
invalid_flow_state поток не на том шаге

Проверка кода (/login):

Код Причина
invalid_code код неверен
code_expired срок кода истёк
code_attempts_exhausted исчерпаны попытки
identity_taken привязка занята другим пользователем

Telegram (/telegram) — поток входа через Telegram:

Код Причина
telegram_invalid данные Telegram не прошли проверку подписи

Кошелёк — SIWE (/siwe/verify) — поток входа кошельком:

Код Причина
nonce_mismatch nonce в сообщении не совпал с выданным

Плюс коды проверки самого SIWE-сообщения и подписи — их полный список на странице входа кошельком.

Создание пользователя (/identity/create) — для входа через Telegram и кошелёк:

Код Причина
no_pending_identity нет отложенного способа входа для создания пользователя
identity_taken привязываемый способ занят другим пользователем

Завершение (/complete):

Код HTTP Причина
invalid_completion 409 завершение потока не удалось
authorization_failed 422 окно не смогло выпустить код авторизации

Стандартные ошибки OAuth 2.0 в форме { "error": "...", "error_description": "..." }:

error Причина
invalid_grant код неверен, истёк, уже использован, либо не совпал code_verifier
invalid_client неверные учётные данные клиента
invalid_request не хватает обязательного параметра
unsupported_grant_type неподдерживаемый grant_type

GET /oauth/userinfo и /api/v1/* отвечают в форме Laravel:

  • 401 — токен отсутствует, истёк или отозван.
  • 403 — только Server-to-Server /api/v1/*: токену клиента не хватает скоупа users.read. /oauth/userinfo по скоупу не отказывает — он вернёт sub и те claims, что разрешает скоуп токена.
  • 422 с { "message": "...", "errors": { "поле": ["…"] } } — не прошла валидация.
  1. Посмотрите на форму ответа — по ней понятно, какой эндпоинт ответил.
  2. Возьмите машиночитаемый код (error) — по нему ветвите логику, а не по тексту.
  3. Текст (error_description / message) — для логов и людей, не для условий в коде.
Симптом Причина Что делать
invalid_redirect_uri, либо ошибка redirect_uri при /oauth/authorize//oauth/token redirect_uri не совпал с зарегистрированным — сверка точная Зарегистрируйте точный URL в приложении (кабинет → Приложения): схема, хост, путь, завершающий слэш; в запросе шлите его без изменений
invalid_origin или parent_origin_mismatch Страница с виджетом открыта не с разрешённого домена Разрешённый origin выводится из redirect_uris приложения — добавьте нужный домен в redirect_uris (кабинет → Приложения) и открывайте окно с него
Ошибка CORS на /api/v1/embed/* в браузере Запрос ушёл с домена, которого нет среди origin приложения Добавьте домен окна в redirect_uris приложения (кабинет → Приложения) — origin берётся оттуда, и для него сервер вернёт нужные CORS-заголовки
invalid_client Неверные client_id / client_secret Проверьте пару; client_secret — не публичный client_id, и живёт только на бэкенде
invalid_grant при обмене кода Код истёк или уже использован, не тот redirect_uri, либо code_verifier не соответствует code_challenge (рассинхрон PKCE) Меняйте код тем же code_verifier, что пришёл в onSuccess; код одноразовый; redirect_uri — тот же, что был передан в login
В профиле нет email или email_verified: false Пользователь без почты (вход кошельком/Telegram) или почта не подтверждена Опознавайте по sub, не по почте; не требуйте её наличия и не доверяйте email_verified: false