Skip to content

Войти по номеру телефона и OTP

Request

Авторизует пользователя по номеру телефона и OTP-коду.

Дополнительно клиент обязан передать type_account - ожидаемый тип аккаунта. Допустимые значения: CLIENT, MASTER, SALON. Если type_account = SALON, клиент обязан передать role_in_salon. Допустимые значения: OWNER, MASTER, ADMIN. Если role_in_salon = MASTER или ADMIN, клиент обязан передать invite_token.

Необязательное поле referral_code обрабатывается только при создании нового аккаунта. Его могут использовать клиент (CLIENT), индивидуальный мастер (MASTER) и владелец салона (SALON с role_in_salon = OWNER). Для мастера и администратора салона (SALON с role_in_salon = MASTER или ADMIN) реферальный код игнорируется. Если рефовод с указанным ID не существует, аккаунт создаётся без рефовода.

При входе в уже существующий аккаунт referral_code игнорируется. Если аккаунт был удалён и затем создан повторно с тем же телефоном, сохраняется первоначальный рефовод и прежний статус реферала: новый код не может заменить историческую привязку и повторная награда не начисляется.

В успешном ответе возвращает пару токенов:

  • JWT - access token
  • RT - refresh token Отдельный business_invite_token разрешён только CLIENT и несовместим с непустыми referral_code и invite_token. Некорректный или недоступный MASTER:id / SALON:id даёт invalid_body на этапе валидации. Для валидного идентификатора отказ бизнес-программы (например, ALREADY_BOUND_TO_OTHER_BUSINESS) не блокирует вход и сохраняется в списке бизнеса; персональная рефералка и купоны автоматически не запускаются.
Bodyapplication/jsonrequired
phonestring, <= 32 charactersrequired
Example:"+79991234567"
otpstring, = 6 characters^\d{6}$required

Одноразовый код подтверждения

Example:"123456"
type_accountstring(AuthTypeAccount)required

Тип аккаунта, в который выполняется вход.

Enum:"CLIENT""MASTER""SALON"
Example:"CLIENT"
role_in_salonstring or null(SalonMemberRole)

Роль внутри салона. Обязательна при type_account = SALON.

Enum:"OWNER""MASTER""ADMIN"
Example:"MASTER"
invite_tokenstring or null

Токен приглашения. Обязателен при type_account = SALON и role_in_salon = MASTER или ADMIN.

Example:"eyJpbnZpdGUiOiIxMjMifQ"
referral_codestring or null^\d+$

Необязательный ID рефовода. Применяется только при создании аккаунта CLIENT, MASTER или владельца салона (SALON + OWNER). При входе в существующий аккаунт, а также для мастера или администратора салона поле игнорируется. Несуществующий код не мешает регистрации. Повторная регистрация с тем же телефоном восстанавливает первоначальную привязку независимо от переданного нового кода.

Example:"42"
business_invite_tokenstring or null, <= 2048 characters

Идентификатор бизнеса из ссылки профиля: MASTER:456 (user ID мастера) или SALON:123 (ID салона). Проверяются формат, существование и доступность бизнеса. Старые context_token не принимаются. 70 дней отсчитываются от регистрации с приглашением, повторный вход срок не продлевает. Только CLIENT. Нельзя одновременно передавать непустой referral_code или staff invite_token: это invalid_body до проверки OTP. Пустое/null значение не включает бизнес-приглашение. Новый клиент получает атрибуцию пригласившего бизнеса; существующий клиент проходит обычный вход, а результат попытки сохраняется отдельно. Отказ из-за активной или прошлой чужой привязки не меняет токены входа и не переносит прежнюю привязку.

curl -i -X POST \
  https://felmee.com/api/auth/phone/login \
  -H 'Content-Type: application/json' \
  -d '{
    "phone": "+79991234567",
    "otp": "123456",
    "type_account": "CLIENT",
    "role_in_salon": null,
    "invite_token": null,
    "referral_code": "42"
  }'

Responses

Авторизация выполнена успешно

Bodyapplication/json
codeErrorstring or nullrequired

Устаревший camelCase-alias поля error_code; при ошибке оба поля содержат одинаковое значение.

successbooleanrequired

Флаг успешного выполнения запроса

messagestringrequired

Человекочитаемое описание результата

error_codestring or null(ERROR_CODE)required

Код ошибки. Для успешных ответов всегда null.

Enum:"invalid_body""unauthorized""not_found""conflict""object_modified_by_another_thread""action_too_late""too_many_request""code_is_gone""forbidden""user_blocked"
dataobject or null(TokenPair)required

Полезная нагрузка. Может быть объектом, массивом или null.

Response
{ "success": true, "message": "The authorization process has been completed successfully!", "error_code": null, "data": { "JWT": "<access_token>", "RT": "<refresh_token>" } }