Быстрый старт
Пять минут от нуля до первого ответа. Понадобится право на настройки школы и терминал.
Шаг 1. Ключ #
Настройки школы → API → создать ключ.
- Название — по интеграции, а не «тест»: через полгода это единственное, по чему ключ опознают.
- Права — для начала только чтение. Права на запись добавите, когда они понадобятся, а не «на всякий случай».
- Значение показывается один раз. Скопируйте сразу; в базе хранится только хеш, и второго показа не будет.
На том же экране — адрес API вашей установки и готовый пример запроса с вашим доменом и вашим ключом: его можно проверить копированием в терминал, ничего не подставляя руками.
Шаг 2. Первый запрос #
Список курсов — самый безопасный первый запрос: только чтение, есть в любой школе.
curl -X GET 'https://school.example.com/api/v1/courses' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
Ответ — список в конверте:
{
"data": [
{
"id": "crs_01HQZX41B7RC9S",
"title": "Основы фотографии",
"created_at": "2026-08-01T10:15:00+03:00"
}
],
"has_more": false,
"next_cursor": null
}
Три вещи, на которые стоит посмотреть в первом же ответе:
idначинается сcrs_— идентификаторы типизированы. Ошибка «передал не тот id» видна по префиксу мгновенно, а не через три часа отладки.has_moreиnext_cursor— так устроены все списки. Пагинация курсором, не смещением: почему.- Дата с таймзоной. Всегда.
И заголовки ответа:
X-Request-Id: req_01HQZXA7M3PK9E
X-RateLimit-Remaining: 599
X-Request-Id логируйте у себя с первого дня — по нему разбирается любой спорный
случай. Лимиты — здесь.
Шаг 3. Один объект #
curl -X GET 'https://school.example.com/api/v1/courses/crs_01HQZX41B7RC9S' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
Объект отдаётся напрямую, без обёртки. 404 может значить и «нет такого»,
и «вне видимости вашего ключа» — это намеренно неразличимо, см.
Ошибки.
Шаг 4. События вместо опроса #
Не опрашивайте «не появилось ли чего» по расписанию — подпишитесь:
curl -X POST 'https://school.example.com/api/v1/webhooks' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json' \
--data '{
"url": "https://my-integration.example.com/hooks/lms",
"events": ["lesson.completed", "submission.created"],
"secret": "whsec_16d8f4a2c9b7e3510d6a8f2c4b9e7d13"
}'
Дальше события приходят сами, с подписью и повторами. Как проверять подпись и почему обработчик обязан быть идемпотентным — Вебхуки.
Шаг 5. Куда дальше #
- Что-то не работает — Ошибки первого дня: там собраны все грабли первых суток, от лишнего пробела в ключе до незакодированного плюса в дате.
- Формат целиком — Формат.
- Что вообще есть в API — Состав среза.