saas/v2/.
Базовый URL
https://api.exode.biz/saas/v2/<module>/<method> — например https://api.exode.biz/saas/v2/user/create.
Аутентификация
Запросы выполняются от имени сервисного пользователя (API-клиента) — это сотрудник школы с настроенным набором прав и собственным API-токеном.- Аутентификация — через заголовок
Authorization: Bearer <TOKEN>. - Токен бессрочный, его можно отозвать в любой момент.
- Токен должен принадлежать пользователю с признаком API-клиента — иначе SaaS-эндпоинты вернут ошибку доступа, даже если остальные права на месте.
Создание сервисного пользователя
Напишите в поддержку — мы создадим сервисного пользователя с нужными правами и выдадим API-токен.
Обязательные заголовки
Заголовки запроса
API токен сервисного пользователя в формате Bearer. Получите токен в панели администратора школы. Формат:
Bearer YOUR_TOKEN.Уникальный идентификатор продавца в системе. Используется для разграничения доступа между разными продавцами.
Уникальный идентификатор школы в системе. Определяет контекст выполнения операции.
Формат ответа
Любой успешный ответ обёрнут в единую структуру:true для успешных ответов (HTTP-коды 200–206).HTTP-код ответа (
200, 201, и т.д.).Полезная нагрузка метода. Структура описана на странице конкретного метода и строго соответствует
схеме ответа (лишние поля не возвращаются).
Успешный ответ
Формат ошибок
Ошибки возвращаются с тем же конвертом плюс полямиcause, message, error и опциональным data:
Всегда
false для ошибок.HTTP-код ошибки:
400, 401, 403, 404, 429, 500.Машиночитаемый код причины. По нему удобно строить обработку. Примеры:
validation, Unauthorized,
Forbidden, EmailIsBusy, Rate.Человекочитаемое сообщение об ошибке.
Техническое описание (по умолчанию совпадает с
message).Дополнительные данные (например,
retryAfter для 429). Опционально.Пример ошибки
Частые коды причин (cause)
| HTTP | cause | Когда возникает |
|---|---|---|
| 400 | validation | Тело/параметры не прошли валидацию (тип, длина, формат, enum) |
| 401 | Unauthorized | Отсутствует/невалиден токен (Invalid token credentials) |
| 401 | Blocked | Пользователь токена неактивен или забанен |
| 401 | Forbidden | Нет доступа к ресурсу продавца/школы (недостаточно прав или ресурс не принадлежит школе) |
| 403 | Forbidden | Недостаточно прав (RBAC): Доступ к ресурсу ограничен |
| 429 | Rate | Превышен лимит запросов (см. ниже) |
Права доступа (RBAC)
Каждый метод требует у токена определённых прав. Если у метода указано несколько прав — достаточно любого одного из них (семантика OR). Примеры прав, используемых в SaaS API:| Право | Назначение |
|---|---|
SchoolManageUsers | Управление пользователями школы (создание, обновление, удаление, группы, доступы) |
SchoolManageSettings | Настройки школы, в т.ч. вебхуки |
CourseCurator | Кураторская работа: проверка практик, прогресс студентов |
CourseStudentManage | Управление студентами курса (зачисление, отчисление) |
SellerSales | Доступ к продажам: счета, платежи, финансовые отчёты |
FormManage | Управление формами, макетами и значениями полей |
Rate-limit
Часть методов ограничена по частоте вызовов. При превышении возвращается HTTP429 с cause: "Rate":
Превышение лимита
- Лимит считается по сервисному пользователю (токену).
- Поле
data.retryAfterподсказывает, когда можно повторить запрос. - Лимиты указаны на страницах методов. Например, генерация выгрузок — 100 запросов в час.
Реализуйте retry с учётом
retryAfter и экспоненциальной задержкой для временных ошибок (429, 5xx).Пагинация
Списочные методы (.../list/raw, прогресс по курсу и т.п.) принимают параметры пагинации в query:
Размер страницы. От
1 до 1000. По умолчанию 100.Номер страницы (начиная с
1). Альтернатива skip.Смещение (число пропускаемых записей). Игнорируется, если задан
page.Структура страницы
Параметры-массивы передаются повторением ключа:
userIds=1&userIds=2&userIds=3. Диапазоны передаются
как вложенные поля, например createdAtDateRange[from] и createdAtDateRange[to].