Помощь · Интеграции

Документация API

Публичные маршруты Latorn для учётных записей, обучения и преподавательских инструментов. Каждый раздел можно читать отдельно.

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

Справочник API

Курсы, уроки и шаги

Создание структуры курса, копирование материалов, режимы доступа к урокам и загрузка медиафайлов.

Маршруты раздела

Метод Маршрут Доступ Назначение
GET /api/courses Зависит от фильтра Получить доступные курсы или рабочий список преподавателя.
POST /api/courses Преподаватель Создать черновик курса.
GET /api/courses/[id] По доступу к курсу Получить курс по идентификатору или адресу.
PUT /api/courses/[id] Редактирование курса Изменить настройки или опубликовать курс.
DELETE /api/courses/[id] Владелец курса Переместить курс в удалённые.
POST /api/courses/[id]/duplicate Управление курсом Создать независимую копию курса.
PATCH /api/instructor/courses/[id]/content/reorder Редактирование курса Атомарно применить полный порядок модулей, уроков или шагов.
GET /api/sections?courseId=[id] Чтение курса Получить модули курса.
POST /api/sections Редактирование курса Создать модуль.
GET /api/sections/[id] Чтение курса Получить один модуль.
PUT /api/sections/[id] Редактирование курса Изменить или переместить модуль.
DELETE /api/sections/[id] Редактирование курса Удалить модуль.
GET /api/lessons?sectionId=[id] Чтение курса Получить уроки модуля.
POST /api/lessons Редактирование курса Создать урок.
GET /api/lessons/[id] Чтение курса Получить урок.
PUT /api/lessons/[id] Редактирование курса Изменить урок и срок выполнения.
DELETE /api/lessons/[id] Редактирование курса Удалить урок.
POST /api/lessons/[id]/duplicate Редактирование курса Скопировать урок в выбранный модуль.
GET /api/steps?lessonId=[id] Редактирование курса Получить шаги урока для редактора.
POST /api/steps Редактирование курса Создать шаг.
GET /api/steps/[id] Редактирование курса Получить шаг для редактора.
PUT /api/steps/[id] Редактирование курса Изменить шаг или его положение.
DELETE /api/steps/[id] Редактирование курса Удалить шаг.
POST /api/uploads/course-cover Преподаватель Загрузить обложку курса.
POST /api/uploads/lesson-media Преподаватель Загрузить изображение, аудио или WebM для урока.

Иерархия материалов

Курс состоит из модулей, модуль — из уроков, урок — из шагов:

Курс → Модуль → Урок → Шаг

При создании и изменении поддерживаются как прямой JSON, так и именованная оболочка: { "course": { ... } }, { "lesson": { ... } } и аналогичные варианты.

Как менять порядок без конфликтов

Не отправляйте серию PUT /api/lessons/[id] или PUT /api/steps/[id] с разными position: промежуточные позиции могут конфликтовать. Для сортировки используйте один атомарный запрос PATCH /api/instructor/courses/[id]/content/reorder с полным снимком порядка.

Шаги одного урока:

{ "kind": "STEPS", "lessonId": "lesson-id", "orderedStepIds": ["step-2", "step-1"] }

Все уроки курса, включая перенос между модулями:

{
  "kind": "LESSONS",
  "sections": [
    { "sectionId": "section-1", "orderedLessonIds": ["lesson-2"] },
    { "sectionId": "section-2", "orderedLessonIds": ["lesson-1"] }
  ]
}

Модули курса передают и исходный, и новый полный порядок:

{
  "kind": "SECTIONS",
  "expectedSectionIds": ["section-1", "section-2"],
  "orderedSectionIds": ["section-2", "section-1"]
}

Нужен scope CONTENT_WRITE; для PAT курс также должен оставаться в courseIds, а у владельца — актуальное право content:write. Неполный или устаревший снимок возвращает 409 без частичной записи.

Создание курса

Минимальный запрос:

{
  "title": "Основы Python",
  "description": "Практический курс для начинающих",
  "price": 0
}

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

Режимы доступа к уроку

Поле accessMode принимает:

  • PUBLIC — урок открывается без регистрации;
  • REGISTERED — нужен аккаунт, но покупка не требуется;
  • PAID — нужен доступ к курсу.

Поле isDemo оставлено для совместимости. В новых интеграциях записывайте accessMode.

Типы шагов

Поддерживаются TEXT, VIDEO, CODE, CHOICE, NUMBER, FREE_TEXT, SORTING, MATCHING и REVIEW. В штатном редакторе тип выбирается при создании. Низкоуровневый PUT /api/steps/[id] также принимает новый type, но вместе с ним обязательно нужно передать новый совместимый block.

Пример числовой задачи:

{
  "lessonId": "lesson-id",
  "type": "NUMBER",
  "block": {
    "text": "Сколько будет 6 × 7?",
    "answer": 42,
    "tolerance": 0,
    "correctFeedback": "Верно",
    "incorrectFeedback": "Проверьте умножение"
  }
}

Правильные ответы, скрытые тесты и подсказки проверяющему возвращаются только в преподавательских ответах.

Поддержка