Skip to main content

API токены

  • Все запросы идут только через API токены
  • Токены живут вечно, отозвать можно в любой момент

Сервисные пользователи

  • Все запросы идут через сервисных пользователей
  • Сервисный пользователь - это такой же сотрудник школы с настроенными вами правами
  • Чтобы создать API ключ - необходимо создать сотрудника (сервисного пользователя), указать права и скопировать его API token

Создание сервисного пользователя

  1. Создайте сотрудника - В панели администратора школы создайте нового сотрудника с нужными правами доступа.
  2. Настройте права - Укажите необходимые права для сервисного пользователя в зависимости от задач интеграции.
  3. Получите API токен - Скопируйте API токен созданного сервисного пользователя для использования в запросах.

Использование API токена

Для аутентификации используйте заголовок Authorization с префиксом Bearer и API токеном сервисного пользователя.

Безопасность хранение токенов

  • Никогда не храните API токены в коде приложения
  • Используйте переменные окружения
  • Не коммитьте токены в репозиторий

Управление сервисными пользователями

  • Создавайте отдельных сервисных пользователей для разных задач
  • Регулярно проверяйте права доступа
  • Отзывайте токены при необходимости

Обработка ошибок

  • Всегда проверяйте статус ответа
  • Логируйте ошибки аутентификации
  • Реализуйте retry логику для временных ошибок
⚠️ Важно: API токен предоставляет доступ к данным школы. Храните его в безопасном месте и не передавайте третьим лицам.
Для получения дополнительной помощи по настройке аутентификации обратитесь в нашу техническую поддержку.

Структура запроса

Любой запрос к API в рамках данной документации необходимо выполнять с передачей обязательных заголовков для точной идентификации пользователя и авторизации.

Заголовки запроса

Authorization
string
required
API токен сервисного пользователя в формате Bearer. Получите токен в панели администратора школы. Формат: Bearer YOUR_TOKEN.
Seller-Id
string
required
Уникальный идентификатор продавца в системе. Используется для разграничения доступа между разными продавцами.
School-Id
string
required
Уникальный идентификатор школы в системе. Определяет контекст выполнения операции.
Все заголовки обязательны. Отсутствие любого из них приведет к ошибке 401 Unauthorized.
curl --location 'https://api.exode.biz/saas/v2/user/create' \
--header 'Seller-Id: {{ sellerId }}' \
--header 'School-Id: {{ schoolId }}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{ token }}' \
--data-raw '{
  "email": "[email protected]",
  "phone": "+1234567890",
  "tgId": 123456789,
  "profile": {
    "firstName": "Firstname",
    "lastName": "Lastname"
  }
}'

Примеры ответов

{
    "success": true,
    "code": 201,
    "payload": {
        "id": 1,
        "activated": true,
        "tgId": null,
        "email": "[email protected]",
        "phone": null,
        "createdAt": "2025-01-01T10:30:00Z",
        "status": "active",
        "profile": {
            "firstName": "Firstname",
            "lastName": "Lastname"
        },
    }
}

Структура ответа

Успешный ответ
success
boolean
required
Статус операции. Всегда true для успешных запросов.
code
integer
required
HTTP код ответа. 201 для успешного создания пользователя.
payload
object
required
Например: Данные созданного пользователя.
Ошибка
success
boolean
required
Статус операции. Всегда false для ошибок.
code
integer
required
HTTP код ошибки. Например: 400, 401, 403, 404.
cause
string
required
Код причины ошибки. Например: EmailIsBusy, Unauthorized, Forbidden.
message
string
required
Человекочитаемое сообщение об ошибке.
error
string
required
Техническое описание ошибки для разработчиков.

Обработка ошибок

try {
    const response = await axios.post(url, data, { headers });
    console.log('Успех:', response.data);
} catch (error) {
    if (error.response?.status === 401) {
        console.error('Ошибка аутентификации - проверьте токен');
    } else if (error.response?.status === 400) {
        console.error('Ошибка валидации:', error.response.data.error.details);
    } else {
        console.error('Неизвестная ошибка:', error.message);
    }
}
Всегда обрабатывайте ошибки в своем коде. Это поможет быстро диагностировать проблемы и улучшить пользовательский опыт