Формат ответов
Все ответы API обёрнуты в единый конверт. Это упрощает обработку успеха и ошибок на клиенте.
Конверт ответа
Каждый ответ — JSON-объект с булевым полем success. При успехе полезная нагрузка лежит в data, при ошибке — код в error.
Успех
{
"success": true,
"data": { "id": "8f3b1c2a-...", "title": "Введение в Python" }
}Ошибка
{
"success": false,
"error": "course_not_found"
}| Поле | Тип | Когда присутствует |
|---|---|---|
success | boolean | Всегда |
data | object | array | При успехе |
error | string | При ошибке — машиночитаемый код |
message | string | Иногда — необязательное пояснение |
Поля
data, error и message необязательные — они опускаются, когда не нужны. Ориентируйтесь на success и HTTP-статус.HTTP-статусы
| Статус | Значение |
|---|---|
200 OK | Успешный GET / PATCH / PUT / DELETE |
201 Created | Успешный POST, создавший ресурс |
400 Bad Request | Ошибка валидации или некорректное тело/параметры |
401 Unauthorized | Токен отсутствует, истёк или недействителен |
403 Forbidden | Недостаточно прав или приостановлен биллинг |
404 Not Found | Ресурс не найден (в т.ч. из-за изоляции школ) |
409 Conflict | Нарушение бизнес-правила (см. эндпоинт) |
423 Locked | Временная блокировка (защита входа от перебора) |
500 Internal Server Error | Непредвиденная ошибка сервера |
Заголовки
- Тело запроса и ответа —
application/json; charset=utf-8(кроме экспорта CSV —text/csv). Authorization: Bearer <token>— для защищённых эндпоинтов.X-Tenant-Subdomain: <субдомен>— для эндпоинтов школы/api/v1/t/*.
Полный перечень кодов ошибок — в разделе Ошибки.