Документация LMS версия 0.1.0

Документация/API/Быстрый старт

Раздел описывает первый рабочий срез API. Срез в разработке: маршрутов ещё нет, экран ключей появится вместе с ним — до выкатки проверить запросы не обо что.

Быстрый старт

Пять минут от нуля до первого ответа. Понадобится право на настройки школы и терминал.

Шаг 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 — Состав среза.

Эта страница в Markdown