Регистрация
Регистрация проходит в два шага: клиент отправляет данные, API присылает SMS-код на номер, клиент подтверждает код и сразу получает токены. Новый аккаунт получает роль «Пользователь» — доступ только к собственному аккаунту.
-
Данные.
POST /v1/auth/registerсохраняет имя, фамилию, телефон и пароль и отправляет SMS-код. В ответе —challengeId. -
Код. Пользователь вводит 6 цифр из SMS. Если код не пришёл, запросите новый через
POST /v1/auth/resend-code, когда истечётresendIn. -
Подтверждение.
POST /v1/auth/verify-phoneсchallengeIdи кодом активирует аккаунт и возвращает токены — пользователь уже вошёл.
Шаг 1. Данные пользователя
Заголовок раздела «Шаг 1. Данные пользователя»| Поле | Тип | Обязательное | Ограничения |
|---|---|---|---|
firstName |
string | да | 1–100 символов, пробелы по краям обрезаются |
lastName |
string | да | 1–100 символов, пробелы по краям обрезаются |
phone |
string | да | номер Узбекистана в любом привычном виде, см. Телефоны |
password |
string | да | 8–128 символов |
passwordConfirmation |
string | да | должно совпадать с password |
curl -X POST https://api.rekassa.uz/v1/auth/register \ -H 'Content-Type: application/json' \ -H 'Accept-Language: ru' \ -d '{ "firstName": "Азиз", "lastName": "Каримов", "phone": "+998 90 123 45 67", "password": "correct-horse-42", "passwordConfirmation": "correct-horse-42" }'const response = await fetch('https://api.rekassa.uz/v1/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept-Language': 'ru' }, body: JSON.stringify({ firstName: 'Азиз', lastName: 'Каримов', phone: '+998 90 123 45 67', password: 'correct-horse-42', passwordConfirmation: 'correct-horse-42', }),})const { challengeId, expiresIn, resendIn } = await response.json()Ответ 200:
{ "challengeId": "5b0d7f3e-91c2-4a6b-8e14-2f7c9d0a3b56", "expiresIn": 300, "resendIn": 60}| Поле | Описание |
|---|---|
challengeId |
идентификатор отправленного кода, нужен на шаге 3 |
expiresIn |
через сколько секунд код истечёт |
resendIn |
через сколько секунд можно запросить новый код |
SMS приходит на языке из Accept-Language, например:
«reKassa: код подтверждения регистрации 482913. Никому не сообщайте его.»
| Статус | Код | Когда |
|---|---|---|
400 |
validation_failed |
поле не заполнено, неверный телефон, пароль короче 8 символов, пароли не совпадают (details.errors[].message = password_mismatch) |
409 |
phone_taken |
номер уже зарегистрирован |
429 |
code_resend_too_soon |
предыдущий код на этот номер отправлен меньше 60 секунд назад |
429 |
too_many_requests |
5 кодов за час на номер или 10 запросов в минуту с IP |
429 |
code_attempts_exceeded |
недавно код на этот номер ввели неверно 5 раз |
Шаг 2. Повторная отправка кода
Заголовок раздела «Шаг 2. Повторная отправка кода»Отправляет новый код для того же сценария, к которому относится challengeId. Метод общий для
регистрации, входа по SMS и восстановления пароля.
curl -X POST https://api.rekassa.uz/v1/auth/resend-code \ -H 'Content-Type: application/json' \ -d '{"challengeId": "5b0d7f3e-91c2-4a6b-8e14-2f7c9d0a3b56"}'{ "challengeId": "a8e2c4f1-3d6b-4e70-9b25-7c1f0e8d2a94", "expiresIn": 300, "resendIn": 60}Отправлять новый код можно не чаще раза в 60 секунд и не больше 5 раз в час — см. Лимиты.
Шаг 3. Подтверждение телефона
Заголовок раздела «Шаг 3. Подтверждение телефона»| Поле | Тип | Описание |
|---|---|---|
challengeId |
string (UUID) | из ответа шага 1 или 2 |
code |
string | ровно 6 цифр из SMS |
curl -X POST https://api.rekassa.uz/v1/auth/verify-phone \ -H 'Content-Type: application/json' \ -d '{"challengeId": "a8e2c4f1-3d6b-4e70-9b25-7c1f0e8d2a94", "code": "482913"}'{ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "accessTokenExpiresIn": 900, "refreshToken": "3f1c2d9e-6b7a-4c55-9a51-0d8e7f6a1b2c.kq3Vb8...", "refreshTokenExpiresAt": "2026-10-24T09:15:00.000Z"}const response = await fetch('https://api.rekassa.uz/v1/auth/verify-phone', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json', 'X-Client': 'web' }, body: JSON.stringify({ challengeId, code: '482913' }),})// Refresh-токен — в куке rk_refresh.const { accessToken, accessTokenExpiresIn } = await response.json()После подтверждения аккаунт активен, пользователю назначена роль «Пользователь», создана сессия. Как обращаться с токенами — в разделе Аутентификация.
| Статус | Код | Когда |
|---|---|---|
400 |
validation_failed |
challengeId не UUID или код не из 6 цифр |
401 |
invalid_code |
код неверный, истёк или уже использован |
429 |
code_attempts_exceeded |
код введён неверно 5 раз; запросите новый через 15 минут |