Finance OS / API

Login

POST /api/mobile/login
Public

Выпустить токен по email + password

Принимает учётные данные пользователя, возвращает Sanctum-токен. Если включён 2FA — первый запрос вернёт 422 с флагом requires_2fa, повторите с two_factor_code.

Request body

Name Type Required Description
email string required Email пользователя.
password string required Пароль.
two_factor_code string optional 6-значный TOTP-код. Передавайте, если в ответе первого запроса пришёл requires_2fa: true.
recovery_code string optional Одноразовый recovery-код (10 символов). Альтернатива TOTP при утере телефона.
device_name string optional Имя устройства. Отображается в /api/mobile/sessions.
remember boolean optional Если true — токен живёт 365 дней. Иначе 30 дней.
Default: false

Response

Responses

{
  "data": {
    "user": {
      "id": "usr_5f8d7a3c-1234-4567-89ab-cdef01234567",
      "email": "you@example.com",
      "name": "Иван Петров",
      "kyc_status": "approved",
      "two_factor_enabled": true
    },
    "token": "1|aBcDeFgHiJkLmNoPqRsTuVwXyZ123456789",
    "token_type": "Bearer",
    "expires_at": "2026-06-26T14:23:00Z"
  }
}
{
  "message": "Two-factor authentication required.",
  "error_code": "TWO_FACTOR_REQUIRED",
  "requires_2fa": true
}
{
  "message": "These credentials do not match our records.",
  "errors": {
    "email": ["These credentials do not match our records."]
  },
  "error_code": "INVALID_CREDENTIALS"
}
{
  "message": "Account is frozen due to compliance review.",
  "error_code": "ACCOUNT_FROZEN",
  "support_email": "admin@fin-os.io"
}

Возможные ошибки

Name Type Required Description
INVALID_CREDENTIALS 401 optional Неверный email или пароль. Не указывайте в UI, какое именно поле ошибочно — защита от перебора.
TWO_FACTOR_REQUIRED 422 optional Аккаунт защищён 2FA. Запросите код у пользователя и повторите.
ACCOUNT_FROZEN 423 optional Compliance-hold. Связь — admin@fin-os.io.
EMAIL_NOT_VERIFIED 403 optional Требуется верификация email перед логином (опционально, включается админом).
Refresh-токенов нет
Sanctum использует «long-lived» bearer tokens. Если вам нужна стратегия обновления — храните дату из expires_at и за неделю до истечения попросите пользователя залогиниться повторно.