AdminCurator

Расписание курса

Окна доступа по датам для курса, модулей и уроков — с дефолтным расписанием и переопределением на группу.

GET/api/v1/t/courses/:id/schedule

Окно расписания курса

AdminCurator JWT право: manage_courses

Возвращает окно дат уровня курса в дефолтной сетке (group_id = null) или null, если оно не задано. Ответ — { window }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор курса.

Пример запроса

cURL
curl https://api.edumentor.kz/api/v1/t/courses/c1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "window": {
      "id": "sw1a2b3c-...",
      "course_id": "c1a2b3c4-...",
      "group_id": null,
      "level": "course",
      "module_id": null,
      "lesson_id": null,
      "starts_at": "2026-07-01T09:00:00Z",
      "ends_at": "2026-07-31T23:59:00Z",
      "allow_before_start": false,
      "allow_after_end": false,
      "created_at": "2026-06-26T10:00:00Z",
      "updated_at": "2026-06-26T10:00:00Z"
    } }
}

Ошибки

КодerrorКогда
400invalid_id_formatid не является корректным UUID.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundКурс не найден.
PUT/api/v1/t/courses/:id/schedule

Задать окно расписания курса

AdminCurator JWT право: manage_courses

Создаёт или обновляет окно дат уровня курса (дефолтная сетка). Идемпотентно по узлу: повторный PUT перезаписывает текущее окно. Ответ — { window } с сохранённой записью.

Все datetime — абсолютные моменты (UTC). По умолчанию контент недоступен вне окна. Задание будущей даты начала на опубликованном курсе закроет доступ студентам, которые уже его проходят (у границы начала нет послаблений).

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор курса.

Тело запроса

ПараметрТипОписание
starts_atопц.string|nullДата/время начала окна (ISO8601, абсолютный момент UTC) или null. Должно быть задано хотя бы одно из starts_at/ends_at.Пример: 2026-07-01T09:00:00Z
ends_atопц.string|nullДата/время окончания окна (ISO8601) или null. Если заданы обе границы — starts_atends_at.Пример: 2026-07-31T23:59:00Z
allow_before_startопц.booleanРазрешить доступ ДО даты начала. По умолчанию false (до начала контент закрыт).Пример: false
allow_after_endопц.booleanРазрешить доступ ПОСЛЕ даты окончания. По умолчанию false (после окончания контент закрыт, с поправкой на правило «первой попытки» для тестов/заданий).Пример: false

Пример запроса

cURL
curl -X PUT https://api.edumentor.kz/api/v1/t/courses/c1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme" \
  -H "Content-Type: application/json" \
  -d '{
    "starts_at": "2026-07-01T09:00:00Z",
    "ends_at": "2026-07-31T23:59:00Z",
    "allow_before_start": false,
    "allow_after_end": false
  }'

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "window": {
      "id": "sw1a2b3c-...",
      "course_id": "c1a2b3c4-...",
      "group_id": null,
      "level": "course",
      "module_id": null,
      "lesson_id": null,
      "starts_at": "2026-07-01T09:00:00Z",
      "ends_at": "2026-07-31T23:59:00Z",
      "allow_before_start": false,
      "allow_after_end": false,
      "created_at": "2026-06-26T10:00:00Z",
      "updated_at": "2026-06-26T10:00:00Z"
    } }
}

Ошибки

КодerrorКогда
400schedule_window_no_boundsНе указано ни starts_at, ни ends_at — окно должно ограничивать хотя бы одну сторону.
400schedule_window_invertedstarts_at позже ends_at.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundКурс/модуль/урок/группа не найдены в этой школе.
DELETE/api/v1/t/courses/:id/schedule

Убрать окно расписания курса

AdminCurator JWT право: manage_courses

Мягко удаляет окно уровня курса (дефолтная сетка). Идемпотентно. Ответ — { cleared: true }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор курса.

Пример запроса

cURL
curl -X DELETE https://api.edumentor.kz/api/v1/t/courses/c1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "cleared": true }
}

Ошибки

КодerrorКогда
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_window_not_foundОкно не задано.
GET/api/v1/t/courses/:id/schedule-tree

Вся дефолтная сетка курса

AdminCurator JWT право: manage_courses

Возвращает все окна дефолтной сетки курса (уровни курс + модули + уроки, group_id = null) одним запросом — для построения дерева расписания в админке. Ответ — { course_id, group_id, windows }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор курса.

Пример запроса

cURL
curl https://api.edumentor.kz/api/v1/t/courses/c1a2b3c4-.../schedule-tree \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": {
    "course_id": "c1a2b3c4-...",
    "group_id": null,
    "windows": [
      {
        "id": "sw1a2b3c-...",
        "course_id": "c1a2b3c4-...",
        "group_id": null,
        "level": "course",
        "module_id": null,
        "lesson_id": null,
        "starts_at": "2026-07-01T09:00:00Z",
        "ends_at": null,
        "allow_before_start": false,
        "allow_after_end": false,
        "created_at": "2026-06-26T10:00:00Z",
        "updated_at": "2026-06-26T10:00:00Z"
      },
      {
        "id": "sw2b3c4d-...",
        "course_id": "c1a2b3c4-...",
        "group_id": null,
        "level": "module",
        "module_id": "m1a2b3c4-...",
        "lesson_id": null,
        "starts_at": null,
        "ends_at": "2026-07-15T23:59:00Z",
        "allow_before_start": false,
        "allow_after_end": false,
        "created_at": "2026-06-26T10:00:00Z",
        "updated_at": "2026-06-26T10:00:00Z"
      }
    ]
  }
}

Ошибки

КодerrorКогда
400invalid_id_formatid не является корректным UUID.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundКурс не найден.
GET/api/v1/t/modules/:id/schedule

Окно расписания модуля

AdminCurator JWT право: manage_courses

Возвращает окно дат уровня модуля в дефолтной сетке или null. Ответ — { window }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор модуля.

Пример запроса

cURL
curl https://api.edumentor.kz/api/v1/t/modules/m1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "window": null }
}

Ошибки

КодerrorКогда
400invalid_id_formatid не является корректным UUID.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundМодуль не найден.
PUT/api/v1/t/modules/:id/schedule

Задать окно расписания модуля

AdminCurator JWT право: manage_courses

Создаёт или обновляет окно дат уровня модуля (дефолтная сетка). Доступность вложена: модуль закрыт, если закрыт его курс ИЛИ собственное окно модуля.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор модуля.

Тело запроса

ПараметрТипОписание
starts_atопц.string|nullДата/время начала окна (ISO8601, абсолютный момент UTC) или null. Должно быть задано хотя бы одно из starts_at/ends_at.Пример: 2026-07-01T09:00:00Z
ends_atопц.string|nullДата/время окончания окна (ISO8601) или null. Если заданы обе границы — starts_atends_at.Пример: 2026-07-31T23:59:00Z
allow_before_startопц.booleanРазрешить доступ ДО даты начала. По умолчанию false (до начала контент закрыт).Пример: false
allow_after_endопц.booleanРазрешить доступ ПОСЛЕ даты окончания. По умолчанию false (после окончания контент закрыт, с поправкой на правило «первой попытки» для тестов/заданий).Пример: false

Пример запроса

cURL
curl -X PUT https://api.edumentor.kz/api/v1/t/modules/m1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme" \
  -H "Content-Type: application/json" \
  -d '{ "ends_at": "2026-07-15T23:59:00Z", "allow_after_end": false }'

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "window": { "id": "sw2b3c4d-...", "level": "module", "module_id": "m1a2b3c4-...", "ends_at": "2026-07-15T23:59:00Z", "starts_at": null, "allow_before_start": false, "allow_after_end": false } }
}

Ошибки

КодerrorКогда
400schedule_window_no_boundsНе указано ни starts_at, ни ends_at — окно должно ограничивать хотя бы одну сторону.
400schedule_window_invertedstarts_at позже ends_at.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundКурс/модуль/урок/группа не найдены в этой школе.
DELETE/api/v1/t/modules/:id/schedule

Убрать окно расписания модуля

AdminCurator JWT право: manage_courses

Мягко удаляет окно уровня модуля. Каскадно убирает окна уроков этого модуля в той же сетке (окно урока не может пережить окно своего модуля). Ответ — { cleared: true }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор модуля.

Пример запроса

cURL
curl -X DELETE https://api.edumentor.kz/api/v1/t/modules/m1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "cleared": true }
}

Ошибки

КодerrorКогда
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_window_not_foundОкно не задано.
GET/api/v1/t/lessons/:id/schedule

Окно расписания урока

AdminCurator JWT право: manage_courses

Возвращает окно дат уровня урока в дефолтной сетке или null. Ответ — { window }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор урока.

Пример запроса

cURL
curl https://api.edumentor.kz/api/v1/t/lessons/l1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "window": null }
}

Ошибки

КодerrorКогда
400invalid_id_formatid не является корректным UUID.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundУрок не найден.
PUT/api/v1/t/lessons/:id/schedule

Задать окно расписания урока

AdminCurator JWT право: manage_courses

Создаёт или обновляет окно дат уровня урока (дефолтная сетка). Окно урока можно задать ТОЛЬКО если у его модуля уже задано окно в той же сетке — иначе 409 module_schedule_required.

Если у урока есть тест / задание / пробное ЕНТ, ограничение по дате окончания действует только на ПЕРВУЮ попытку: студент, начавший/сдавший попытку до дедлайна, может перепройти тест или перезагрузить отклонённое задание и после дедлайна. Граница начала всегда закрывает доступ без послаблений.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор урока.

Тело запроса

ПараметрТипОписание
starts_atопц.string|nullДата/время начала окна (ISO8601, абсолютный момент UTC) или null. Должно быть задано хотя бы одно из starts_at/ends_at.Пример: 2026-07-01T09:00:00Z
ends_atопц.string|nullДата/время окончания окна (ISO8601) или null. Если заданы обе границы — starts_atends_at.Пример: 2026-07-31T23:59:00Z
allow_before_startопц.booleanРазрешить доступ ДО даты начала. По умолчанию false (до начала контент закрыт).Пример: false
allow_after_endопц.booleanРазрешить доступ ПОСЛЕ даты окончания. По умолчанию false (после окончания контент закрыт, с поправкой на правило «первой попытки» для тестов/заданий).Пример: false

Пример запроса

cURL
curl -X PUT https://api.edumentor.kz/api/v1/t/lessons/l1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme" \
  -H "Content-Type: application/json" \
  -d '{ "starts_at": "2026-07-03T00:00:00Z", "ends_at": "2026-07-05T23:59:00Z" }'

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "window": { "id": "sw3c4d5e-...", "level": "lesson", "module_id": "m1a2b3c4-...", "lesson_id": "l1a2b3c4-...", "starts_at": "2026-07-03T00:00:00Z", "ends_at": "2026-07-05T23:59:00Z", "allow_before_start": false, "allow_after_end": false } }
}

Ошибки

КодerrorКогда
400schedule_window_no_boundsНе указано ни starts_at, ни ends_at — окно должно ограничивать хотя бы одну сторону.
400schedule_window_invertedstarts_at позже ends_at.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundКурс/модуль/урок/группа не найдены в этой школе.
409module_schedule_requiredУ модуля урока не задано окно расписания — сначала задайте расписание модуля.
DELETE/api/v1/t/lessons/:id/schedule

Убрать окно расписания урока

AdminCurator JWT право: manage_courses

Мягко удаляет окно уровня урока. Ответ — { cleared: true }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор урока.

Пример запроса

cURL
curl -X DELETE https://api.edumentor.kz/api/v1/t/lessons/l1a2b3c4-.../schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "cleared": true }
}

Ошибки

КодerrorКогда
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_window_not_foundОкно не задано.
GET/api/v1/t/groups/:id/course-schedule

Сетка расписания группы для курса

AdminCurator JWT право: manage_courses

Возвращает все окна сетки группы для указанного курса (уровни курс + модули + уроки, group_id = id группы). Ответ — { course_id, group_id, windows }.

Если у студента есть группа со СВОЕЙ сеткой для курса, она ПОЛНОСТЬЮ заменяет дефолтную для него (узлы без окна в группе становятся без ограничений). При членстве в нескольких таких группах окна объединяются в пользу студента (по каждому узлу берётся наиболее мягкое окно).

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор группы.

Query-параметры

ПараметрТипОписание
course_idобяз.uuidКурс, чью сетку группы вернуть.Пример: c1a2b3c4-...

Пример запроса

cURL
curl "https://api.edumentor.kz/api/v1/t/groups/g1a2b3c4-.../course-schedule?course_id=c1a2b3c4-..." \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": {
    "course_id": "c1a2b3c4-...",
    "group_id": "g1a2b3c4-...",
    "windows": [
      {
        "id": "sw9z8y7x-...",
        "course_id": "c1a2b3c4-...",
        "group_id": "g1a2b3c4-...",
        "level": "course",
        "module_id": null,
        "lesson_id": null,
        "starts_at": "2026-08-01T09:00:00Z",
        "ends_at": "2026-08-31T23:59:00Z",
        "allow_before_start": false,
        "allow_after_end": false,
        "created_at": "2026-06-26T10:00:00Z",
        "updated_at": "2026-06-26T10:00:00Z"
      }
    ]
  }
}

Ошибки

КодerrorКогда
400invalid_id_formatid группы или course_id не является корректным UUID.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundГруппа или курс не найдены в этой школе.
PUT/api/v1/t/groups/:id/course-schedule

Задать окно в сетке группы

AdminCurator JWT право: manage_courses

Создаёт или обновляет окно для конкретного узла (курс/модуль/урок) в сетке расписания группы. Узел задаётся полями level, module_id, lesson_id в теле.

level = coursemodule_id и lesson_id опускаются; level = module — обязателен module_id; level = lesson — обязательны module_id и lesson_id, и у модуля уже должно быть окно в этой же сетке группы (иначе 409 module_schedule_required).

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор группы.

Тело запроса

ПараметрТипОписание
course_idобяз.uuidКурс, к чьей сетке группы относится узел.
levelобяз.stringУровень узла: course, module или lesson.Пример: module
module_idопц.uuidМодуль (для level=module|lesson).
lesson_idопц.uuidУрок (для level=lesson).
windowобяз.objectОкно: { starts_at, ends_at, allow_before_start, allow_after_end } (см. PUT окна курса).

Пример запроса

cURL
curl -X PUT https://api.edumentor.kz/api/v1/t/groups/g1a2b3c4-.../course-schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme" \
  -H "Content-Type: application/json" \
  -d '{
    "course_id": "c1a2b3c4-...",
    "level": "course",
    "window": {
      "starts_at": "2026-08-01T09:00:00Z",
      "ends_at": "2026-08-31T23:59:00Z",
      "allow_before_start": false,
      "allow_after_end": false
    }
  }'

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "window": { "id": "sw9z8y7x-...", "group_id": "g1a2b3c4-...", "level": "course", "starts_at": "2026-08-01T09:00:00Z", "ends_at": "2026-08-31T23:59:00Z", "allow_before_start": false, "allow_after_end": false } }
}

Ошибки

КодerrorКогда
400schedule_window_no_boundsНе указано ни starts_at, ни ends_at — окно должно ограничивать хотя бы одну сторону.
400schedule_window_invertedstarts_at позже ends_at.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_target_not_foundКурс/модуль/урок/группа не найдены в этой школе.
409module_schedule_requiredДля окна уровня lesson у модуля нет окна в сетке этой группы.
DELETE/api/v1/t/groups/:id/course-schedule

Убрать окно из сетки группы

AdminCurator JWT право: manage_courses

Мягко удаляет окно конкретного узла в сетке группы. Узел задаётся в теле (course_id, level, module_id, lesson_id). Удаление окна модуля каскадно убирает окна его уроков в этой же сетке. Ответ — { cleared: true }.

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор группы.

Тело запроса

ПараметрТипОписание
course_idобяз.uuidКурс, к чьей сетке группы относится узел.
levelобяз.stringУровень узла: course, module или lesson.Пример: module
module_idопц.uuidМодуль (для level=module|lesson).
lesson_idопц.uuidУрок (для level=lesson).

Пример запроса

cURL
curl -X DELETE https://api.edumentor.kz/api/v1/t/groups/g1a2b3c4-.../course-schedule \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme" \
  -H "Content-Type: application/json" \
  -d '{ "course_id": "c1a2b3c4-...", "level": "course" }'

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": { "cleared": true }
}

Ошибки

КодerrorКогда
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenНет права manage_courses.
404schedule_window_not_foundОкно для указанного узла не задано.