Appearance
Регистрация — все responses бэкенда
POST /auth/register
Обязательные поля запроса:
json
{
"email": "user@example.com",
"password": "SecurePass123!",
"display_name": "Иван Петров"
}Успех — 201 Created
json
{
"data": {
"id": 10,
"email": "user@example.com",
"display_name": "Иван Петров",
"phone": null,
"account_type": "personal",
"email_verified": false,
"avatar_url": null,
"city_id": null,
"district_id": null,
"metro_station_id": null,
"rating": 0.0,
"reviews_count": 0,
"products_count": 0,
"is_active": true,
"is_admin": false,
"created_at": "2026-02-16T12:00:00+00:00"
}
}Ошибки
Все ошибки возвращаются в формате:
json
{
"error": {
"code": "<error_code>",
"message": "<message>",
"details": { ... }
}
}CSRF — 422
Формат: { "error": { "code": "validation_error", "message": "Validation failed", "details": { "csrf": ["..."] } } }
| Backend message | Когда | Текст для фронта (RU) |
|---|---|---|
CSRF token is required | Нет CSRF-токена в cookie или заголовке | Ошибка безопасности. Перезагрузите страницу и попробуйте снова |
CSRF token mismatch | Токен в cookie не совпадает с X-CSRF-TOKEN | Ошибка безопасности. Перезагрузите страницу и попробуйте снова |
Invalid CSRF token | Невалидная подпись токена | Ошибка безопасности. Перезагрузите страницу и попробуйте снова |
Content-Type — 400
json
{ "error": { "code": "unsupported_media_type", "message": "Content-Type must be application/json or multipart/form-data" } }| Backend message | Текст для фронта (RU) |
|---|---|
Content-Type must be application/json or multipart/form-data | Произошла техническая ошибка. Попробуйте ещё раз |
Rate limit — 429
json
{ "error": { "code": "rate_limit_exceeded", "message": "Too many requests" } }Заголовки ответа: Retry-After: <seconds>, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
| Backend message | Текст для фронта (RU) |
|---|---|
Too many requests | Слишком много попыток. Подождите немного и попробуйте снова |
Дубликат email — 409
json
{ "error": { "code": "conflict", "message": "Email already registered" } }| Backend message | Текст для фронта (RU) |
|---|---|
Email already registered | Пользователь с таким email уже зарегистрирован |
Валидация полей — 422
Формат: { "error": { "code": "validation_error", "message": "Validation failed", "details": { "<field>": ["<msg1>", "<msg2>"] } } }
Несколько ошибок могут прийти одновременно — по разным полям и несколько на одно поле.
body
| Backend message | Когда | Текст для фронта (RU) |
|---|---|---|
Request body must be valid JSON | Тело запроса не JSON | Произошла техническая ошибка. Попробуйте ещё раз |
email
| Backend message | Когда | Текст для фронта (RU) |
|---|---|---|
Field "email" is required and must be a non-empty string | Отсутствует / пустой | Введите email |
Field "email" must be a valid email address | Невалидный формат | Введите корректный email |
password
| Backend message | Когда | Текст для фронта (RU) |
|---|---|---|
Field "password" is required and must be a non-empty string | Отсутствует / пустой | Введите пароль |
Password must be at least 8 characters | Менее 8 символов | Пароль должен содержать минимум 8 символов |
Password must not exceed 128 characters | Более 128 символов | Пароль не должен превышать 128 символов |
Password must contain at least 1 uppercase letter | Нет заглавной буквы | Пароль должен содержать хотя бы одну заглавную букву |
Password must contain at least 1 lowercase letter | Нет строчной буквы | Пароль должен содержать хотя бы одну строчную букву |
Password must contain at least 1 digit | Нет цифры | Пароль должен содержать хотя бы одну цифру |
Password must contain at least 1 special character | Нет спецсимвола | Пароль должен содержать хотя бы один спецсимвол (!@#$%^&* и т.д.) |
Password must not contain 3 or more repeated characters | aaa, 111 и т.п. | Пароль не должен содержать три и более одинаковых символа подряд |
Password must not contain 3 or more sequential characters | abc, 123, xyz | Пароль не должен содержать три и более последовательных символа (abc, 123) |
Password is too common | Из списка популярных паролей | Этот пароль слишком простой. Придумайте другой |
Password must not contain the email local part | Пароль содержит часть email до @ | Пароль не должен содержать часть вашего email |
display_name
| Backend message | Когда | Текст для фронта (RU) |
|---|---|---|
Field "display_name" is required and must be a non-empty string | Отсутствует / пустой | Введите отображаемое имя |
Серверная ошибка — 500
json
{ "error": { "code": "internal_error", "message": "Internal server error" } }| Backend message | Текст для фронта (RU) |
|---|---|
Internal server error | Произошла ошибка на сервере. Попробуйте позже |
Пример множественных ошибок
Пароль ab при пустом display_name вернёт:
json
{
"error": {
"code": "validation_error",
"message": "Validation failed",
"details": {
"password": [
"Password must be at least 8 characters",
"Password must contain at least 1 uppercase letter",
"Password must contain at least 1 digit",
"Password must contain at least 1 special character"
],
"display_name": [
"Field \"display_name\" is required and must be a non-empty string"
]
}
}
}Маппинг error code → действие фронта
error.code | HTTP | Действие фронта |
|---|---|---|
validation_error | 422 | Показать ошибки под соответствующими полями из details |
conflict | 409 | Показать ошибку под полем email |
rate_limit_exceeded | 429 | Показать toast/уведомление, заблокировать кнопку на Retry-After секунд |
unsupported_media_type | 400 | Показать общую ошибку (техническая, не пользовательская) |
internal_error | 500 | Показать общую ошибку |