# Документация LMS — полный текст
Версия продукта 0.1.0, сборка из коммита 933ad56.
Это вся документация одним файлом: страницы идут подряд, у каждой указан её адрес.
---
# Документация LMS
Адрес: https://docs-school.sersidteh.ru/
Коробочная платформа для онлайн-школы: **одна установка — одна школа**. Ставится на ваш
сервер, данные лежат у вас, забрать их можно целиком и в любой момент.
Эта документация собрана на **версию продукта 0.1.0**, сборка из коммита `933ad56` от 8 августа 2026.
У вашей установки может стоять другая версия — справочник вашей школы живёт на её
собственном адресе, `/docs`.
## С чего начать
| Кому | Куда |
|---|---|
| Смотрю, подойдёт ли | [Что это за платформа](/start/what-is-it/) и [Чем отличается](/start/differences/) |
| Ставлю на сервер | [Установка](/start/install/) |
| Работаю со школой | [Как пользоваться](/guide/) |
| Смотрю, что сможет API | [Проект API](/api/) — реализации ещё нет |
| Меняю оформление | [Оформление](/appearance/) |
| Подключаю ИИ-агента | [Для агентов](/agents/) |
## Что здесь уже есть, а чего ещё нет
Документация пишется **параллельно разработке**, а не после неё. Поэтому часть страниц
пока пустая, и это видно: у таких страниц наверху стоит пометка «раздел ещё не написан»,
а в [перечне страниц](/search/) они помечены отдельно.
Причина не в спешке. Документация, которую пишут по готовому продукту, описывает то,
что получилось. Документация, которую пишут рядом, **ловит места, где продукт неописуем**, —
и это самый дешёвый способ найти дыру в проектировании до того, как она станет кодом.
Там, где страницу нельзя написать честно, вместо неё стоит объяснение, чего именно
не хватает.
## Что читается машиной
Этот сайт сделан так, чтобы его читал не только человек. Ссылку можно отдать
ИИ-агенту, и он разберётся сам.
- **[/llms.txt](/llms.txt)** — карта разделов, по одной строке на каждый. Точка входа для модели.
- **[/llms-full.txt](/llms-full.txt)** — вся документация одним текстом, чтобы не обходить страницы по одной.
- **[/openapi.draft.json](/openapi.draft.json)** — спецификация API в машинном виде. «draft» в имени не для красоты: API ещё не написано, часть адресов предположительна. Адрес `/openapi.json` не занят намеренно.
- **Любая страница в Markdown** — добавьте `.md` к её адресу: [/api/errors.md](/api/errors.md).
Содержимое каждой страницы отдаётся готовым HTML: страница, пустая без JavaScript,
для модели пустая. Подробнее — [Машинные выходы](/agents/machine-readable/).
---
# Начало
Адрес: https://docs-school.sersidteh.ru/start/
Пять страниц для того, кто платформу ещё не поставил. Первые три отвечают
на вопрос «подойдёт ли», последние две — «как начать».
Если вы читаете это, выбирая между коробкой и SaaS, начните с двух страниц:
[Что это за платформа](/start/what-is-it/) — про то, что именно покупается,
и [Чем отличается](/start/differences/) — там есть раздел «Чего у нас нет»,
и он честный.
## Страницы раздела
| Страница | О чём |
|---|---|
| [Что это за платформа](/start/what-is-it/) | Коробка вместо сервиса, одна установка — одна школа, что входит и кому не подходит |
| [Как устроена](/start/architecture/) | Три процесса, шина событий, адаптеры к внешним сервисам, требования к серверу |
| [Чем отличается](/start/differences/) | API, права, оформление, уход с платформы — и список того, чего у нас нет |
| [Установка](/start/install/) | Чек-лист из шести проверок до установки, порядок, первая проверка |
| [Первый запуск](/start/first-run/) | Настройки, первый курс с видео, ученик, доступ, проверка глазами ученика |
## Короткий ответ
Коробочная платформа для онлайн-школы. Ставится на ваш сервер, одна установка —
одна школа, покупается разово. Данные и код у вас; если мы исчезнем, школа
продолжит работать.
**Продукт в разработке.** Обучение — курсы, уроки, задания, тесты, доступы —
работает. Продаж, рассылок, сценариев, вебинаров и работающего API пока нет.
Где что — сказано на каждой странице, и пометки на сайте различают два разных
состояния: «страница ещё не написана» и «этого ещё нет в продукте».
---
# Что это за платформа
Адрес: https://docs-school.sersidteh.ru/start/what-is-it/
Платформа для онлайн-школы: курсы, ученики, доступы, проверка заданий, продажи,
рассылки, автоматизации. Отличается она от привычных не набором возможностей,
а тем, **где всё это стоит и кому принадлежит**.
Эта страница отвечает на первый вопрос покупателя: что именно он покупает.
## Коробка, а не сервис
Вы покупаете не доступ к чужой системе, а саму систему. На практике это значит
четыре вещи.
**Код и база — на вашем сервере.** Не «в вашем разделе нашего сервера», а на
машине, к которой у вас есть root. Вы можете подключиться к PostgreSQL, посмотреть
таблицы, снять дамп, перенести всё на другой сервер за вечер.
**Мы не ходим внутрь.** У нас нет доступа к вашей установке, и мы не можем ни
посмотреть ваши данные, ни что-то в них поправить. Это ограничивает поддержку:
на вопрос «почему у ученика не открылся урок» мы ответим, где посмотреть, но не
посмотрим сами.
**Оплата разовая.** Покупается коробка, а не подписка (ADR-029). Все модули входят
в один пакет — докупаемых модулей нет. Установка, обновления и настройка —
отдельная услуга, если вы захотите её заказать, а не обязательная часть сделки.
**Если мы исчезнем, школа продолжит работать.** Ровно как работала: сервер ваш,
код открытый и читаемый, база ваша. Перестанут приходить обновления — и это всё,
что изменится. Ответ намеренно прямой: уклончивый ответ на этот вопрос стоит
дороже честного.
## Одна установка — одна школа
Мультиарендности нет: на одной установке живёт одна школа. Из этого следуют оба
последствия, и второе не приятнее первого.
**Хорошее.** У вас нет соседей по базе. Никто не может уронить вашу школу своей
нагрузкой, никто не влияет на ваши лимиты и на скорость. Обновление приходит
тогда, когда вы его поставили, а не когда мы решили выкатить всем.
**Плохое.** Обновление — ваше событие, а не наше. Кто-то должен его поставить,
проверить и, если что-то пошло не так, откатить. Резервные копии тоже ваши: они
настраиваются при установке, но следит за ними школа.
Из этого же следует, что **своего приложения в App Store и Google Play не будет
никогда** (ADR-053). Каждой школе понадобилось бы своё приложение со своим
названием и иконкой — это сотни публикаций, сотни ревью и аккаунты разработчика
на покупателе, который купил коробку именно затем, чтобы этим не заниматься.
Вместо магазинов кабинет ученика ставится на домашний экран как PWA, а для тех,
кто живёт в Telegram, есть отдельная оболочка.
## Что входит
Один пакет, все модули:
| Модуль | Что делает |
|---|---|
| **Обучение** | Курсы, модули, уроки, задания и ответы, тесты, прогресс, правила открытия уроков, сертификаты, кураторы, потоки |
| **Коммерция** | Продукты, тарифы, заказы, платежи, выданные доступы, промокоды, возвраты, рассрочка, подписки |
| **CRM** | Сегменты, массовые действия, канбан заказов, история взаимодействий |
| **Сообщения** | Письма, Telegram, уведомления в кабинете, шаблоны, рассылки, категории подписок и отписки |
| **Сценарии** | Автоматизации графом: триггер, условие, действие, задержка, ожидание события |
| **Вебинары** | Комнаты, регистрации, чат, тайминг продающих блоков, учёт досмотра |
| **Сайт** | Страницы, блоки, формы и их обработчики, файлы |
| **Аналитика** | Продажи, источники, доходимость, воронки |
Плюс **интеграции**: ключи API, исходящие вебхуки, импорт и экспорт.
Часть этого уже работает, часть ещё пишется. Что именно — сказано на каждой
странице отдельно, и раздел [Проект API](/api/) целиком помечен как замысел.
## Кому это не подходит
Абзац обязательный: без него страница превращается в рекламу.
**Школе без технического специалиста и без подрядчика.** Коробку надо поставить
на сервер, настроить домен и почту, подключить платёжного провайдера, а потом
обновлять. Это не «нажать кнопку»: первая установка на живой сервер заняла
у нас день и дала девять находок. Если в школе некому этим заняться и не
планируется нанимать — вам будет проще с SaaS, где всё это делает продавец.
**Школе, которой нужно приложение в магазине.** Его не будет, см. выше.
**Школе, которая хочет начать сегодня к вечеру.** Регистрация в SaaS занимает
минуту, установка коробки — часы, и до неё ещё нужен сервер.
## Что дальше
- [Как устроена](/start/architecture/) — из чего собрана платформа и что это меняет.
- [Чем отличается](/start/differences/) — сравнение с GetCourse и School-master, включая то, чего у нас нет.
- [Установка](/start/install/) — требования к серверу и порядок.
---
# Как устроена
Адрес: https://docs-school.sersidteh.ru/start/architecture/
Страница для того, кто будет это ставить, обновлять и чинить. Она объясняет,
из каких частей собрана платформа и почему части именно такие — потому что от
этого зависит, что вы увидите на сервере и что придётся делать при обновлении.
## Три процесса, а не двадцать
Приложение одно, внутри разделено на модули с явными границами. Это **модульный
монолит**, а не микросервисы, и выбор сознательный: микросервисы решают проблему
«много команд мешают друг другу», а добавляют сетевые вызовы, распределённые
транзакции и пять способов выкатить неправильно.
На сервере после установки работает:
| Процесс | Что делает |
|---|---|
| **app** | Веб-интерфейс — админка, кабинет ученика, публичные страницы — и HTTP-API. Только быстрые операции |
| **worker** | Очереди: рассылки, шаги сценариев, исходящие вебхуки, отложенные операции, генерация файлов |
| **bot** | Telegram-бот. Отдельный процесс, потому что держит долгоживущее соединение |
Плюс **PostgreSQL** и **Redis**, плюс обратный прокси, который занимается TLS.
Всё, что дольше примерно двух секунд, уходит в очередь. Поэтому рассылка на десять
тысяч человек не блокирует админку, а перезапуск сервера не теряет запущенные
сценарии: шаг сценария — это отложенная задача в очереди, а не таймер в памяти.
Воркер масштабируется отдельно: если очередь не успевает, запускается ещё один.
## Модули не лезут в таблицы друг друга
Восемь модулей: обучение, коммерция, CRM, сообщения, сценарии, вебинары, сайт,
аналитика. Плюс ядро (вход, права, пользователи, настройки, события) и интеграции.
Между собой они общаются **событиями**, а не прямыми вызовами. Оплата прошла —
модуль коммерции публикует `payment.succeeded` и на этом заканчивает. Дальше:
```
payment.succeeded
├─ commerce закрывает заказ, создаёт покупки
├─ learning открывает доступ к курсу
├─ messaging письмо «доступ открыт» и сообщение в Telegram
├─ automation запускает сценарии с триггером «оплата»
├─ crm пересчитывает сегменты
├─ integrations шлёт исходящий вебхук вам
└─ analytics фиксирует событие для отчётов
```
Модуль коммерции ничего не знает ни про Telegram, ни про сценарии. Для вас это
значит одну практическую вещь: **новая интеграция подписывается на событие
и не требует правок в продукте**.
## Событие пишется в базу, а не в очередь
Наивная схема «записали в базу, поставили задачу в очередь» ломается — и ломается
на деньгах. Транзакция прошла, а постановка задачи упала: оплата есть, доступа нет.
Или наоборот: задача поставилась, транзакция откатилась — доступ выдан за
неоплаченный заказ.
Поэтому событие записывается **в ту же транзакцию**, что и бизнес-операция, в таблицу
`Event`, а отдельный воркер публикует его в очередь. Либо коммитится всё, либо ничего.
Из этого следуют две вещи, которые видны снаружи:
**Есть полный журнал того, что происходило.** Не только «что сейчас», но и «что
менялось» — по нему отлаживаются сценарии и переигрываются пропущенные вебхуки.
**Порядок доставки не гарантируется.** Даже по одному объекту. Это честное
ограничение любой такой системы, и лучше сказать о нём прямо. Что из этого следует
получателю вебхука:
- **обработчик обязан быть идемпотентным** по идентификатору события: одно и то же
событие может прийти дважды;
- **не полагайтесь на «предыдущее событие уже обработано»** — читайте текущее
состояние объекта, а не достраивайте его из истории;
- упорядочить события можно самому: у каждого есть время создания и монотонный номер.
## Внешние сервисы — только через адаптеры
Платежи, фискализация, сообщения, видео, хранилище файлов подключаются адаптерами.
Ни один модуль не вызывает ЮKassa или Telegram напрямую.
Что это даёт школе: **замена провайдера не переписывает продукт**. Сменили платёжного
провайдера — поменялся один адаптер, а заказы, доступы, сценарии и отчёты остались
как были.
Оно же объясняет неочевидное: у разных провайдеров разная модель доверия. У ЮKassa
подписи уведомлений нет вообще — проверка по адресам плюс обязательный повторный
запрос статуса; у Продамуса — подпись HMAC. Поэтому итоговое состояние платежа
всегда берётся **повторным запросом к провайдеру**, а не из тела уведомления: тело
можно подделать, и оно может устареть.
## Что нужно от сервера
| | Минимум | Комфортно |
|---|---|---|
| Ядра | 2 | 4 |
| Память | 4 ГБ | 8 ГБ |
| Свободный диск | 20 ГБ | 40 ГБ |
| ОС | Ubuntu 22.04 / 24.04, Debian 12 | — |
| Docker | 24+ с плагином compose v2 | 29+ |
**Память здесь — про сборку, а не про работу.** Работающая установка укладывается
примерно в 1,5 ГБ. Но сборка образа съедает 2–3 ГБ разом: если на сервере уже
что-то живёт, сборка на нём — самый быстрый способ уронить соседей. Собирайте образ
на другой машине и переносите готовым либо добавьте своп на время сборки.
**Диск.** Сами образы около 2,3 ГБ, плюс данные, файлы школы и резервные копии.
Подробности и предустановочный чек-лист — на странице [Установка](/start/install/).
## Часовые пояса и локали
Одна вещь, о которой стоит знать заранее, потому что она касается вашего сервера.
Платформа **не берёт из среды ничего**: ни часовой пояс, ни локаль, ни язык системы.
Сервер работает в UTC, а всё, что видит человек, показывается в поясе и локали
школы. Причина простая: коробка стоит на машине, про которую нам никто ничего
не обещал, а «через шесть секунд» не должно превращаться в «через три часа» от того,
что сервер стоит западнее.
Практически для вас это значит, что **менять часовой пояс сервера не нужно**
и не нужно подгонять локаль. Пояс школы задаётся в её настройках.
---
# Чем отличается
Адрес: https://docs-school.sersidteh.ru/start/differences/
Сравнивать по количеству возможностей бессмысленно: у зрелого SaaS их всегда
больше. Разница в четырёх вещах, где расхождение не количественное, а
принципиальное, — и в списке того, чего у нас нет, который стоит в конце
и который стоит прочитать первым.
## Одно API вместо двух
У GetCourse их два, и они независимы: разные базовые адреса, разная
аутентификация, разный формат тела, разные конверты ответа и разные названия
одних и тех же сущностей.
**Классическое API** умеет три вещи: создать пользователя, создать заказ,
запустить асинхронный экспорт. Формат — JSON в base64 внутри
form-urlencoded. Лимит экспорта — 100 запросов за 2 часа **на весь аккаунт**,
причём каждый опрос «готов ли файл» тоже расходует квоту, а экспорт однопоточный.
Чтения одного объекта нет вообще — только массовая выгрузка.
**Tech API** закрывает часть дыр, но ключ выдаётся по анкете, а документация
закрыта в `robots.txt`. Ни один из массовых интеграторов её не использует —
все работают на классическом API с его тремя действиями.
Что это меняет для интегратора практически: чтобы узнать состояние одного заказа,
нужно заказать выгрузку всех и дождаться файла. Синхронизация с CRM превращается
в ночную задачу вместо реакции на событие.
У нас один адрес, одна аутентификация, один формат, один конверт ошибок и один
справочник событий. Ключ школа заводит сама, без анкеты.
Оговорка, без которой абзац был бы враньём: **работающего API у нас пока нет.**
Оно спроектировано целиком и описано в разделе [Проект API](/api/), но маршрутов
в продукте ещё ноль. Сравнивать сегодня можно замысел с работающим — это честное
сравнение только если сказать об этом вслух.
## Права: роль — сущность, а не семьдесят галочек
У GetCourse ролей как сущности нет. Есть поле «тип» в карточке человека и около
семидесяти отдельных галочек, которые расставляются **каждому сотруднику по одной,
руками**. Ни шаблонов, ни групп, ни копирования прав с человека на человека.
Три следствия, которые практики называют болью:
- **Права почти не привязаны к объектам.** Ограничить сотрудника одним курсом можно
только назначив его преподавателем этого курса. Одной воронкой, одним продуктом,
одной рассылкой — нельзя. Администратор всегда администратор всего аккаунта.
- **Контакты ученика видны либо целиком, либо никак.** Состояния «работай с человеком,
но не видь его почту и телефон» не существует. На вопрос, как закрыть контакты
от сотрудников, поддержка отвечает: заключайте договор о неразглашении.
- **Крупные права каскадно включают пакеты других.** «Может настраивать аккаунт» разом
добавляет управление правами, мессенджеры, хранилище, виджеты, трафик, пользователей,
сайт, рассылки, промоакции и партнёрку. Выдать больше, чем собирался, легко.
У нас роль — сущность (ADR-049): набор прав, который выдаётся целиком и правится
в одном месте. Право сужается до курса, а контакты закрываются отдельным правом,
не связанным с правом работать с человеком.
И одна деталь, которую стоит назвать: **куратор по умолчанию видит только своих**
учеников. У GetCourse наоборот — по умолчанию всех, включая чужие ответы, а «только
своих» включается галочкой в каждом тренинге отдельно. Безопасное поведение должно
быть тем, которое получается само.
## Оформление переживает обновление
Обычный способ дать школе менять вид — задокументировать классы вёрстки. Мы этого
не делаем, и это возражение по существу.
Разметка собрана из утилитарных классов. Объявить их публичными — значит запретить
себе менять вёрстку навсегда: любая перестановка сломает оформление у всех, кто его
настроил. И сломает **молча**: CSS не падает при неверном селекторе, он просто
перестаёт применяться. Ошибки в логах не будет, письмо придёт от клиента через месяц.
Поэтому наружу объявлены два намеренных слоя:
- **[переменные оформления](/appearance/variables/)** — 84 публичных имени, которые мы
обязуемся не переименовывать. Одна строка `--brand` перекрашивает школу целиком,
включая тёмную тему;
- **[якоря](/appearance/anchors/)** — стабильные атрибуты на ключевых элементах, для
случаев «уберите тень у карточки курса».
Внутреннюю разметку при этом мы меняем свободно — и именно поэтому обещание
«не сломается при обновлении» чего-то стоит.
## Данные забираются целиком
Обещание «нет вендор-лока» проверяется одним вопросом: как выглядит уход.
У нас: база на вашем сервере, доступ к PostgreSQL у вас, плюс выгрузка школы одним
архивом, включая содержимое курсов и файлы. У GetCourse выгрузка идёт по частям
и упирается в ту самую квоту 100 запросов за 2 часа: база в десятки тысяч человек
выгружается часами.
## Чего у нас нет
Самый ценный абзац страницы. Без него это буклет, а не сравнение.
**Работающего API нет.** Спроектировано подробно, реализация назначена после
ближайшего этапа. Сегодня по нему нельзя написать интеграцию.
**Продаж нет.** Ни продуктов, ни тарифов, ни заказов, ни приёма платежей. Это
следующий крупный этап. Школа, которой нужно продавать завтра, сегодня продавать
на этом не сможет.
**Рассылок и сценариев нет.** Спроектированы, не написаны.
**Вебинаров нет.**
**Якорей оформления нет ни одного.** Переменные работают, якоря появятся вместе
с ближайшими экранами.
**Приложений в App Store и Google Play не будет никогда.** Не «пока нет» — не будет
(ADR-053). Для коробки это тупик: одна установка — одна школа, значит каждой школе
понадобилось бы своё приложение со своим названием, а это сотни публикаций и сотни
ревью, плюс аккаунт разработчика и ежегодные платежи на покупателе. Вместо этого
кабинет ставится на домашний экран как PWA и открывается на весь экран, а для тех,
кто живёт в Telegram, есть отдельная оболочка. Обе показывают один и тот же кабинет.
**Зрелости.** GetCourse работает десять лет, на нём тысячи школ и найдены тысячи
краевых случаев. У нас первая установка на живой сервер прошла в августе 2026
и дала девять находок. Это не то, что чинится обещанием.
## Что дальше
- [Установка](/start/install/) — что нужно от сервера и как поставить.
- [Проект API](/api/) — что спроектировано, с честной пометкой о состоянии.
- [Обновления](/changelog/) — что изменилось и когда появится остальное.
---
# Установка
Адрес: https://docs-school.sersidteh.ru/start/install/
Состояние: написано наполовину.
Страница для того, кто ставит коробку на сервер. Она честнее обычной инструкции
в одном: установка **дважды проходила на живом сервере**, и всё, что там сломалось,
описано здесь, а не сглажено.
Главное правило: **чек-лист ниже проходится до установки.** Каждый его пункт стоит
десяти минут, а найденный после установки — нескольких часов.
## Что нужно от сервера
| | Минимум | Комфортно |
|---|---|---|
| Ядра | 2 | 4 |
| Память | 4 ГБ | 8 ГБ |
| Свободный диск | 20 ГБ | 40 ГБ |
| ОС | Ubuntu 22.04 / 24.04, Debian 12 | — |
| Docker | 24+ с плагином compose v2 | 29+ |
**Память — про сборку, а не про работу.** Работающая установка укладывается примерно
в 1,5 ГБ. Сборка образа съедает 2–3 ГБ разом: если на сервере уже что-то живёт,
сборка на нём — самый быстрый способ уронить соседей.
## Чек-лист до установки
### 1. Время синхронизировано
```bash
timedatectl
```
Нужно `System clock synchronized: yes`. Это не формальность: одноразовые коды
двухфакторной защиты ломаются при расхождении больше 30 секунд — **владелец
не сможет войти в собственную админку**. Плюс от часов сервера считаются сроки
доступа и отложенные события, а Let's Encrypt не выпустит сертификат при заметном
расхождении.
**Синхронизация может быть настроена и при этом не работать.** На сервере первой
установки служба была активна, а стандартные серверы времени с этой машины
не отвечали вовсе. Лечится указанием доступного:
```bash
mkdir -p /etc/systemd/timesyncd.conf.d
printf '[Time]\nNTP=time.cloudflare.com\n' > /etc/systemd/timesyncd.conf.d/10-reachable-ntp.conf
systemctl restart systemd-timesyncd
timedatectl timesync-status
```
Часовой пояс сервера при этом значения не имеет: приложение работает в UTC
и показывает даты в поясе школы. Обязательна именно синхронность.
### 2. Место и память
```bash
df -h /
free -h
```
20 ГБ свободных. И решите здесь же, собирается образ на этом сервере (нужно ещё
3 ГБ памяти) или переносится готовым с другой машины.
### 3. Порты
```bash
ss -ltnp | grep -E ':(80|443|5432|6379|3000)\b'
```
- **80 и 443** нужны, если установка ставит свой прокси. Заняты чужим прокси —
это отдельный сценарий, см. ниже.
- **5432 и 6379** наружу не нужны вообще: PostgreSQL и Redis живут во внутренней
сети Docker и портов на хост не публикуют. Если 5432 занят чужой базой — это
нам не мешает.
### 4. Домен
A-запись домена должна указывать на этот сервер **до** установки: без этого
сертификат не выпустится.
```bash
getent hosts school.example.com
curl -s https://ifconfig.me
```
Два адреса должны совпасть. Домен за проксирующим DNS или CDN — выпуск сертификата
пойдёт иначе, и это надо решить заранее, а не в момент установки.
### 5. Исходящая связь
```bash
curl -s -o /dev/null -w '%{http_code}\n' https://api.resend.com
timeout 6 bash -c ' **Отзыв останавливает создание нового, а не работу созданного.**
Уже выданный сертификат не аннулируется. Уже принятые ответы остаются на месте
и остаются видны куратору. Прогресс сохраняется — если доступ выдадут снова,
ученик продолжит с того места, где остановился, а не с нуля.
Причина та же, что и в других местах продукта: тихая автоматическая отмена создаёт
ложное чувство порядка, а на деле люди откатывают её не разбираясь.
## Почему урок закрыт
Ответ на этот вопрос даёт **тот же движок**, который показывает причину ученику.
Не вторая реализация «для админки» — одна логика, а не две. Иначе в двух местах
она однажды разойдётся, и разбирать придётся не доступ ученика, а расхождение
между экранами.
Причины, которые он различает:
| Причина | Что означает |
|---|---|
| Урок не опубликован | Автор его ещё не выпустил; правила доступа тут ни при чём |
| Нет доступа к курсу | Записи о доступе не существует |
| Доступ отозван | Запись есть, доступ закрыт |
| Доступ заморожен | Приостановлен, отсчёт срока остановлен |
| Срок доступа истёк | Дата окончания прошла |
| Откроется по дате | Правило «к моменту», дата известна и показывается |
| Откроется через N дней | Правило «через N дней от старта», дата считается от старта этого ученика |
| Условие не выполнено | Показывается, **какое именно** условие и что нужно сделать |
Последняя строка — самая полезная: ответ не «закрыто», а «нужно сдать урок такой-то».
## Индивидуальное исключение
Одному человеку можно открыть урок в обход правила. Это отдельное действие,
и оно **записывается**: кто открыл, когда, кому и какой урок.
Метода «показать урок, минуя правило» без следа не существует — ни в интерфейсе,
ни в API. Любое расширение доступа оставляет запись, и это принципиально:
без неё через месяц никто не помнит, почему у одного ученика курс шёл иначе.
---
# Ученики
Адрес: https://docs-school.sersidteh.ru/guide/students/
Состояние: страница ещё не написана.
## Поиск и фильтры
*Как найти человека и как сохранить фильтр сегментом.*
## Профиль
*Что видно про человека на одном экране.*
## Потоки и группы
*Перенос между потоками и что при этом меняется.*
## Персональные данные
*Экспорт по требованию субъекта, обезличивание, журнал согласий.*
---
# Продажи
Адрес: https://docs-school.sersidteh.ru/guide/sales/
Состояние: этого ещё нет в продукте.
**Продаж в продукте ещё нет.** Ни продуктов, ни тарифов, ни заказов, ни приёма
платежей, ни возвратов, ни чеков. Это следующий крупный этап разработки.
Описывать их как работающие мы не будем: страница, описывающая несуществующее, —
это тот же дефект, что «функция объявлена, а вызова нет», только в документации,
где его не поймает тест.
## Что уже решено
Устройство спроектировано подробно, и решения на него уже приняты — они не изменятся
от того, что код ещё не написан:
- **Продукт ≠ тариф.** Продукт — то, что получает ученик. Тариф — условия продажи:
набор продуктов, цена, срок доступа, правила. Один продукт продаётся несколькими
тарифами, и это и есть тарифная сетка.
- **Заказ ≠ покупка.** Заказ — намерение и деньги. Покупка — факт выданного доступа.
Заказ может быть оплачен, а доступ выдан позже или отозван.
- **Деньги — целые числа в копейках**, всегда парой с кодом валюты. Никаких дробных:
у валют разный порядок, и число без кода валюты бессмысленно.
- **Состояние платежа берётся повторным запросом к провайдеру**, а не из тела
уведомления: у ЮKassa подписи уведомлений нет вообще, и тело можно подделать.
- **Идемпотентность с обеих сторон.** Повтор уведомления не выдаёт доступ дважды,
повтор запроса не создаёт второй платёж.
## Что делать сегодня
Доступ выдаётся руками — см. [Доступы](/guide/access/). Это не заглушка: тем же
путём переносят учеников с другой платформы.
Приём оплаты — на стороне вашего лендинга или платёжного сервиса, доступ после
оплаты выдаётся вручную или, когда появится API, автоматически.
## Где следить
Раздел [Обновления](/changelog/) — там будет сказано, когда это появится.
Спроектированный состав операций виден в [Проекте API](/api/reference/kommerciya/),
с той же пометкой: это замысел, а не работающий код.
---
# Рассылки
Адрес: https://docs-school.sersidteh.ru/guide/messaging/
Состояние: этого ещё нет в продукте.
**Рассылок в продукте ещё нет.** Ни писем, ни сообщений в мессенджеры, ни шаблонов,
ни статистики доставки. Модуль спроектирован, код не написан.
## Что уже решено
Одно правило стоит знать заранее, потому что оно определяет, как рассылки будут
устроены, и потому что его нарушают чаще всего:
> **Проверка согласий и отписок происходит в движке отправки, а не в интерфейсе.**
Это значит, что послать маркетинговое сообщение отписавшемуся человеку будет нельзя
**ниоткуда**: ни из админки, ни из сценария, ни по API, ни с полными правами.
Проверяется согласие на рассылки этой категории, список подавления и время суток
в поясе получателя.
Защищает это не только человека, но и репутацию домена школы: одна рассылка по всей
базе без учёта отписок стоит доставляемости на месяцы вперёд.
Остальное решённое:
- **категории подписок** — отписка от «новостей» не отписывает от «оплачено, вот доступ»;
- **транспорты подключаются адаптерами**: почта, Telegram, уведомление в кабинете,
дальше SMS и мессенджеры по той же схеме;
- **движок рассылок внутри коробки**, наружу отдаётся только транспорт;
- **закрытый исходящий SMTP — норма**, и это выяснилось на первой же установке:
у многих хостеров порты 25, 465, 587 и 2525 закрыты по умолчанию. Провайдер,
принимающий письма по HTTPS, для коробки надёжнее.
## Что делать сегодня
Транзакционные письма продукта — приглашение, восстановление доступа — работают:
без них не работал бы вход. Рассылок по базе нет.
## Где следить
[Обновления](/changelog/). Спроектированный состав операций —
в [Проекте API](/api/reference/crm-segmenty-soobshheniya/).
---
# Сценарии
Адрес: https://docs-school.sersidteh.ru/guide/scenarios/
Состояние: этого ещё нет в продукте.
**Сценариев в продукте ещё нет.** Это самый сложный модуль, он спроектирован,
код не написан.
## Что уже решено
**Модель.** Сценарий — граф из узлов. Запуск — конкретный человек, идущий по графу.
Позиция — на каком узле он сейчас и когда следующий шаг.
**Типы узлов:** триггер (регистрация, оплата, вход в сегмент, открытие урока, ответ
на задание, посещение вебинара, ручной запуск), действие (отправить сообщение,
поставить тег, выдать или забрать доступ, добавить в группу, вызвать вебхук),
условие, задержка, ожидание события с таймаутом, завершение.
**Исполнение — на очередях.** Каждый шаг ставит следующий отложенной задачей.
Перезапуск сервера не теряет запущенные сценарии, и это не бонус, а требование:
сценарий с задержкой в трое суток иначе не существует.
**Счётчики на узлах с первого дня.** Сколько человек прошло, сколько сейчас ждёт,
сколько отвалилось. Без этого редактор бесполезен для работы с воронкой: видно,
что сценарий есть, и не видно, где он не работает.
**Трассировка конкретного человека.** Полный путь по графу: где он сейчас, что
произошло на каждом узле, почему он застрял. Доступна и в интерфейсе, и по API —
чтобы можно было построить свой мониторинг воронок.
## Условия здесь не такие, как в доступе к уроку
Важная деталь, которую стоит знать заранее: **это два разных языка условий**,
и общего кода у них нет.
- **Условия доступа к уроку** — только «и», без вложенности и отрицания.
Цена ошибки: заплативший ученик не попал в урок.
- **Условия сегмента и ветвления сценария** — «и» и «или» с одним уровнем
вложенности, отрицание — свойство условия. Цена ошибки: неверная рассылка,
и число попавших видно до отправки.
## Где следить
[Обновления](/changelog/). Спроектированный состав операций —
в [Проекте API](/api/reference/scenarii-avtomatizacii/).
---
# Проект API
Адрес: https://docs-school.sersidteh.ru/api/
**Это проектная спецификация. Работающего API в продукте ещё нет.**
Маршрутов `/v1/*` в коде ноль. Реализация назначена после среза 2 (ADR-054). Всё, что
в этом разделе, описывает **замысел**, а не поведение работающей системы.
Что из этого следует для вас:
- **Оценить, закроет ли платформа вашу задачу, — можно.** Состав операций, модель прав,
формат, лимиты, устройство вебхуков спроектированы и здесь описаны.
- **Писать интеграцию по этому разделу — нельзя.** Из 226 операций у 60 адрес выведен
из сокращённой записи спецификации, а не написан в ней прямо: он может оказаться другим.
Такие операции помечены на своих страницах словами «адрес предположительный».
- **Тел запросов и состава полей в ответах здесь нет.** Их неоткуда взять: по ADR-057
они выводятся из zod-валидаторов, а валидаторов пока не существует. Вместо
правдоподобного примера стоит пометка «чего здесь нет» — придуманный пример скопируют
в чужой код, и он будет неверным.
Машинная спецификация лежит на `/openapi.draft.json`. Адрес `/openapi.json` **не занят
намеренно**: это конвенция, и агент, скачавший файл по такому адресу, обоснованно считает,
что перед ним рабочее API.
## Что уже описано по-настоящему
Не всё в этом разделе — черновик. Три вещи описаны полностью и не изменятся:
- **[Формат ошибки](/api/errors/)** — тело, коды, `request_id`. Задан в спецификации целиком.
- **[Формат конверта вебхука](/api/webhooks/)** — один на все события, включая `previous`
и `related`. Это принципиальное решение, а не деталь: у GetCourse три несовместимые
схемы, и единый обработчик там написать нельзя.
- **[Каталог событий](/api/events/)** — 82 события. Имена событий и есть контракт;
меняться будет состав `data.object`, а не имена.
## Принцип паритета
Всё, что можно сделать руками в интерфейсе, можно сделать по API. Интерфейс не имеет
привилегированного доступа: он вызывает те же сервисы, что и API-роут. Операция,
доступная только из админки, — это ошибка архитектуры, а не особенность.
Отсюда и объём: одно API на всё, а не «классическое» и «новое» с разной аутентификацией
и разным форматом тела.
## Когда это станет настоящим
Когда появятся маршруты и валидаторы:
1. спецификация начнёт собираться из кода, а не из проектного документа;
2. пометки «адрес предположительный» исчезнут — либо адрес подтвердится, либо изменится;
3. файл переедет с `/openapi.draft.json` на `/openapi.json`;
4. раздел будет называться «API».
**Адреса страниц при этом не изменятся** — на них уже можно ссылаться.
---
# Аутентификация
Адрес: https://docs-school.sersidteh.ru/api/auth/
Состояние: страница ещё не написана.
## Токен в заголовке
*Заголовок `Authorization: Bearer …` и почему не параметр в теле.*
## Боевой и тестовый
*Префиксы `lms_live_` и `lms_test_`: зачем они нужны сканеру секретов.*
## Действие от лица пользователя
*Заголовок `X-On-Behalf-Of` и что при этом попадает в журнал аудита.*
## Ссылка автовхода
*Одноразовая ссылка в кабинет: срок жизни, привязка к браузеру, для кого не работает.*
---
# Ключи
Адрес: https://docs-school.sersidteh.ru/api/keys/
Состояние: страница ещё не написана.
## Где заводятся
*Раздел настроек школы. Не по заявке нам — это коробка на вашем сервере.*
## Что видно в списке
*Название, кто создал, когда использовался, с каких адресов, сколько запросов за сутки.*
## Значение показывается один раз
*В базе только хеш. Что делать, если ключ потерян.*
## Отзыв
*Немедленный, одной кнопкой.*
---
# Права
Адрес: https://docs-school.sersidteh.ru/api/permissions/
Состояние: страница ещё не написана.
> **Эту страницу пока не из чего написать.** В `03-data/api-spec.md` §3.2 был список
> из примерно сорока прав вида `users:read`. ADR-054 его **отменил**: язык прав один,
> тот же `can()`, что у ролей человека. Единого перечня прав в коде ещё нет — он появится
> вместе с ADR-049. Пока перечня нет, любой список на этой странице был бы третьим
> источником правды к двум уже разошедшимся.
## Один язык прав
*Почему у API нет отдельного списка `users:read`-вида и что вместо него.*
## Сужение до курсов
*Ключ лендинга умеет выдавать доступ только к тому курсу, который на этом лендинге продаётся.*
## Что вернётся, если права не хватило
*Код ответа и то, какого именно права не хватило.*
---
# Формат
Адрес: https://docs-school.sersidteh.ru/api/format/
Состояние: страница ещё не написана.
## Базовый адрес
*У каждой школы свой: это коробка, общего адреса нет.*
## Тело запроса и ответа
*JSON в UTF-8. Никакого base64 внутри form-urlencoded.*
## Именование
*Множественное число, `snake_case`, вложенность не глубже двух уровней.*
## Идентификаторы
*Префиксные и типизированные: `ord_…` это заказ, `pay_…` — платёж. Ошибка «передал не тот ID» видна сразу.*
## Даты
*ISO 8601 с таймзоной, всегда.*
## Деньги
*Целое число в минорных единицах и код валюты — всегда парой.*
## Конверт ответа
*Объект отдаётся напрямую, список — с курсором.*
---
# Пагинация, фильтры, сортировка
Адрес: https://docs-school.sersidteh.ru/api/pagination/
Состояние: страница ещё не написана.
## Курсор вместо смещения
*Почему не `offset`: при вставке записей во время обхода объекты дублируются или теряются.*
## Фильтры
*Единый синтаксис `поле[оператор]=значение` для всех ресурсов.*
## Фильтр по сегменту
*Сегмент, собранный в интерфейсе, сразу доступен как фильтр API — логику сегментации не надо повторять у себя.*
## Разворачивание связей
*Как избавиться от N+1 запросов.*
## Выбор полей
*Отдать интеграции ровно то, что ей нужно.*
---
# Лимиты
Адрес: https://docs-school.sersidteh.ru/api/limits/
Состояние: страница ещё не написана.
## Значения по умолчанию
*Чтение, запись, массовые операции, экспорт.*
## Заголовки
*Сколько осталось и когда сбросится — в каждом ответе.*
## Что делать при 429
*Заголовок `Retry-After` и почему его надо уважать.*
## Как поменять
*Это ваш сервер: лимиты — параметр установки.*
---
# Ошибки
Адрес: https://docs-school.sersidteh.ru/api/errors/
Состояние: страница ещё не написана.
## Как выглядит ошибка
*Код HTTP отражает результат, тело — детали. Никаких `200 OK` с `success: false` внутри.*
## Полный список кодов
*Что означает каждый и что с ним делать клиенту.*
## Несколько ошибок сразу
*Массив ошибок валидации вместо «исправляйте по одной».*
## Идентификатор запроса
*Есть в каждом ответе, включая успешные. По нему находится полная трассировка.*
---
# Идемпотентность
Адрес: https://docs-school.sersidteh.ru/api/idempotency/
Состояние: страница ещё не написана.
## Зачем
*Повтор запроса не должен создавать второй заказ и списывать деньги дважды.*
## Как пользоваться
*Заголовок `Idempotency-Key`, срок хранения, признак повтора в ответе.*
## Тот же ключ с другим телом
*Почему это ошибка клиента, а не повод создать новый объект.*
## Идемпотентность на приёме
*Повторный вебхук не должен выдавать доступ дважды.*
---
# Каталог ресурсов
Адрес: https://docs-school.sersidteh.ru/api/reference/
Состояние: собрано из кода (openapi.draft.json).
Всего операций: **226** в 9 разделах. Машинная спецификация — [/openapi.draft.json](/openapi.draft.json).
> ⚠️ **Из 226 операций у 60 адрес предположительный** — он выведен из сокращённой записи спецификации, а не написан в ней прямо. Такие операции помечены на своих страницах. Именно поэтому раздел называется «Проект API», а файл — `openapi.draft.json`.
> **У 93 операций описание выведено из имени, у 18 его пока нет вовсе.** Спецификация написана каталогом путей: прозы для них там не было. Где назначение следует из имени — фраза выведена по правилу «что операция возвращает или что меняет», и ни слова о том, как она это делает. Где не следует — описание пишется отдельно, и до тех пор строки нет. **Адреса и параметры от этого не изменятся.**
| Раздел | Операций |
|---|---|
| [Пользователи и доступ](/api/reference/polzovateli-i-dostup/) | 31 |
| [Обучение](/api/reference/obuchenie/) | 57 |
| [Коммерция](/api/reference/kommerciya/) | 45 |
| [CRM, сегменты, сообщения](/api/reference/crm-segmenty-soobshheniya/) | 25 |
| [Сценарии (автоматизации)](/api/reference/scenarii-avtomatizacii/) | 12 |
| [Вебинары](/api/reference/vebinary/) | 15 |
| [Сайт и файлы](/api/reference/sajt-i-fajly/) | 17 |
| [Аналитика](/api/reference/analitika/) | 5 |
| [Служебное](/api/reference/sluzhebnoe/) | 19 |
## Чего в справочнике ещё нет
Сказать это прямо честнее, чем показать пустое место.
**Работающего API нет.** По ADR-057 справочник выводится из OpenAPI, а OpenAPI — из zod-валидаторов на эндпоинтах. Публичного API в продукте пока не существует: маршрутов `/v1/*` нет ни одного, реализация назначена после среза 2 (ADR-054). Выводить поля не из чего, и проверить адреса тоже не обо что.
Чтобы справочник не был при этом пустым, пути и назначение операций собраны машинным разбором проектной спецификации `03-data/api-spec.md`. Что из этого следует:
- **пути, методы и коды ответа** — это то, что спроектировано, и им можно верить как проекту, но не как работающему коду;
- **60 адресов выведены эвристикой** из сокращений вида «`POST, PATCH, DELETE`» и помечены на своих страницах словами «адрес предположительный»;
- **у 93 операций описание выведено из имени** по правилу «что возвращает или что меняет» — такая фраза не содержит ни одного утверждения о поведении, которого нет в спецификации, и помечена `x-lms-derived-summary`;
- **у 18 операций описания нет вовсе** — из имени оно не следует (`replay`, `pause`, `grant-retry`), а угадывать поведение мы не станем;
- **тела запросов и ответов** не показаны нигде — вместо выдуманного примера стоит пометка «чего здесь нет»;
- **форма ошибки** описана полностью и по-настоящему: она задана в спецификации целиком, см. [Ошибки](/api/errors/).
Как только появятся валидаторы, `openapi.json` начнёт собираться из них, а эти страницы пересоберутся сами — их адреса и заголовки не изменятся.
---
# Вебхуки
Адрес: https://docs-school.sersidteh.ru/api/webhooks/
Состояние: страница ещё не написана.
## Подписка
*Адрес, список событий, маска, секрет.*
## Формат конверта
*Один для всех событий. Что было до изменения и какие объекты связаны.*
## Подпись
*HMAC-SHA256 по сырому телу до разбора JSON и толерантность по времени.*
## Доставка и ретраи
*Шесть попыток за сутки, журнал доставок, повтор из интерфейса и по API.*
## Переигрывание пропущенного
*Если приёмник лежал сутки — не массовая выгрузка, а пересборка доставок из журнала событий.*
## Порядок и дубликаты
*Порядок не гарантируется, доставка как минимум один раз. Что из этого следует обработчику.*
---
# Каталог событий
Адрес: https://docs-school.sersidteh.ru/api/events/
Состояние: собрано из кода (openapi.draft.json (x-lms-events)).
Событий: **82** в 9 группах.
Один справочник на три применения: событие приходит в вебхук, запускает сценарий и лежит в журнале `/v1/events`. Не три списка, которые разойдутся, а один.
Подписаться можно на группу маской — `order.*`, `submission.*` — или на всё сразу: `*`.
## Пользователи
- `user.created`
- `user.updated`
- `user.deleted`
- `user.anonymized`
- `user.tagged`
- `user.untagged`
- `user.role_granted`
- `user.role_revoked`
- `user.entered_segment`
- `user.left_segment`
- `user.consent_given`
- `user.consent_revoked`
- `user.identity_linked`
## Группы
- `group.member_added`
- `group.member_removed`
## Обучение
- `enrollment.created`
- `enrollment.expired`
- `enrollment.revoked`
- `enrollment.frozen`
- `enrollment.curator_changed`
- `lesson.opened`
- `lesson.completed`
- `video.progress`
- `video.completed`
- `course.completed`
- `assignment.deadline_approaching`
- `submission.created`
- `submission.accepted`
- `submission.rejected`
- `submission.commented`
- `quiz.attempted`
- `quiz.passed`
- `quiz.failed`
- `certificate.issued`
## Коммерция
- `order.created`
- `order.updated`
- `order.paid`
- `order.partially_paid`
- `order.cancelled`
- `order.item_added`
- `payment.created`
- `payment.succeeded`
- `payment.failed`
- `payment.refunded`
- `receipt.fiscalized`
- `receipt.failed`
- `purchase.granted`
- `purchase.revoked`
- `purchase.expiring_soon`
- `purchase.expired`
- `subscription.created`
- `subscription.charged`
- `subscription.payment_failed`
- `subscription.cancelled`
- `promo.redeemed`
## Сообщения
- `message.queued`
- `message.sent`
- `message.delivered`
- `message.opened`
- `message.clicked`
- `message.bounced`
- `message.complained`
- `message.opted_out`
- `campaign.started`
- `campaign.finished`
## Сценарии
- `scenario.run_started`
- `scenario.run_completed`
- `scenario.run_failed`
- `scenario.node_executed`
## Вебинары
- `webinar.registered`
- `webinar.session_started`
- `webinar.attended`
- `webinar.left`
- `webinar.offer_clicked`
- `webinar.session_finished`
- `webinar.comment_created`
## Сайт
- `form.submitted`
- `page.visited`
## Служебное
- `webhook.delivery_failed`
- `import.completed`
- `export.completed`
- `license.check_failed`
## Чего здесь ещё нет
**Состава поля `data.object` у каждого события.** Форма конверта описана в разделе [Вебхуки](/api/webhooks/) и она общая для всех событий — это главное. А что именно лежит внутри `object` для `order.paid` и чем оно отличается от `submission.created`, сказать пока нельзя: событий в коде нет, перечень собран разбором проектной спецификации.
---
# Песочница
Адрес: https://docs-school.sersidteh.ru/api/sandbox/
Состояние: страница ещё не написана.
## Как включить
*Ключ с префиксом `lms_test_`.*
## Что меняется
*Платежи, сообщения, вебинары, вебхуки.*
## Чего это не заменяет
*Отдельного стенда. Данные те же самые.*
---
# Аналитика
Адрес: https://docs-school.sersidteh.ru/api/reference/analitika/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **5**.
## GET /v1/analytics/courses/{id}
доходимость по урокам
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/analytics/courses/crs_01HQZX41B7RC9S' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/analytics/funnel
конверсии между сегментами
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/analytics/funnel' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/analytics/query
произвольный запрос по преднастроенным метрикам
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/analytics/query' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/analytics/sales
оборот, оплаты, средний чек по периодам
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/analytics/sales' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/analytics/traffic
источники, UTM, окупаемость канала
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/analytics/traffic' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# CRM, сегменты, сообщения
Адрес: https://docs-school.sersidteh.ru/api/reference/crm-segmenty-soobshheniya/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **25**.
> у 10 описание выведено из имени операции, у 1 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## POST /v1/bulk-actions
массовое действие по сегменту
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/bulk-actions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/bulk-actions/{id}
статус выполнения выдать доступ / забрать / добавить в группу / поставить тег / запустить сценарий / отправить рассылку — всё по сегменту одним вызовом
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/bulk-actions/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/campaigns
Список рассылок школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/campaigns' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/campaigns
создать рассылку
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/campaigns' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/campaigns/{id}/cancel
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/campaigns/{id}/cancel' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/campaigns/{id}/send
запустить
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/campaigns/{id}/send' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/campaigns/{id}/stats
доставки, открытия, клики, отписки
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/campaigns/{id}/stats' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/message-templates
Список шаблонов сообщений школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/message-templates' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/message-templates
Создать шаблон сообщения. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/message-templates' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/message-templates/{id}
Удалить шаблон сообщения. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/message-templates/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/message-templates/{id}
Изменить шаблон сообщения. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/message-templates/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/messages
журнал отправок со статусами доставки
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/messages' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/messages
отправить одно сообщение { user_id, transport, template_id | body, variables }
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/messages' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/segments
Список сегментов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/segments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/segments
Создать сегмент. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/segments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/segments/{id}
Удалить сегмент. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/segments/seg_01HQZX8D9JTS4B' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/segments/{id}
Изменить сегмент. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/segments/seg_01HQZX8D9JTS4B' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/segments/{id}/count
сколько человек сейчас в сегменте
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/segments/seg_01HQZX8D9JTS4B/count' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/segments/{id}/members
кто в сегменте (курсорная пагинация)
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/segments/seg_01HQZX8D9JTS4B/members' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/segments/preview
посчитать сегмент, не сохраняя его
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/segments/preview' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/subscription-categories
категории рассылок
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/subscription-categories' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/suppressions
глобальный список подавления
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/suppressions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/suppressions
добавить адрес вручную
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/suppressions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/suppressions/{id}
Удалить запись списка подавления. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/suppressions/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/users/{id}/opt-out
отписать от категории
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/opt-out' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Коммерция
Адрес: https://docs-school.sersidteh.ru/api/reference/kommerciya/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **45**.
> у 24 описание выведено из имени операции, у 2 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## GET /v1/offers
Список тарифов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/offers' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/offers
Создать тариф. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/offers' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/offers/{id}
Удалить тариф. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/offers/off_01HQZX7QGVPR6A' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/offers/{id}
Изменить тариф. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/offers/off_01HQZX7QGVPR6A' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/offers/{id}/items
состав тарифа
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/offers/off_01HQZX7QGVPR6A/items' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/offers/{id}/items
Создать позицию тарифа. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/offers/off_01HQZX7QGVPR6A/items' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/orders
Список заказов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/orders' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/orders
Создать заказ. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/orders' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/orders/{id}
Заказ по идентификатору. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/orders/ord_01HQZX68HKYJ1X' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/orders/{id}
Изменить заказ. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/orders/ord_01HQZX68HKYJ1X' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/orders/{id}/cancel
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/orders/ord_01HQZX68HKYJ1X/cancel' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/orders/{id}/items
добавить позицию
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/orders/ord_01HQZX68HKYJ1X/items' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/orders/{id}/items/{itemId}
Удалить позицию заказа. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`, `itemId`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/orders/ord_01HQZX68HKYJ1X/items/{itemId}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/orders/{id}/mark-paid
отметить оплаченным вручную (для оффлайн-оплат)
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/orders/ord_01HQZX68HKYJ1X/mark-paid' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/orders/{id}/payment-link
ссылка на страницу оплаты
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/orders/ord_01HQZX68HKYJ1X/payment-link' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/payment-plans
планы рассрочки
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/payment-plans' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/payments
Список платежей школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/payments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/payments
создать платёж
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/payments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/payments/{id}
Платёж по идентификатору. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/payments/pay_01HQZX6TSCZL8Y' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/payments/{id}/receipts
фискальные чеки по платежу
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/payments/pay_01HQZX6TSCZL8Y/receipts' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/payments/{id}/refund
полный или частичный возврат
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/payments/pay_01HQZX6TSCZL8Y/refund' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/products
Список продуктов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/products' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/products
Создать продукт. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/products' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/products/{id}
Удалить продукт. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/products/prd_01HQZX7B4FMN2Z' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/products/{id}
Изменить продукт. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/products/prd_01HQZX7B4FMN2Z' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/promo-codes
Список промокодов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/promo-codes' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/promo-codes
сгенерировать пачку кодов
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/promo-codes' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/promo-codes/{code}/validate
проверить применимость к заказу
**В пути:** `code`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/promo-codes/{code}/validate' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/promo-redemptions
журнал применений
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/promo-redemptions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/promos
Список промоакций школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/promos' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/promos
Создать промоакцию. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/promos' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/promos/{id}
Удалить промоакцию. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/promos/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/promos/{id}
Изменить промоакцию. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/promos/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/purchases
выданные доступы
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/purchases' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/purchases
выдать доступ вручную
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/purchases' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/purchases/{id}
отозвать
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/purchases/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/receipts
чеки: аванс, зачёт, возврат, кредит
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/receipts' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/receipts/{id}/retry
повторить неудавшуюся фискализацию
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/receipts/{id}/retry' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/subscriptions
Список подписок школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/subscriptions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/subscriptions
Создать подписку. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/subscriptions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/subscriptions/{id}
Изменить подписку. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/subscriptions/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/subscriptions/{id}/cancel
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/subscriptions/{id}/cancel' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/subscriptions/{id}/charge
принудительное списание
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/subscriptions/{id}/charge' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/tax-rates
ставки налога (международная поставка)
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/tax-rates' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/tax/calculate
расчёт налога для корзины
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/tax/calculate' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Обучение
Адрес: https://docs-school.sersidteh.ru/api/reference/obuchenie/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **57**.
> у 30 описание выведено из имени операции, у 3 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## GET /certificates/{number}
публичная проверка, без авторизации
**В пути:** `number`
**Запрос:**
```bash
curl -X GET 'https://school.example.com/certificates/{number}' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/assignments
Список заданий школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/assignments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/assignments
Создать задание. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/assignments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/assignments/{id}
Удалить задание. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/assignments/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/assignments/{id}
Изменить задание. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/assignments/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/certificate-templates
Список шаблонов сертификатов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/certificate-templates' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/certificate-templates
Создать шаблон сертификата. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/certificate-templates' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/certificate-templates/{id}
(пока не выдано)
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/certificate-templates/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/certificate-templates/{id}
Изменить шаблон сертификата. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/certificate-templates/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/certificates
Список выданных сертификатов. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/certificates' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/certificates
выдать (идемпотентно по паре ученик+курс)
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/certificates' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/certificates/{id}/file
скачать
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/certificates/{id}/file' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/courses
Список курсов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/courses' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/courses
Создать курс. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/courses' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/courses/{id}
Удалить курс. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/courses/crs_01HQZX41B7RC9S' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/courses/{id}
Курс по идентификатору. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/courses/crs_01HQZX41B7RC9S' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/courses/{id}
Изменить курс. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/courses/crs_01HQZX41B7RC9S' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/courses/{id}/publish
публикация / снятие
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/courses/crs_01HQZX41B7RC9S/publish' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/courses/{id}/stats
доходимость, прогресс, воронка по урокам
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/courses/crs_01HQZX41B7RC9S/stats' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/enrollments
кто на каком курсе
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/enrollments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/enrollments
записать на курс (выдать доступ) со streamId дата старта берётся из потока, своя startedAt при этом отклоняется
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/enrollments' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/enrollments/{id}
отозвать доступ
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/enrollments/enr_01HQZX52NAQF7V' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/enrollments/{id}
сменить куратора, продлить, заморозить
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/enrollments/enr_01HQZX52NAQF7V' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/enrollments/{id}/override
индивидуальное исключение доступа
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/enrollments/enr_01HQZX52NAQF7V/override' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/enrollments/{id}/progress
прогресс по всем урокам
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/enrollments/enr_01HQZX52NAQF7V/progress' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/lesson-access/{userId}/{lessonId}
открыт ли урок и ПОЧЕМУ. Возвращает { open, reason, will_open_at, blocked_by } Тот же движок, что и в интерфейсе — одна логика, а не две.
**В пути:** `userId`, `lessonId`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/lesson-access/{userId}/{lessonId}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/lessons
Список уроков школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/lessons' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/lessons
Создать урок. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/lessons' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/lessons/{id}
Удалить урок. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/lessons/{id}
Изменить урок. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/lessons/{id}/access-rule
правило открытия
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T/access-rule' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PUT /v1/lessons/{id}/access-rule
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PUT 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T/access-rule' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/lessons/{id}/content
дерево блоков урока
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T/content' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PUT /v1/lessons/{id}/content
заменить содержимое целиком
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PUT 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T/content' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/lessons/{id}/translations
переводы урока
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T/translations' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PUT /v1/lessons/{id}/translations/{locale}
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`, `locale`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PUT 'https://school.example.com/api/v1/lessons/lsn_01HQZX4G2XVD5T/translations/{locale}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/modules
Список модулей школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/modules' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/modules
Создать модуль. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/modules' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/modules/{id}
Удалить модуль. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/modules/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/modules/{id}
Изменить модуль. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/modules/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/modules/reorder
изменить порядок пачкой
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/modules/reorder' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/quiz-attempts
попытки прохождения
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/quiz-attempts' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/quiz-attempts
зафиксировать попытку
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/quiz-attempts' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/quiz-attempts/{id}/grant-retry
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/quiz-attempts/{id}/grant-retry' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/quizzes
Список тестов школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/quizzes' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/quizzes
Создать тест. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/quizzes' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/quizzes/{id}
Удалить тест. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/quizzes/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/quizzes/{id}
Изменить тест. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/quizzes/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/quizzes/{id}/questions
Список вопросов теста. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/quizzes/{id}/questions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/quizzes/{id}/questions
Создать вопрос теста. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/quizzes/{id}/questions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/quizzes/{id}/questions/{questionId}
Удалить вопрос теста. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`, `questionId`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/quizzes/{id}/questions/{questionId}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/quizzes/{id}/questions/{questionId}
Изменить вопрос теста. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`, `questionId`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/quizzes/{id}/questions/{questionId}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/submissions
ответы на ДЗ, фильтры по статусу и куратору
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/submissions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/submissions
отправить ответ (можно от имени ученика)
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/submissions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/submissions/{id}
Ответ по идентификатору. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/submissions/sub_01HQZX5PDMWG3W' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/submissions/{id}/lock
взять на проверку (защита от коллизии кураторов)
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/submissions/sub_01HQZX5PDMWG3W/lock' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/submissions/{id}/review
принять / отклонить + комментарий + вложения
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/submissions/sub_01HQZX5PDMWG3W/review' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Пользователи и доступ
Адрес: https://docs-school.sersidteh.ru/api/reference/polzovateli-i-dostup/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **31**.
> у 5 описание выведено из имени операции, у 2 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## GET /v1/custom-fields
определения произвольных полей
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/custom-fields' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/custom-fields
Создать произвольное поле. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/custom-fields' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/groups
группы и потоки
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/groups' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/groups
Создать группу. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/groups' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/groups/{id}
только пустую: удаление с составом — потеря данных
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/groups/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/groups/{id}
Группа по идентификатору. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/groups/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/groups/{id}
имя, описание, куратор, дата старта потока
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/groups/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/groups/{id}/members
Список участников группы. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/groups/{id}/members' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/groups/{id}/members
добавить (одного или список)
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/groups/{id}/members' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/groups/{id}/members/{userId}
Удалить участника группы. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`, `userId`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/groups/{id}/members/{userId}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/groups/{id}/transfer
что изменится при переносе в этот поток
**В пути:** `id`
**Параметры:**
- `userId` — Параметр назван в спецификации; тип и обязательность не заданы.
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/groups/{id}/transfer' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/groups/{id}/transfer
перенести ученика в этот поток
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/groups/{id}/transfer' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/identities
способы входа
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/identities' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/identities
привязать Telegram / WhatsApp / соцсеть
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/identities' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/identities/{id}
отвязать
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/identities/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/roles
роли и права
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/roles' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/users
список, фильтры, сегменты
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/users' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/users
создать
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/users' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/users/{id}
мягкое удаление
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/users/{id}
получить (или по email: /v1/users/by-email/{email})
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/users/{id}
изменить
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/users/{id}/activity
лента активности
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/activity' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/users/{id}/anonymize
удаление ПДн по требованию субъекта
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/anonymize' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/users/{id}/consents
журнал согласий
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/consents' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/users/{id}/consents
зафиксировать согласие
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/consents' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/users/{id}/export
выгрузка всех данных субъекта (GDPR Art. 20)
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/export' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/users/{id}/login-link
ссылка автовхода
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/login-link' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/users/{id}/roles
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/roles' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/users/{id}/roles/{role}
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`, `role`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/roles/{role}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/users/{id}/tags
проставить теги
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/tags' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/users/{id}/tags/{tag}
снять тег
**В пути:** `id`, `tag`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/users/usr_01HQZX3M8K4N2P/tags/{tag}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Сайт и файлы
Адрес: https://docs-school.sersidteh.ru/api/reference/sajt-i-fajly/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **17**.
> у 8 описание выведено из имени операции, у 1 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## GET /v1/files
список
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/files' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/files/{id}
Удалить файл. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/files/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/files/{id}
метаданные
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/files/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/files/upload-url
подписанный URL для прямой загрузки в S3
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/files/upload-url' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/form-submissions
заявки с форм
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/form-submissions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/form-submissions
принять заявку с внешнего лендинга (Tilda)
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/form-submissions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/forms
Список форм школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/forms' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/forms
Создать форму. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/forms' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/forms/{id}
Изменить форму. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/forms/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/pages
Список страниц школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/pages' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/pages
Создать страницу. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/pages' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/pages/{id}
Удалить страницу. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/pages/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/pages/{id}
Изменить страницу. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/pages/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PUT /v1/pages/{id}/content
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PUT 'https://school.example.com/api/v1/pages/{id}/content' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/videos
загрузка видео к видеопровайдеру
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/videos' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/videos/{id}
статус обработки, длительность
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/videos/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/videos/{id}/playback-url
подписанная ссылка на воспроизведение
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/videos/{id}/playback-url' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Сценарии (автоматизации)
Адрес: https://docs-school.sersidteh.ru/api/reference/scenarii-avtomatizacii/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **12**.
> у 4 описание выведено из имени операции, у 2 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## GET /v1/scenario-runs
текущие и завершённые запуски
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/scenario-runs' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/scenario-runs/{id}/stop
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/scenario-runs/{id}/stop' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/scenario-runs/{id}/trace
полный путь конкретного человека по графу
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/scenario-runs/{id}/trace' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/scenarios
Список сценариев школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/scenarios' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/scenarios
Создать сценарий. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/scenarios' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/scenarios/{id}
Удалить сценарий. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/scenarios/scn_01HQZX8XKQWU7C' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/scenarios/{id}
Изменить сценарий. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/scenarios/scn_01HQZX8XKQWU7C' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/scenarios/{id}/dry-run
прогон на тестовом пользователе без побочных эффектов
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/scenarios/scn_01HQZX8XKQWU7C/dry-run' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/scenarios/{id}/pause
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/scenarios/scn_01HQZX8XKQWU7C/pause' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/scenarios/{id}/publish
опубликовать версию
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/scenarios/scn_01HQZX8XKQWU7C/publish' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/scenarios/{id}/run
запустить для конкретного пользователя
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/scenarios/scn_01HQZX8XKQWU7C/run' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/scenarios/{id}/stats
счётчики по узлам: вошло, ждёт, отвалилось
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/scenarios/scn_01HQZX8XKQWU7C/stats' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Служебное
Адрес: https://docs-school.sersidteh.ru/api/reference/sluzhebnoe/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **19**.
> у 6 описание выведено из имени операции, у 5 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## GET /v1/audit-log
действия администраторов
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/audit-log' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/events
журнал событий системы
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/events' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/events/{id}
Событие по идентификатору. Фраза выведена из имени операции: в спецификации описания нет.
**В пути:** `id`
**Параметры:**
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/events/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/events/{id}/replay
переиграть событие (пересобрать вебхуки)
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/events/{id}/replay' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/exports
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/exports' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/exports/full
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/exports/full' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/health
состояние системы и очередей
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/health' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/imports
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/imports' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/limits
текущие лимиты и расход
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/limits' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/settings
Настройки школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/settings' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/settings
настройки школы
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/settings' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/webhooks
Список подписок на события. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/webhooks' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webhooks
Создать подписку на события. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
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'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/webhooks/{id}
Удалить подписку на события. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/webhooks/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/webhooks/{id}
Изменить подписку на события. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/webhooks/{id}' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/webhooks/{id}/deliveries
история доставок
**В пути:** `id`
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/webhooks/{id}/deliveries' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `200`, `401`, `403`, `404`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webhooks/{id}/deliveries/{deliveryId}/retry
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`, `deliveryId`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webhooks/{id}/deliveries/{deliveryId}/retry' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webhooks/{id}/replay
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webhooks/{id}/replay' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webhooks/{id}/test
тестовая отправка
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webhooks/{id}/test' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Вебинары
Адрес: https://docs-school.sersidteh.ru/api/reference/vebinary/
Состояние: собрано из кода (openapi.draft.json).
Операций в разделе: **15**.
> у 6 описание выведено из имени операции, у 2 описания пока нет вовсе. Спецификация написана каталогом путей, прозы для них там не было; выдумывать поведение мы не стали. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
## GET /v1/webinar-attendance
досмотр, время присутствия
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/webinar-attendance' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinar-attendance/import
импорт данных досмотра из Bizon365
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinar-attendance/import' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/webinar-messages
чат
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/webinar-messages' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinar-messages
отправить в чат
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinar-messages' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinar-messages/{id}/pin
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinar-messages/{id}/pin' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/webinar-registrations
Список регистраций на вебинары. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/webinar-registrations' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinar-registrations
зарегистрировать
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinar-registrations' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/webinar-sessions
Список запусков вебинаров. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/webinar-sessions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinar-sessions
запланировать запуск
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinar-sessions' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinar-sessions/{id}/finish
_Назначение пока не описано: из имени операции оно не следует, а в спецификации его нет. Описание пишется отдельно._
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinar-sessions/{id}/finish' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinar-sessions/{id}/start
начать
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinar-sessions/{id}/start' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
Вместо `{…}` подставьте идентификатор объекта — про их формат в разделе [Формат](/api/format/#identifikatory).
**Коды ответа:** `201`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## GET /v1/webinars
Список вебинаров школы. Фраза выведена из имени операции: в спецификации описания нет.
**Параметры:**
- `limit` — сколько вернуть, 1…1000, по умолчанию 50
- `cursor` — позиция продолжения из `next_cursor`
- `sort` — сортировка, минус для убывания
- `expand` — развернуть связи
- `fields` — вернуть только эти поля
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X GET 'https://school.example.com/api/v1/webinars' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `401`, `403`, `429`, `500`, `503`.
> **Чего здесь нет:** состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## POST /v1/webinars
Создать вебинар. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X POST 'https://school.example.com/api/v1/webinars' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `201`, `400`, `401`, `403`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## DELETE /v1/webinars/{id}
Удалить вебинар. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X DELETE 'https://school.example.com/api/v1/webinars/web_01HQZX9F5NZV1D' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
## PATCH /v1/webinars/{id}
Изменить вебинар. Фраза выведена из имени операции: в спецификации описания нет.
> ⚠️ **Адрес предположительный.** В спецификации он не написан прямо — он выведен из сокращённой записи каталога («`POST, PATCH, DELETE`»). Когда API будет реализовано, адрес может оказаться другим. Не закладывайтесь на него в коде.
**В пути:** `id`
**Параметры:**
- `Idempotency-Key` — заголовок, защита от двойного выполнения
- `X-On-Behalf-Of` — заголовок, действие от лица пользователя
**Запрос:**
```bash
curl -X PATCH 'https://school.example.com/api/v1/webinars/web_01HQZX9F5NZV1D' \
-H 'Authorization: Bearer lms_live_a8f3c1e9d2b74a5f8e0c1d3b5a7f9e2c' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1e2a34-9c8b-4d7e-a1f0-3b5c7d9e1f2a' \
-H 'Accept: application/json'
```
**Коды ответа:** `200`, `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`, `503`.
> **Чего здесь нет:** тело запроса и состав полей ответа. Публичного API в продукте пока нет, выводить состав полей не из чего — см. [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net).
Как выглядит ошибка и что делать с каждым кодом — в разделе [Ошибки](/api/errors/).
---
# Оформление
Адрес: https://docs-school.sersidteh.ru/appearance/
Состояние: страница ещё не написана.
## Мы даём контракт, а не доступ к внутренностям
*Почему мы не документируем классы вёрстки и что предлагаем вместо них.*
## Два слоя
*Переменные меняют вид везде. Якоря — конкретный элемент.*
---
# Переменные оформления
Адрес: https://docs-school.sersidteh.ru/appearance/variables/
Состояние: собрано из кода (src/app/tokens.css + data/tokens.yml).
Версия набора токенов — **0.6.0**. Всего переменных 188: публичных 84, выводимых из `--brand` 9, остальные внутренние или не отдаются школе.
## Как этим пользоваться
Переопределение переменной меняет вид **везде**, где она используется, и переживает любую нашу перевёрстку. В этом и смысл: мы обязуемся не переименовывать публичные переменные, а внутреннее устройство разметки меняем свободно.
Минимальная настройка школы — одна строка:
```css
:root { --brand: #C2185B; }
```
Из `--brand` выводятся акцент, наведение, нажатие, бледная подложка, рамка, цвет ссылки и кольцо фокуса — **отдельно для светлой и тёмной темы**. Поэтому малиновая школа остаётся малиновой и в тёмной теме, а не превращается в бурую.
Куда это писать — в разделе [Темы школы](/appearance/themes/).
## Что означают пометки
| Пометка | Что значит |
|---|---|
| **публичная** | Переопределять можно и нужно. Имя не меняется никогда — это обязательство. |
| **производная** | Выводится из `--brand` сама. Переопределить по одной можно, но обычно не нужно. |
| **не отдаётся** | Существует, но менять её не следует: ломается смысл (цвета состояний) или доступность (пороги попадания пальцем). |
| **внутренняя** | Меняем свободно и без предупреждения. Опираться на неё нельзя. |
## Главная переменная
Она одна. Всё остальное на этой странице — уточнения к ней.
| Переменная | Что делает | По умолчанию | В тёмной теме |
|---|---|---|---|
| `--brand` | Фирменный цвет школы. Единственная переменная, которую школа обязана задать: из неё выводятся акцент, наведение, нажатие, подложка, рамка, цвет ссылки, кольцо фокуса — и всё это отдельно для светлой и тёмной темы. | `var(--p-blue-500)` | — |
**Было / стало:**
```css
:root { --brand: #C2185B; } /* было синее, стало малиновое — везде */
```
**Где это видно:**
- `--brand` — Кнопки главного действия, ссылки, выделенный пункт меню, прогресс, кольцо фокуса.
## Публичные переменные
Их 84. Имя каждой — обязательство: мы не переименовываем их никогда, поэтому переопределение переживает любую нашу перевёрстку.
### Цвета: фоны, границы, текст
| Переменная | Что делает | По умолчанию | В тёмной теме |
|---|---|---|---|
| `--bg-canvas` | Фон страницы — то, на чём лежат карточки. | `var(--p-gray-50)` | `var(--p-gray-950)` |
| `--bg-surface` | Фон карточки, панели, диалога — всего, что лежит поверх страницы. | `var(--p-gray-0)` | `var(--p-gray-d-surface)` |
| `--bg-surface-muted` | Приглушённый фон внутри карточки — шапка таблицы, невыбранная вкладка, поле только для чтения. | `var(--p-gray-100)` | `var(--p-gray-d-surface-muted)` |
| `--bg-inverse` | Тёмная подложка на светлой теме — подсказка, плеер, нижняя панель. | `var(--p-gray-900)` | `var(--p-gray-0)` |
| `--bg-inverse-elevated` | То же, что тёмная подложка, но на один уровень выше — вложенный элемент внутри неё. | `var(--p-gray-800)` | `var(--p-gray-100)` |
| `--bg-media` | Фон под видео и изображением. Чёрный не случайно — на нём не видно полей кадра. | `var(--p-black)` | — |
| `--border` | Обычная разделительная линия — рамка карточки, линия между строками. | `var(--p-gray-200)` | `var(--p-gray-d-border)` |
| `--border-strong` | Заметная линия — рамка поля ввода и переключателя. Светлее делать нельзя: 3:1 это порог, ниже которого поле перестаёт быть видимым как поле.
3.10:1 на bg-surface-muted — границы полей | `var(--p-gray-450)` | `var(--p-gray-d-border-strong)` |
| `--border-on-inverse` | Линия на тёмной подложке.
3.53:1 на bg-inverse | `var(--p-gray-500)` | `var(--p-gray-450)` |
| `--text-primary` | Заголовки и главное на экране.
17.79:1 | `var(--p-gray-900)` | `var(--p-gray-d-text)` |
| `--text-body` | Основной текст абзацев — тело урока, описания, письма.
9.37:1 — основной текст абзацев | `var(--p-gray-700)` | `var(--p-gray-d-text)` |
| `--text-secondary` | Второстепенный текст — подписи, даты, счётчики.
5.40:1 на bg-surface-muted | `var(--p-gray-600)` | `var(--p-gray-d-text-2)` |
| `--text-muted` | Самый бледный текст, который ещё разрешён. Светлее нельзя: 4.5:1 — это порог читаемости, а не вкус. Ниже него текст исчезает на солнце и на плохом экране.
4.58:1 на bg-surface-muted — светлее нельзя | `var(--p-gray-500)` | `var(--p-gray-d-text-3)` |
| `--text-disabled` | Текст отключённого элемента. К нему порог контраста не применяется — он и должен читаться плохо.
отключённое состояние, порог не применяется | `var(--p-gray-400)` | `#5C6673` |
| `--text-on-inverse` | Текст на тёмной подложке. | `var(--p-gray-0)` | `var(--p-gray-900)` |
| `--text-on-inverse-muted` | Второстепенный текст на тёмной подложке.
8.31:1 на bg-inverse | `var(--p-gray-400)` | `var(--p-gray-600)` |
| `--skeleton` | Цвет «заглушки» на месте ещё не загруженного содержимого. | `var(--p-gray-200)` | `#232B35` |
| `--overlay` | Затемнение под модальным окном и нижним листом. | `rgba(20, 24, 31, .35)` | `rgba(0, 0, 0, .55)` |
**Было / стало:**
```css
:root { --bg-canvas: #FFFFFF; } /* было серым, стало белым: интерфейс «плоский» */
:root { --bg-surface: #FFFDF7; } /* карточки чуть тёплого оттенка */
:root { --border: transparent; } /* было в рамках, стало без рамок */
:root { --text-primary: #000000; }
```
**Где это видно:**
- `--bg-canvas` — Подложка всех экранов кабинета и админки.
- `--bg-surface` — Карточка курса, таблица, боковая панель, модальное окно.
- `--bg-surface-muted` — Заголовочная строка таблиц, полоса вкладок, блок кода.
- `--bg-inverse` — Всплывающая подсказка, панель управления видео.
- `--bg-media` — Плеер урока, обложка курса до загрузки.
- `--border` — Карточки, таблицы, поля, вкладки.
- `--border-strong` — Поля ввода, флажки, переключатели, выпадающие списки.
- `--text-primary` — Названия курсов и уроков, заголовки разделов, суммы.
- `--text-body` — Содержимое урока, описание курса, текст в диалогах.
- `--text-secondary` — Дата заказа, счётчик уроков, подпись под полем.
- `--text-muted` — Подсказки в полях, «ничего не найдено», сноски.
- `--skeleton` — Список курсов и таблицы в первые доли секунды после открытия.
- `--overlay` — Любое диалоговое окно, нижний лист на телефоне.
### Шрифты и размеры текста
| Переменная | Что делает | По умолчанию | В тёмной теме |
|---|---|---|---|
| `--font-sans` | Основной шрифт. Менять целиком не обязательно: в начале списка стоит `--font-sans-brand`, и достаточно задать её одну — запасные варианты для случая «шрифт не загрузился» останутся нашими. | `var(--font-sans-brand), "Golos Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", "Liberation Sans", Arial, sans-serif` | — |
| `--font-mono` | Моноширинный шрифт для кода, ключей и идентификаторов. | `"JetBrains Mono", ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, "Liberation Mono", monospace` | — |
| `--fw-regular` | Обычное начертание. | `400` | — |
| `--fw-medium` | Средняя жирность — подписи и активные пункты. | `500` | — |
| `--fw-semibold` | Полужирное — заголовки. | `600` | — |
| `--fw-bold` | Жирное — крупные заголовки и суммы. | `700` | — |
| `--fs-caption` | Самый мелкий текст — служебные подписи, значки. | `12px` | — |
| `--fs-meta` | Мелкий текст — даты, счётчики, сноски. | `13px` | — |
| `--fs-table` | Размер текста в таблицах. | `14px` | — |
| `--fs-body` | Основной размер текста. | `15px` | — |
| `--fs-body-mobile` | Основной размер на телефоне. Он больше настольного намеренно: 16px — порог, ниже которого Safari сам увеличивает страницу при попадании в поле ввода. | `16px` | — |
| `--fs-h3` | Заголовок третьего уровня — название карточки, подзаголовок в уроке. | `16px` | — |
| `--fs-h2` | Заголовок второго уровня — название раздела. | `20px` | — |
| `--fs-h1` | Заголовок страницы. | `24px` | — |
| `--fs-display` | Крупная цифра или заголовок витрины. | `30px` | — |
| `--fs-display-lg` | Самый крупный размер — обложки и главные экраны. | `38px` | — |
| `--lh-tight` | Плотная межстрочная — крупные заголовки. | `1.15` | — |
| `--lh-snug` | Умеренная межстрочная — подзаголовки и подписи. | `1.35` | — |
| `--lh-normal` | Обычная межстрочная — интерфейсный текст. | `1.5` | — |
| `--lh-relaxed` | Свободная межстрочная — тело урока, длинные абзацы. | `1.6` | — |
| `--ls-tightest` | Сильно поджатые буквы — крупные заголовки. | `-0.02em` | — |
| `--ls-tight` | Слегка поджатые буквы — заголовки. | `-0.01em` | — |
| `--ls-wide` | Разреженные буквы — мелкие подписи капителью. | `0.04em` | — |
| `--ls-widest` | Сильно разреженные буквы — служебные надписи над разделом. | `0.14em` | — |
**Было / стало:**
```css
:root { --font-sans-brand: "PT Sans"; }
:root { --fs-body: 17px; } /* было 15 — стало крупнее во всей школе */
```
**Где это видно:**
- `--font-sans` — Весь интерфейс.
- `--font-mono` — Блоки кода в уроке, ключи API в настройках.
- `--fs-body` — Тело урока, описания, диалоги.
- `--lh-relaxed` — Содержимое урока.
### Отступы, скругления, размеры, тени, переходы
| Переменная | Что делает | По умолчанию | В тёмной теме |
|---|---|---|---|
| `--space-1` | Отступ, шаг 1. Вся сетка — кратные четырём, эта — самый мелкий шаг. | `4px` | — |
| `--space-2` | Отступ, шаг 2 — между значком и текстом. | `8px` | — |
| `--space-3` | Отступ, шаг 3 — внутри поля и кнопки. | `12px` | — |
| `--space-4` | Отступ, шаг 4 — основной внутренний отступ карточки. | `16px` | — |
| `--space-5` | Отступ, шаг 5. | `20px` | — |
| `--space-6` | Отступ, шаг 6 — между карточками. | `24px` | — |
| `--space-8` | Отступ, шаг 8 — между блоками страницы. | `32px` | — |
| `--space-10` | Отступ, шаг 10. | `40px` | — |
| `--space-12` | Отступ, шаг 12 — между разделами. | `48px` | — |
| `--space-16` | Отступ, шаг 16 — крупные поля страницы. | `64px` | — |
| `--radius-control` | Скругление кнопок, полей и переключателей. | `6px` | — |
| `--radius-card` | Скругление карточек и таблиц. | `10px` | — |
| `--radius-sheet` | Скругление диалогов и нижних листов. | `14px` | — |
| `--radius-phone` | Скругление крупных поверхностей на телефоне. | `20px` | — |
| `--radius-pill` | Полное скругление — значки-таблетки | `999px` | — |
| `--size-control-sm` | Маленькая кнопка или поле. | `32px` | — |
| `--size-control-md` | Обычная кнопка или поле. | `36px` | — |
| `--size-row` | Высота строки списка. | `44px` | — |
| `--size-row-compact` | Высота строки в плотном режиме таблицы. | `34px` | — |
| `--size-row-mobile` | Высота строки списка на телефоне.
строка списка на телефоне | `56px` | — |
| `--size-row-sheet` | Высота строки выбора в нижнем листе и выпадающем списке.
строка выбора в нижнем листе и в выпадающем списке | `48px` | — |
| `--size-otp-cell` | Ячейка ввода кода из письма.
ячейка кода: 44 по ширине × 48 по высоте | `48px` | — |
| `--size-row-lesson` | Высота строки урока в оглавлении — две строки текста и значок.
строка урока: две строки текста + иконка | `64px` | — |
| `--size-tabbar` | Высота нижней навигации на телефоне, без безопасного отступа.
нижняя навигация без safe-bottom | `76px` | — |
| `--size-icon-button` | Кнопка-значок. | `32px` | — |
| `--size-panel` | Ширина боковой панели приложения. | `480px` | — |
| `--size-nav-rail` | Ширина свёрнутого бокового меню. | `56px` | — |
| `--size-queue-column` | Ширина колонки очереди проверки. | `340px` | — |
| `--size-readable` | Ширина колонки текста, за которой читать становится тяжело. Задана в `ch` — в ширинах символа, поэтому переживает смену шрифта и размера. | `68ch` | — |
| `--shadow-card` | Тень карточки. | `0 1px 2px rgba(20, 24, 31, .06)` | — |
| `--shadow-panel` | Тень боковой панели. | `-8px 0 24px rgba(20, 24, 31, .10)` | — |
| `--shadow-sticky-up` | Тень прилипшей снизу полосы действий. | `0 -6px 20px rgba(20, 24, 31, .06)` | — |
| `--shadow-modal` | Тень модального окна. | `0 12px 32px rgba(20, 24, 31, .18)` | — |
| `--shadow-float` | Тень всплывающего меню и подсказки. | `0 8px 28px rgba(20, 24, 31, .10)` | — |
| `--duration-fast` | Быстрый переход. Все три длительности обнуляются сами, если человек включил в системе «уменьшить движение», — отдельно об этом заботиться не надо. | `120ms` | — |
| `--duration-base` | Обычный переход — раскрытие, смена состояния. | `160ms` | — |
| `--duration-slow` | Медленный переход — выезд панели. | `200ms` | — |
| `--easing-standard` | Кривая обычного перехода. | `cubic-bezier(.2, 0, .38, 1)` | — |
| `--easing-out` | Кривая появления. | `cubic-bezier(0, 0, .38, 1)` | — |
**Было / стало:**
```css
:root { --space-4: 12px; } /* было просторно — стало плотнее по всей школе */
:root { --radius-control: 0; } /* острые углы вместо скруглённых */
:root { --radius-card: 0; }
[data-lms="rail"] { width: 200px; } /* якорь; см. раздел «Якоря» */
:root { --shadow-card: none; } /* было с тенью — стало плоско */
```
**Где это видно:**
- `--space-4` — Поля внутри карточек и диалогов.
- `--radius-control` — Все кнопки и поля ввода.
- `--radius-card` — Карточка курса, карточка заказа, панель.
- `--size-panel` — Панель фильтров, панель сведений о заказе.
- `--size-nav-rail` — Левое меню админки.
- `--size-readable` — Тело урока, длинные страницы документации.
- `--shadow-card` — Карточки курсов, панели.
### Кольцо фокуса
| Переменная | Что делает | По умолчанию | В тёмной теме |
|---|---|---|---|
| `--focus-width` | Толщина кольца фокуса. Увеличивать можно; убирать — значит закрыть школу для работы с клавиатуры. | `2px` | — |
| `--focus-offset` | Зазор между элементом и кольцом фокуса. | `2px` | — |
**Где это видно:**
- `--focus-width` — Любой элемент, на который встал фокус.
## Производные от бренда
Считаются из `--brand` сами, отдельно для светлой и тёмной темы. Переопределить по одной можно, но обычно не нужно: задав `--brand`, вы уже получили всю цепочку — и с проверенным контрастом.
| Переменная | Что делает | По умолчанию | В тёмной теме |
|---|---|---|---|
| `--accent` | Акцент как заливка. В тёмной теме автоматически светлеет, чтобы не слипаться с фоном. | `var(--brand)` | `oklch(from var(--brand) max(l, 0.72) calc(c * 0.9) h)` |
| `--accent-hover` | Акцент под курсором. | `oklch(from var(--accent) calc(l - 0.07) c h)` | `oklch(from var(--accent) calc(l + 0.06) c h)` |
| `--accent-active` | Акцент в момент нажатия. | `oklch(from var(--accent) calc(l - 0.13) c h)` | `oklch(from var(--accent) calc(l - 0.06) c h)` |
| `--accent-subtle` | Очень бледный акцент для подложек — выделенная строка, подсветка выбранного. | `oklch(from var(--accent) 0.965 calc(c * 0.35) h)` | `color-mix(in oklab, var(--accent) 14%, var(--bg-surface))` |
| `--accent-border` | Рамка в цвет акцента: контурная кнопка, выделенная карточка. | `oklch(from var(--accent) 0.905 calc(c * 0.55) h)` | `color-mix(in oklab, var(--accent) 34%, var(--bg-surface))` |
| `--text-on-accent` | Цвет текста поверх акцентной заливки. Считается сам: на тёмном акценте светлый, на светлом — тёмный. Поэтому песочная школа не получает белых букв на жёлтой кнопке. | `lch(from var(--accent) calc((49 - l) * infinity) 0 0)` | — |
| `--text-accent` | Акцент, когда он текст или ссылка. Всегда темнее заливки: акцент как текст обязан давать контраст 4.5:1, а фирменный цвет школы этого не гарантирует. | `oklch(from var(--accent) min(l, 0.52) c h)` | `var(--accent)` |
| `--accent-on-inverse` | Акцент на тёмной подложке — плеер, нижняя панель, тёмная тема. | `oklch(from var(--accent) max(l, 0.72) calc(c * 0.9) h)` | `var(--brand)` |
| `--focus-ring` | Цвет кольца фокуса. Намеренно НЕ равен акценту: у светлой школы акцент даёт 1.5:1, и кольцо просто исчезает — а вместе с ним и возможность работать с клавиатуры. | `var(--text-accent)` | `var(--accent)` |
**Где это видно:**
- `--accent` — Заливка главной кнопки, активный пункт меню, заполненная часть прогресса.
## Не отдаются школе
Эти переменные существуют, но менять их не следует. Цвета состояний — потому что зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах: иначе ученик и куратор перестают понимать экран с первого взгляда. Пороги попадания пальцем — потому что 44 пикселя это не вкус, а размер пальца.
| Переменная | Что делает | По умолчанию | В тёмной теме |
|---|---|---|---|
| `--success` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-green-600)` | `var(--p-green-400)` |
| `--success-subtle` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-green-50)` | `#12281F` |
| `--success-border` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-green-100)` | `#1E4835` |
| `--success-text` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-green-700)` | `#6FD3A6` |
| `--success-on-inverse` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-green-400)` | `var(--p-green-600)` |
| `--warning` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-amber-600)` | `var(--p-amber-400)` |
| `--warning-subtle` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-amber-50)` | `#2A2114` |
| `--warning-border` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-amber-100)` | `#4A3A1C` |
| `--warning-text` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-amber-700)` | `#EFC077` |
| `--warning-on-inverse` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-amber-400)` | `var(--p-amber-600)` |
| `--danger` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-red-600)` | `var(--p-red-400)` |
| `--danger-hover` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-red-650)` | `#FF8078` |
| `--danger-subtle` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-red-50)` | `#2A1614` |
| `--danger-border` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-red-100)` | `#55231F` |
| `--danger-text` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-red-700)` | `#FFB3AD` |
| `--danger-on-inverse` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-red-400)` | `var(--p-red-600)` |
| `--info-alt` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-violet-600)` | `#B69AE0` |
| `--info-alt-subtle` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-violet-50)` | `#241B33` |
| `--info-alt-text` | Цвет состояния: успех, предупреждение, ошибка, справка. Школе не отдаётся — зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. | `var(--p-violet-700)` | `#D3C0F0` |
| `--size-control-mobile` | Минимальный размер любой цели на телефоне. Не отдаётся: 44 пикселя — порог, ниже которого палец не попадает, и это не вопрос вкуса.
минимум для любой цели на телефоне | `44px` | — |
| `--size-control-mobile-lg` | Главное действие экрана на телефоне. Тот же порог, только с запасом.
главное действие экрана на телефоне | `52px` | — |
| `--size-icon-button-mobile` | Кнопка-значок на телефоне: тот же порог попадания пальцем. | `44px` | — |
| `--hit-area-mobile` | Минимальная область попадания на телефоне. Порог, а не украшение. | `44px` | — |
| `--hit-area-desktop` | Минимальная область попадания мышью. | `32px` | — |
| `--hit-area-gap` | Минимальный зазор между двумя соседними целями, чтобы не промахнуться в соседнюю. | `8px` | — |
## Внутренние
Их 69: примитивы палитры `--p-*`, номера слоёв, безопасные отступы телефона, метрики оболочки редактора. **Мы меняем их свободно и без предупреждения.** Опираться на них нельзя — правило, написанное по внутренней переменной, однажды перестанет применяться, молча и при обновлении.
Перечислены здесь ровно затем, чтобы было видно: это не забытые переменные, а намеренно закрытые.
| Переменная | Почему внутренняя |
|---|---|
| `--p-black` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-0` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-25` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-50` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-100` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-200` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-300` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-400` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-450` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-500` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-600` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-700` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-800` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-900` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-950` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-d-border` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-d-border-strong` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-d-surface` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-d-surface-muted` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-d-text` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-d-text-2` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-gray-d-text-3` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-blue-50` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-blue-100` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-blue-300` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-blue-500` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-blue-600` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-blue-700` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-green-50` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-green-100` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-green-400` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-green-600` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-green-700` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-amber-50` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-amber-100` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-amber-400` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-amber-600` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-amber-700` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-red-50` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-red-100` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-red-400` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-red-600` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-red-650` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-red-700` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-violet-50` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-violet-600` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--p-violet-700` | Примитив палитры. Сырой цвет, из которого собраны семантические переменные. Школе он не нужен: перекрасить надо не «серый 500», а то, что им нарисовано. |
| `--z-base` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--z-sticky` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--z-nav` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--z-panel` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--z-overlay` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--z-modal` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--z-toast` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--z-tooltip` | Номер слоя: что поверх чего. Меняется вместе с вёрсткой; переопределение роняет диалоги под панель, и происходит это не сразу, а на каком-то одном экране. |
| `--safe-top` | Безопасный отступ телефона (вырез, домашняя полоса). Значение приходит от системы через `env()`, задавать его руками нечем и незачем. |
| `--safe-bottom` | Безопасный отступ телефона (вырез, домашняя полоса). Значение приходит от системы через `env()`, задавать его руками нечем и незачем. |
| `--safe-left` | Безопасный отступ телефона (вырез, домашняя полоса). Значение приходит от системы через `env()`, задавать его руками нечем и незачем. |
| `--safe-right` | Безопасный отступ телефона (вырез, домашняя полоса). Значение приходит от системы через `env()`, задавать его руками нечем и незачем. |
| `--size-settings-panel` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--size-settings-panel-wide` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--size-doc-header` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--size-doc-tabs` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--size-outline` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--bp-editor-collapse` | Ширина окна, ниже которой оглавление редактора прячется, а панель ложится поверх холста. |
| `--size-field-textarea-min` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--size-field-textarea-max` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--size-field-media` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
| `--size-field-preview` | Метрика оболочки редактора блоков. Живёт вместе с редактором и меняется вместе с ним. |
## Чего здесь ещё нет
**Деление на публичные и внутренние ещё не закреплено в коде.** По `02-architecture/customization.md` §2 внутренние переменные должны отличаться префиксом в самом `tokens.css`; сейчас префикс `--p-` есть только у примитивов, а «статусы школе не отдаются» написано комментарием, который машина читать не обязана. До тех пор признак живёт в `data/tokens.yml` рядом с описаниями, и приведённое деление — **предложение документации, а не принятое решение**.
**Не у всех переменных есть «где видно» и пример «было / стало».** `customization.md` §6 требует и то и другое у каждой записи: голый список имён бесполезен — за ним всё равно лезут в инспектор браузера. Чего не хватает по именам — в `reports/tokens-gaps.md` репозитория документации.
**Переменная `--font-sans-brand` в `tokens.css` не объявлена.** Она названа настройкой школы в комментарии и используется как запасное значение внутри `--font-sans`, но своей строки объявления у неё нет — значит машинно в справочник она не попадает, и её приходится называть словами здесь.
---
# Якоря
Адрес: https://docs-school.sersidteh.ru/appearance/anchors/
Состояние: этого ещё нет в продукте.
**Якорей в продукте пока нет ни одного.** Ни одного атрибута `data-lms`
в интерфейсе не стоит — проверено поиском по исходникам.
Страница нужна сейчас по двум причинам. Первая: если вы ищете, как убрать колонку
из таблицы заказов или сузить боковое меню, ответ сегодня — «пока никак», и лучше
узнать это здесь, чем после часа подбора селекторов. Вторая важнее: объяснение,
**почему мы не документируем классы вёрстки**, — это половина ценности всего
раздела оформления, и оно верно уже сейчас.
## Почему нельзя просто задокументировать наши классы
Это возражение стоит первым, потому что от него зависит вся конструкция.
Разметка собрана из утилитарных классов:
```html