Files
2026-06-14 03:09:44 +03:00

3.6 KiB
Raw Permalink Blame History

Control-plane API

Аутентификация

POST /api/auth/register

{
  "username": "john",
  "email": "john@example.com",
  "password": "Secret123"
}
Поле Описание
username 330 символов
email Валидный email
password От 8 символов, заглавная + строчная + цифра

201{ "token": "...", "refresh_token": "...", "user": { "id": "...", "username": "...", "email": "...", "created_at": "..." } } 400 — ошибка валидации 409 — email уже занят

POST /api/auth/login

{ "email": "john@example.com", "password": "Secret123" }

200{ "token": "...", "refresh_token": "...", "user": { ... } } 401 — неверный email или пароль 429 — превышен лимит (10 попыток/мин с IP)

POST /api/auth/refresh

Обновить токены. Старый refresh_token удаляется, выдаётся новая пара.

{ "refresh_token": "..." }

200{ "token": "...", "refresh_token": "...", "user": { ... } } 401 — токен невалиден или умер

POST /api/auth/logout

Удалить refresh_token из БД.

{ "refresh_token": "..." }

200{ "message": "logged out successfully" }


Защищённые (требуют Bearer-токен)

Заголовок: Authorization: Bearer <access_token>

GET /api/auth/me

Профиль текущего пользователя.

200{ "user": { "id": "...", "username": "...", "email": "...", "created_at": "..." } }

PUT /api/auth/me

Обновить username.

{ "username": "john_updated" }

200{ "user": { "id": "...", "username": "john_updated", ... } }

PUT /api/auth/password

Сменить пароль. Старый пароль обязателен для подтверждения.

{ "old_password": "Secret123", "new_password": "NewSecret456!" }

200{ "message": "password changed successfully" } 400 — неверный старый пароль, слабый новый или совпадают


Организации (все Bearer)

POST /api/organizations

{ "name": "My Corp", "slug": "my-corp" }

201{ "organization": { "id": "...", "name": "My Corp", "slug": "my-corp", "created_at": "...", "updated_at": "..." } } 409 — slug уже занят

GET /api/organizations

200{ "organizations": [...], "total": 1 }

GET /api/organizations/:id

200{ "organization": { ... } } 404 — не найдена

PUT /api/organizations/:id

{ "name": "Updated Corp" }

200{ "organization": { ... } }

DELETE /api/organizations/:id

200{ "message": "organization deleted" }


Формат JWT

{
  "user_id": "uuid",
  "email": "john@example.com",
  "sub": "uuid",
  "exp": 1718000000,
  "iat": 1717913600
}
  • user_id / sub — UUID пользователя
  • exp — timestamp истечения (24ч)
  • iat — timestamp выпуска

Ошибки

{ "error": "описание" }
Статус Описание
400 Ошибка валидации
401 Неверные данные, токен протух или невалиден
404 Пользователь или организация не найдены
409 Email или slug уже заняты
429 Превышен лимит попыток логина
500 Внутренняя ошибка