Перейти к основному содержимому

API map LMS

Зачем нужно

Документ описывает публичную карту API LMS: какие endpoints нужны, кто ими пользуется и какие permissions применяются. Подробные DTO описаны в api-contracts.md.

Общие правила API

  • Базовый префикс: /api/v2/lms.
  • Все write-команды принимают Idempotency-Key.
  • Все списки поддерживают pagination.
  • Все ответы с приватными учебными данными фильтруются по identity context.
  • Teacher-facing endpoints принимают выбранный organizationId из actor context и валидируют его через identity membership.
  • Ошибки возвращаются в едином формате ApiError.
  • Внешние webhook endpoints отделяются от пользовательского API.

Course catalog inside LMS

EndpointМетодPermissionНазначение
/coursesGETlms.courses.readсписок LMS-курсов, доступных actor
/coursesPOSTlms.courses.manageсоздать course
/courses/{courseId}GETlms.courses.readкарточка course
/courses/{courseId}PATCHlms.courses.manageизменить metadata course
/courses/{courseId}/archivePOSTlms.courses.archiveархивировать course
/courses/{courseId}/versionsGETlms.courses.readверсии course
/courses/{courseId}/versionsPOSTlms.courses.manageсоздать draft version

Course versions and content tree

EndpointМетодPermissionНазначение
/course-versions/{versionId}GETlms.courses.readmetadata версии
/course-versions/{versionId}/submit-reviewPOSTlms.courses.manageотправить draft на review
/course-versions/{versionId}/publishPOSTlms.courses.publishопубликовать version
/course-versions/{versionId}/retirePOSTlms.courses.publishвывести version из новых enrollments
/course-versions/{versionId}/treeGETlms.content.readдерево курса
/course-versions/{versionId}/nodesPOSTlms.content.manageсоздать node
/nodes/{nodeId}GETlms.content.readnode с blocks
/nodes/{nodeId}PATCHlms.content.manageизменить draft node
/nodes/{nodeId}/movePOSTlms.content.manageпереместить node
/nodes/{nodeId}/content-blocksPOSTlms.content.manageсоздать block
/content-blocks/{blockId}PATCHlms.content.manageизменить block
/content-blocks/{blockId}DELETElms.content.manageудалить draft block

Write-операции над content запрещены для published version.

Enrollment and access

EndpointМетодPermissionНазначение
/enrollmentsGETlms.enrollments.readпоиск enrollments
/enrollmentsPOSTlms.enrollments.manageручное зачисление
/enrollments/{enrollmentId}GETowner, family, teacher, lms.enrollments.readкарточка enrollment
/enrollments/{enrollmentId}/activatePOSTlms.enrollments.manageактивировать
/enrollments/{enrollmentId}/pausePOSTlms.enrollments.manageпоставить на паузу
/enrollments/{enrollmentId}/resumePOSTlms.enrollments.manageвозобновить
/enrollments/{enrollmentId}/revokePOSTlms.enrollments.manageотозвать доступ
/enrollments/{enrollmentId}/completePOSTsystem, lms.enrollments.manageзавершить курс

Student API

EndpointМетодPermissionНазначение
/me/enrollmentsGETauthenticatedмои курсы
/me/enrollments/{enrollmentId}GETownerмой enrollment
/me/enrollments/{enrollmentId}/treeGETownerдерево курса с progress
/me/enrollments/{enrollmentId}/lessons/{nodeId}GETowner + active enrollmentурок
/me/enrollments/{enrollmentId}/lessons/{nodeId}/openPOSTowner + active enrollmentзафиксировать открытие
/me/enrollments/{enrollmentId}/progressGETownerprogress курса
/me/enrollments/{enrollmentId}/timelineGETownerистория учебных событий

Parent API

EndpointМетодPermissionНазначение
/family/student-profiles/{studentProfileId}/enrollmentsGETfamily contextкурсы ребёнка
/family/student-profiles/{studentProfileId}/enrollments/{enrollmentId}/progressGETfamily contextprogress ребёнка
/family/student-profiles/{studentProfileId}/workbooks/{workbookId}GETfamily contextпросмотр тетради
/family/student-profiles/{studentProfileId}/chats/{threadId}GETfamily contextпросмотр учебного чата, если разрешено

Attempts, submissions and feedback

EndpointМетодPermissionНазначение
/attemptsPOSTowner + active enrollmentначать попытку
/attempts/{attemptId}GETowner, family, teacherпопытка
/attempts/{attemptId}/submitPOSTownerотправить ответ
/attempts/{attemptId}/cancelPOSTowner, lms.attempts.manageотменить started attempt
/submissionsPOSTownerсоздать submission
/submissions/{submissionId}GETowner, family, assigned teacherработа
/submissions/{submissionId}/submitPOSTownerотправить работу
/submissions/{submissionId}/reopenPOSTassigned teacher, lms.feedback.writeоткрыть доработку
/submissions/{submissionId}/feedbackPOSTassigned teacher, lms.feedback.writeдобавить feedback
/feedback/{feedbackId}PATCHauthor, lms.feedback.manageисправить feedback

Teacher API

EndpointМетодPermissionНазначение
/teacher/assignmentsGETlms.teacher.readназначенные области
/teacher/studentsGETlms.teacher.readученики в области преподавателя
/teacher/review-queueGETlms.feedback.writeработы на проверку
/teacher/enrollments/{enrollmentId}/progressGETassigned teacherprogress ученика
/teacher/submissions/{submissionId}/feedbackPOSTassigned teacherпроверка работы
/teacher/notesPOSTassigned teacherвнутренняя заметка, если включено

Learning Workspace

EndpointМетодPermissionНазначение
/learning-workspace/groupsGETlms.learning-groups.readсписок “мои группы” в выбранной организации
/learning-workspace/groupsPOSTlms.learning-groups.manageсоздать Learning Group
/learning-workspace/groups/{groupId}GETworkspace scopeкарточка Learning Group
/learning-workspace/groups/{groupId}PATCHlms.learning-groups.manageизменить название/описание
/learning-workspace/groups/{groupId}/archivePOSTlms.learning-groups.manageархивировать группу
/learning-workspace/groups/{groupId}/participantsGETworkspace scopeучастники группы
/learning-workspace/groups/{groupId}/participantsPOSTlms.learning-group-participants.manageдобавить ученика по studentProfileId
/learning-workspace/groups/{groupId}/participants/{participantId}PATCHlms.learning-group-participants.managepause/remove participant
/learning-workspace/groups/{groupId}/invitesPOSTlms.learning-group-invites.manageотправить invite ученику/родителю через identity
/learning-workspace/invites/{inviteId}/cancelPOSTlms.learning-group-invites.manageотменить invite
/learning-workspace/groups/{groupId}/assignmentsGETworkspace scopeназначения группы
/learning-workspace/groups/{groupId}/assignmentsPOSTlms.learning-group-assignments.assignназначить курс, урок, тренажёр, разбор или task-bank set
/learning-workspace/assignments/{assignmentId}/cancelPOSTlms.learning-group-assignments.assignотменить назначение
/learning-workspace/groups/{groupId}/progressGETlms.progress.read + assigned teacherprogress участников по разрешённым enrollments

Learning Workspace endpoints не используют root /groups, чтобы не смешивать рабочие группы преподавателя с live delivery groups.

Workbooks

EndpointМетодPermissionНазначение
/workbooksGETowner, family, assigned teacherсписок тетрадей
/workbooks/{workbookId}GETowner, family, assigned teacherтетрадь
/workbooks/{workbookId}/revisionsGETowner, family, assigned teacherистория версий тетради
/workbooks/{workbookId}/revisionsPOSTownerсохранить revision
/workbooks/{workbookId}/submitPOSTownerотправить тетрадь
/workbooks/{workbookId}/commentsPOSTassigned teacherкомментарий
/workbooks/{workbookId}/attachmentsPOSTowner, assigned teacherвложение

Projects

EndpointМетодPermissionНазначение
/projectsGETowner, family, assigned teacherсписок проектов
/projects/{projectId}GETowner, family, assigned teacherпроект
/projects/{projectId}/milestones/{milestoneId}/submitPOSTownerсдать milestone
/projects/{projectId}/milestones/{milestoneId}/feedbackPOSTassigned teacherfeedback по milestone
/projects/{projectId}/artifactsPOSTownerприложить artifact

Booking and calendar

EndpointМетодPermissionНазначение
/roadmap/programsGET/POSTlms.roadmap.read/manageroadmap programs
/roadmap/programs/{programId}GET/PATCHlms.roadmap.read/manageкарточка roadmap program и draft metadata
/roadmap/programs/{programId}/projectionGETlms.roadmap.projection.readprojection roadmap с фильтрами audience, layer, format, track, availability, scheduledState, sort
/roadmap/topicsGET/POSTlms.roadmap.read/manageroadmap topics
/me/roadmap/{programId}GETownerstudent projection roadmap с progress, gaps и next step
/family/student-profiles/{studentProfileId}/roadmap/{programId}GETfamily contextroadmap ребёнка
/teacher/students/{studentProfileId}/roadmap/{programId}GETassigned teacherroadmap ученика в teacher scope
/roadmap/topics/{topicId}/completionPOSTlms.roadmap.completion.manageсоздать completion по rule или manual override
/roadmap/topics/{topicId}/completion/recalculatePOSTlms.roadmap.completion.recalculateпересчитать completion по evidence
/roadmap/programs/{programId}/publishPOSTlms.roadmap.publishопубликовать roadmap
/groupsGET/POSTlms.sessions.read/managelive delivery groups для расписания, не Learning Groups
/sessionsGET/POSTlms.sessions.read/managelive sessions
/sessions/{sessionId}/attendanceGET/POSTlms.attendance.writeattendance
/sessions/{sessionId}/topicsPOSTlms.sessions.manageсвязать session с roadmap topic
/booking/slotsGETauthenticatedдоступные слоты
/booking/slotsPOSTlms.booking.manageсоздать учебный слот
/booking/slots/{slotId}/holdPOSTowner, familyвременно удержать место
/booking/slots/{slotId}/bookPOSTowner, familyзаписаться
/bookings/{bookingId}/cancelPOSTowner, family, lms.booking.manageотменить запись
/bookings/{bookingId}/movePOSTowner, family, lms.booking.manageперенести запись

Chat

EndpointМетодPermissionНазначение
/chatsGETparticipant, family, assigned teacherсписок учебных чатов
/chatsPOSTlms.chat.manageсоздать thread
/chats/{threadId}GETparticipant, family, assigned teacherthread
/chats/{threadId}/messagesGETparticipantсообщения
/chats/{threadId}/messagesPOSTparticipant + lms.chat.writeотправить сообщение
/chats/{threadId}/readPOSTparticipantотметить прочтение
/chats/{threadId}/closePOSTassigned teacher, lms.chat.moderateзакрыть thread

Public storefront read

EndpointМетодPermissionНазначение
/public/roadmap/{programRef}GETpublicпубличная проекция roadmap для SSR/cache storefront
/public/programsGETpublicопубликованные публичные программы
/public/factsGETpublicпубличные учебные факты без PII

Admin and operations

EndpointМетодPermissionНазначение
/admin/importsPOSTlms.adminзапустить импорт
/admin/imports/{importId}GETlms.adminстатус импорта
/admin/progress/recalculatePOSTlms.adminпересчитать progress
/admin/auditGETlms.audit.readaudit events
/admin/external-sync-recordsGETlms.adminsync records

Webhooks and service API

EndpointМетодCallerНазначение
/webhooks/crm/entitlementsPOSTCRMоткрыть, паузить или отозвать enrollment
/webhooks/crm/entitlement-consumptionPOSTCRMподтвердить или отклонить consumption
/webhooks/task-bank/check-resultsPOSTtask-bankпринять результат проверки
/webhooks/identity/family-changedPOSTidentityинвалидировать family access cache
/webhooks/external-lms/progressPOSTsync serviceимпортировать progress

Webhook endpoints должны проверять signature, timestamp, replay window и idempotency.

Стандартные ошибки

CodeHTTPКогда
lms.access.denied403actor не имеет доступа к учебному объекту
lms.enrollment.inactive403enrollment не active
lms.state.invalid_transition409запрещённый переход
lms.version.immutable409попытка изменить published version
lms.revision.stale409optimistic lock conflict
lms.reference.broken422невалидная ссылка на task-bank или storage
lms.booking.capacity_exceeded409слот уже занят
lms.learning_group.not_scope403группа не входит в выбранный teacher/organization context
lms.learning_group.progress_denied403есть доступ к группе, но нет прав на progress