Аутентификация
Обзор
Bronjoy использует Laravel Sanctum для аутентификации API. Все защищённые эндпоинты требуют Bearer-токен в заголовке Authorization.
Authorization: Bearer your-token-here
Каждому примеру с
/api/org/...в этой документации также нужен заголовокX-Organization-ID, описанный ниже, — для краткости он опущен в отдельных фрагментах.
Типы пользователей
В Bronjoy есть два разных типа пользователей с отдельными сценариями аутентификации:
| Тип | Кто это | Префикс маршрута авторизации |
|---|---|---|
| Staff | Владельцы организации и сотрудники | /api/org/auth/... |
| Client | Конечные клиенты, которые записываются | /api/client/auth/... |
Аутентификация сотрудников
Регистрация
POST /api/org/auth/register
Content-Type: application/json
{
"name": "Jane Smith",
"email": "[email protected]",
"password": "secret"
}
На указанную почту отправляется код подтверждения. Подтвердите его:
POST /api/org/auth/verify
Content-Type: application/json
{
"email": "[email protected]",
"code": "123456"
}
В ответе приходит Bearer-токен:
{
"token": "1|abc123...",
"user": { "id": 1, "name": "Jane Smith", "email": "[email protected]" }
}
Вход
POST /api/org/auth/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "secret"
}
Выход
POST /api/auth/logout
Authorization: Bearer your-token-here
Это отзывает текущий токен.
Аутентификация клиентов
Клиенты авторизуются по одноразовому коду (OTP) на телефон или email — без паролей.
Телефон (OTP)
POST /api/client/auth/phone/request
Content-Type: application/json
{ "phone": "+998901234567" }
POST /api/client/auth/phone/verify
Content-Type: application/json
{
"phone": "+998901234567",
"code": "1234"
}
Email (OTP)
POST /api/client/auth/email/request
Content-Type: application/json
{ "email": "[email protected]" }
POST /api/client/auth/email/verify
Content-Type: application/json
{
"email": "[email protected]",
"code": "123456"
}
Оба сценария возвращают в ответе поле token.
Контекст организации
Большинству эндпоинтов /api/org/... нужен контекст организации, так как аккаунт сотрудника может принадлежать сразу нескольким организациям. Передавайте ID организации в заголовке каждого запроса:
X-Organization-ID: 1
Запросы к /api/org/... без этого заголовка возвращают 400 Bad Request. Запросы к организации, к которой у вас нет доступа, возвращают 403 Forbidden.
Персональные токены API
Вы можете выпускать именованные токены API с ограниченными правами для программного доступа — это удобно для скриптов, интеграций и MCP-клиентов.
Создание токена
POST /api/org/ai/tokens
Authorization: Bearer your-staff-token
Content-Type: application/json
{
"name": "My Integration",
"expires_in_days": 90
}
Ответ:
{
"token": "3|AbCdEf...",
"mcp_endpoint": "https://api.bronjoy.com/api/mcp/organization/1",
"expires_at": "2026-06-23T12:00:00Z",
"instructions": "Use this token in the Authorization header: Bearer <token>"
}
Токены показываются только один раз. Храните их надёжно — получить их повторно нельзя.
Созданный токен привязан к конкретной организации через право mcp:organization:{id} и по умолчанию истекает через 90 дней (максимум — 365 дней).
Получение текущего пользователя
GET /api/auth/me
Authorization: Bearer your-token-here
Возвращает профиль авторизованного пользователя.