Тема
Авторизация
Платформа использует две схемы авторизации:
| Схема | Заголовок | Для чего |
|---|---|---|
| JWT пользователя | Authorization: Bearer YOUR_JWT | Действия от имени сотрудника компании: управление API-ключами и вебхуками |
| API-ключ компании | x-api-token: YOUR_API_KEY | Все интеграционные эндпоинты /api/v1/integrations/* |
Интеграция вашей системы работает на API-ключе. JWT нужен администратору компании, чтобы выпустить ключ и настроить вебхуки.
JWT пользователя
Вход
POST /api/v1/auth/login
Content-Type: application/json| Поле | Тип | Обязательное | Ограничения |
|---|---|---|---|
email | string | да | email; приводится к нижнему регистру, пробелы обрезаются |
password | string | да | не короче 8 символов |
bash
curl -X POST "https://api.test.inlog.ai/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{"email": "admin@example.com", "password": "YOUR_PASSWORD"}'js
const res = await fetch('https://api.test.inlog.ai/api/v1/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: 'admin@example.com', password: 'YOUR_PASSWORD' }),
})
const { accessToken, refreshToken } = await res.json()Ответ 200:
json
{
"accessToken": "YOUR_JWT",
"refreshToken": "YOUR_REFRESH_JWT"
}| Токен | Срок жизни | Использование |
|---|---|---|
accessToken | 1 час | Authorization: Bearer <accessToken> |
refreshToken | 10 дней | Получение новой пары токенов |
Ошибки входа: 404 USER_NOT_FOUND — пользователь не найден; 406 PASSWORD_NOT_CORRECT — неверный пароль; 400 — ошибка валидации.
Обновление токенов
POST /api/v1/auth/refresh
Content-Type: application/json| Поле | Тип | Обязательное |
|---|---|---|
refreshToken | string | да |
Ответ — новая пара { accessToken, refreshToken }. Ошибки: 400 UNAUTHORIZED — токен недействителен или истёк; 400 USER_NOT_FOUND — пользователь не найден.
bash
curl -X POST "https://api.test.inlog.ai/api/v1/auth/refresh" \
-H "Content-Type: application/json" \
-d '{"refreshToken": "YOUR_REFRESH_JWT"}'Ошибки JWT
| HTTP | message | Когда |
|---|---|---|
401 | TOKEN_NOT_VALID | Нет заголовка Authorization: Bearer ... или токен пустой |
401 | UNAUTHORIZED | Токен недействителен или истёк |
403 | ONLY_FOR_ADMIN | Действие доступно только администратору компании |
403 | FORBIDDEN | Действие доступно только логистической компании (управление вебхуками) |
API-ключ компании
Передавайте ключ в заголовке x-api-token:
http
GET /api/v1/integrations/logistic-company/countries HTTP/1.1
Host: api.test.inlog.ai
x-api-token: YOUR_API_KEYЕсли заголовка x-api-token нет, API принимает ключ и в заголовке Authorization: Bearer YOUR_API_KEY. Рекомендуем x-api-token, чтобы не путать ключ с JWT.
- Ключ привязан к компании: запросы выполняются от её имени.
- Срок действия у ключа не задан. Удалите ключ, если он больше не нужен или скомпрометирован.
- Храните ключ только на сервере.
Ошибки API-ключа
| HTTP | message | Когда |
|---|---|---|
403 | TOKEN_NOT_VALID | Нет ни x-api-token, ни Authorization: Bearer ..., или ключ пустой |
401 | UNAUTHORIZED | Ключ не найден |
Управление API-ключами
Эндпоинты управления ключами требуют JWT пользователя с ролью администратора компании.
Создать ключ
POST /api/v1/logistic-company/api-key/create
Authorization: Bearer YOUR_JWT
Content-Type: application/json| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
title | string | да | Название ключа, например «ERP integration». Не пустое |
Ответ 200:
json
{
"id": 7,
"title": "ERP integration",
"key": "YOUR_API_KEY",
"companyId": 12,
"createdAt": "2026-09-29T08:00:00.000Z",
"updatedAt": "2026-09-29T08:00:00.000Z"
}Значение ключа — поле key. Сохраните его в хранилище секретов.
Список ключей
GET /api/v1/logistic-company/api-key/list?page=1&pageSize=20
Authorization: Bearer YOUR_JWT| Параметр | Тип | Ограничения | По умолчанию |
|---|---|---|---|
page | integer | ≥ 1 | 1 |
pageSize | integer | ≥ 1 | 1 |
Размер страницы по умолчанию — 1
Без pageSize список вернёт только один ключ. Передавайте pageSize явно.
Ответ: { "total": number, "data": [ApiKey] } — ключи вашей компании, включая значения key.
Удалить ключ
DELETE /api/v1/logistic-company/api-key/{id}
Authorization: Bearer YOUR_JWTОтвет 200: { "message": "api key deleted" }. Ошибки: 404 NOT_FOUND — ключ не найден; 406 NOT_ACCEPTABLE — ключ принадлежит другой компании.
bash
curl -X DELETE "https://api.test.inlog.ai/api/v1/logistic-company/api-key/7" \
-H "Authorization: Bearer YOUR_JWT"js
await fetch('https://api.test.inlog.ai/api/v1/logistic-company/api-key/7', {
method: 'DELETE',
headers: { Authorization: `Bearer ${accessToken}` },
})Ротация ключа
- Создайте новый ключ.
- Переключите вашу систему на новый ключ.
- Удалите старый ключ.