# Документация 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

Название курса

``` Допустим, мы объявили эти классы публичными и написали по ним справочник. Дальше произойдёт следующее. **Первое.** Технический специалист школы напишет `.text-body { font-size: 20px }` — и поменяет размер **везде, где встречается этот класс**: в карточке курса, в подписи к платежу, в письме, в кнопке. Он этого не хотел и не узнает, пока не пожалуется клиент. **Второе, и оно хуже.** Через месяц мы переверстаем карточку и поставим там другой класс. У всех клиентов, настроивших оформление, оно **сломается при обновлении, молча, задним числом**. Ошибки в логах не будет: CSS не падает при неверном селекторе, он просто перестаёт применяться. Из этого два следствия, и оба неприемлемы: либо мы больше никогда не трогаем вёрстку, либо регулярно ломаем клиентам оформление. Поэтому наружу объявляется не то, из чего собрана вёрстка, а то, что мы **намеренно объявили контрактом**. Два слоя: [переменные](/appearance/variables/) — уже работают, и якоря — будут. ## Что такое якорь Стабильный атрибут на элементе, который человек называет словами: ```html
  • ``` По нему пишется правило: ```css [data-lms="course-card"] { box-shadow: none; border-radius: 0; } [data-lms="rail"] { width: 200px; } ``` **Атрибут, а не класс** — намеренно. Класс можно случайно перебить утилитой и легко спутать со своим; атрибут виден как объявленный контракт и в разметке, и в CSS. **Список конечный.** Якорь ставится на то, что называют словами: карточка курса, строка заказа, боковое меню, тело урока, шапка, диалог, кнопка оплаты. Не на каждый элемент подряд. **Один якорь — одна роль.** Если элемент встречается в двух местах и должен настраиваться по-разному, это два якоря. ## Когда появятся По правилу **«экран, который трогают, получает якоря»**. Отдельной задачи «расставить якоря по всему продукту» не будет: задним числом по всему продукту это стоит вдвое дороже и делать это оказывается некому. Первыми якоря получат экраны ближайшего этапа — мобильная админка, панель оформления, кабинет ученика. Отдельно и заранее вводится минимальный набор под задачи, которые спрашивают чаще всего: таблица заказов, таблица пользователей, карточка курса, боковое меню, тело урока. ## Справочник соберётся сам Якорь объявляется в коде типизированно, и справочник собирается из объявлений — так же, как [переменные](/appearance/variables/) собираются из `tokens.css`. Из этого следует проверка, которая делает справочник надёжным: **якоря, которого нет в перечне, не может быть в разметке**, и это ловится тестом. Рукописный справочник разошёлся бы с продуктом на третьем заходе; собранный из объявлений — не может. У каждой записи будет: что это за элемент, где встречается, какие переменные на него влияют и пример. ## Что делать сегодня Задачи вида «поменять цвет, шрифт, скругление, плотность» решаются [переменными](/appearance/variables/) уже сейчас — они меняют вид везде и переживают любую нашу перевёрстку. Задачи вида «спрятать вот этот конкретный элемент» сегодня решения не имеют. Подобрать селектор по вёрстке технически можно, но это отложенная поломка, и поддерживать её мы не будем. --- # Темы школы Адрес: https://docs-school.sersidteh.ru/appearance/themes/ Тема — это ваш CSS, применённый ко всей школе. Здесь про то, куда его писать, как посмотреть результат до применения и как вернуться назад, если получилось не то. Если вы дошли сюда потому, что уже сломали интерфейс, — вам нужен [Аварийный выключатель](/appearance/kill-switch/), и он открывается без входа в настройки. ## Тема — сущность, а не поле Тем может быть несколько, у каждой имя. Применена к школе всегда одна. Что умеет раздел «Оформление» в настройках школы: - **создать тему** и дать ей имя — «Фирменный стиль», «Новогодняя»; - **большое поле CSS** с подсветкой и проверкой синтаксиса; - **предпросмотр до применения** — на настоящих экранах школы, а не на абстрактном примере с кнопкой и карточкой; - **применить** к школе; - **откатить** к предыдущей редакции — история правок хранится; - **вернуться к стандартному оформлению** одной кнопкой. Предпросмотр здесь важнее, чем кажется. Оформление ломается не на кнопке, которую вы правите, а на экране, о котором вы не подумали, — и увидеть это надо до того, как его увидит ученик. ## Что писать В подавляющем большинстве случаев — переопределение переменных. Одна строка перекрашивает школу целиком: ```css :root { --brand: #C2185B; } ``` Из `--brand` выводятся акцент, наведение, нажатие, бледная подложка, рамка, цвет ссылки и кольцо фокуса — **отдельно для светлой и тёмной темы**. Поэтому малиновая школа остаётся малиновой и в тёмной теме, а не превращается в бурую. Дальше — шрифт, скругления, плотность: ```css :root { --brand: #C2185B; --font-sans-brand: "PT Sans"; --radius-card: 0; --radius-control: 0; --space-4: 12px; } ``` Полный перечень с описаниями и значениями по умолчанию — [Переменные оформления](/appearance/variables/). Готовый разбор одной задачи до конца — рецепт [Перекрасить школу под фирменный стиль](/recipes/brand-colors/). ## Чего писать не стоит **Селекторов по нашей вёрстке.** Классы вроде `.text-body` не являются публичным контрактом, и правило, написанное по ним, сломается при первой же перевёрстке — молча, при обновлении, без ошибки в логах. CSS не падает при неверном селекторе, он просто перестаёт применяться, и вы узнаете об этом от клиента через месяц. Для случаев «уберите тень у карточки курса» есть [якоря](/appearance/anchors/) — стабильные атрибуты, которые мы обязуемся не менять. Сейчас их в продукте ещё нет, и до тех пор такие задачи честно не решаются: подобранный селектор — это отложенная поломка, а не решение. **Переменных с пометкой «внутренняя».** Их мы меняем свободно и без предупреждения. **Цветов состояний.** Зелёное «оплачено» и красное «отказ» должны выглядеть одинаково во всех школах: иначе ученик и куратор перестают понимать экран с первого взгляда. Эти переменные помечены «не отдаётся». ## Граница с блоками кода Тема оформляет **всю школу**. [Блок CSS](/appearance/code-blocks/) в конструкторе оформляет **свою страницу** и ограничен ею движком. Разные инструменты, разные места. Страница, переоформившая админку, — дефект, а не возможность. ## Где тема не применяется никогда Три места, и все три — те, через которые чинят последствия ошибки: 1. **Экран входа.** 2. **Настройки школы и настройки аккаунта**, включая сам раздел «Оформление». 3. Плюс адрес, открывающий любую страницу без темы. Это и есть аварийный выключатель. Ему отведена [отдельная страница](/appearance/kill-switch/) — не для объёма, а потому что её ищут в панике и находят поиском. --- # Блоки кода Адрес: https://docs-school.sersidteh.ru/appearance/code-blocks/ Состояние: этого ещё нет в продукте. **Блоков кода в конструкторе ещё нет.** Решение принято, правила зафиксированы, код не написан. Страница нужна сейчас потому, что от этих правил зависит, стоит ли рассчитывать на блоки кода при выборе платформы, — и потому что одно из правил ограничивает то, чего обычно ждут. ## Три блока, и они разные по опасности **Блок HTML.** Произвольная разметка, выполняется как есть. Контексты: страница, урок, виджет. В письмах и сообщениях — нет: там разметку определяет почта и мессенджер, и произвольный HTML туда просто не доедет. **Блок CSS.** Стили **автоматически ограничиваются документом, в котором стоят**. Автору для этого ничего писать не надо — ограничение делает движок при сборке страницы. Урок оформляет себя, а не соседний урок и не админку. Границу с [темой школы](/appearance/themes/) стоит держать в голове: CSS-блок оформляет свою страницу, тема оформляет всю школу. Страница, переоформившая админку, — это дефект, а не возможность. **Блок JavaScript.** Выполняется на странице, где стоит. Три ограничения, и они не обсуждаются. ### Пользовательский код никогда не выполняется на экранах админки Ни на одном. Предпросмотр внутри редактора рисуется во вложенном изолированном кадре, который отдаётся отдельным путём и **без сессии администратора**. Причина прямая: иначе техспециалист, написавший три строки в уроке, получает сессию владельца школы. В продукте, который стоит у сотен клиентов, это вопрос времени, а не вероятности. ### Право на код выдаётся отдельно Отдельное право, по умолчанию только у владельца. Оно **не входит** в право редактировать курс: редактировать курс и писать исполняемый код — разные полномочия. На экране выдачи написано словами, что этот человек получит доступ к данным всех, кто откроет страницу. ### Журнал правок и реестр вставок Журнал — у всех трёх блоков: кто, когда, что было до, с откатом. Реестр вставок — один экран, где видно **все места в школе**, где стоит пользовательский код. Без него через полгода никто не помнит, откуда на странице оплаты взялся чужой скрипт, и снять его боятся. Отдельно: отзыв права на код **не выключает уже написанное**. Уволившийся техспециалист перестаёт создавать и править, но его виджет продолжает работать — иначе увольнение ломало бы продажи школы посреди дня. Вместо выключателя — видимость: владелец получает список того, что этот человек создавал, и может отключить сам, увидев предпросмотр изменений. ## Риск, названный прямо Дав школе исполняемый код, мы отдаём ей часть ответственности за безопасность её же учеников. Это сознательный размен: без блоков кода продукт не закрывает работу технического специалиста, а именно он принимает решение о покупке. Ограничения выше устроены так, чтобы **ошибка школы стоила школе, а не всем установкам сразу**. ## Где следить [Обновления](/changelog/). --- # Аварийный выключатель Адрес: https://docs-school.sersidteh.ru/appearance/kill-switch/ Если вы попали сюда из поиска, потому что школа сломалась после применения темы, — вот короткий ответ. **Добавьте к адресу любой страницы `?theme=off`.** Она откроется без темы. ``` https://school.example.com/admin/settings/appearance?theme=off ``` Дальше — в раздел «Оформление» и либо откатите к предыдущей редакции, либо верните стандартное оформление одной кнопкой. ## Почему это вообще существует Первое, что произойдёт в живой школе: технический специалист напишет `display: none` не на том селекторе и потеряет доступ к настройкам. Не «может произойти» — произойдёт. Если при этом закрыт вход в настройки, единственный выход — лезть в базу. Это обращение в поддержку по вине продукта, а не школы. Поэтому выключатель обязателен, а не «хорошо бы». ## Три места, где тема не применяется никогда Даже если очень постараться. 1. **Экран входа.** Сломать вход в школу нельзя в принципе. 2. **Настройки школы и настройки аккаунта**, включая сам раздел «Оформление». То есть экран, на котором тему чинят, темой не оформляется. 3. **Любая страница с `?theme=off`.** Обратите внимание, чего в этом списке нет: **всей остальной админки**. Разделы курсов, пользователей, заказов школа вправе перекрашивать — это её рабочие экраны, и запрещать там нечего. ## Предупреждение до сохранения, а не после Если тема прячет элементы навигации — `display: none` или `visibility: hidden` на якорях меню, — предупреждение показывается **до** применения, а не после. Тема, применённая вслепую, и тема, применённая с предупреждением «вы сейчас спрячете боковое меню», — разные события: во втором случае человек либо остановится, либо будет знать, что делает. ## Порядок восстановления 1. Откройте любую страницу с `?theme=off`. 2. Перейдите в настройки школы, раздел «Оформление» — он и так открывается без темы. 3. **Откатите к предыдущей редакции.** История правок хранится, и в большинстве случаев этого достаточно: сломала последняя правка. 4. Если непонятно, какая именно редакция сломала, — **вернитесь к стандартному оформлению** одной кнопкой. Тема при этом не удаляется, только перестаёт применяться. 5. Найдите ошибку в поле CSS, посмотрите **предпросмотр**, и только потом применяйте снова. ## Как не попадать сюда - **Пользуйтесь предпросмотром.** Он показывает настоящие экраны школы, а не абстрактный пример. - **Меняйте [переменные](/appearance/variables/), а не селекторы.** Переопределение переменной не может спрятать элемент — оно может сделать его некрасивым, но не недоступным. - **`display: none` — самое опасное, что можно написать в теме.** Если он вам нужен, примените тему и сразу пройдите по школе: вход, список курсов, урок, настройки. --- # Рецепты Адрес: https://docs-school.sersidteh.ru/recipes/ Состояние: страница ещё не написана. ## Как устроен рецепт *Задача, что понадобится, шаги с полными примерами, что проверить в конце.* --- # Выдать доступ после оплаты на внешнем лендинге Адрес: https://docs-school.sersidteh.ru/recipes/access-after-external-payment/ Состояние: этого ещё нет в продукте. **Этот рецепт пока не написать: нужен работающий API, которого ещё нет.** Маршрутов `/v1/*` в продукте ноль — см. [Проект API](/api/). Написать шаги сегодня значило бы выдать за инструкцию то, что нельзя выполнить. Что доступно вместо: доступ выдаётся руками — [Доступы](/guide/access/). ## Что понадобится *Ключ с правами, адрес школы, идентификатор тарифа.* ## Шаги *Создать пользователя, создать заказ, отметить оплату, проверить выданный доступ.* ## Что проверить *Повторная отправка формы не должна выдать доступ дважды.* --- # Синхронизировать с CRM Адрес: https://docs-school.sersidteh.ru/recipes/crm-sync/ Состояние: этого ещё нет в продукте. **Этот рецепт пока не написать: нужны работающий API и исходящие вебхуки, которых ещё нет** — см. [Проект API](/api/). Устройство вебхуков спроектировано полностью, включая подпись, ретраи и переигрывание пропущенного, и описано на странице [Вебхуки](/api/webhooks/) — но это замысел, а не работающий код. ## Что понадобится *Подписка на события, приёмник с проверкой подписи.* ## Из школы в CRM *Какие события слать и что в них уже есть, чтобы не делать лишний запрос.* ## Из CRM в школу *Обновление человека и выдача доступа.* ## Что проверить *Дубликат события и порядок доставки.* --- # Перекрасить школу под фирменный стиль Адрес: https://docs-school.sersidteh.ru/recipes/brand-colors/ **Задача:** школа выглядит как наш продукт, а должна выглядеть как ваша школа — фирменный цвет, свой шрифт, свои углы. **Сколько занимает:** пять минут на цвет, полчаса вместе с проверкой. **Работает ли сегодня:** да, целиком. Это единственный рецепт в разделе, который не упирается ни в API, ни в якоря. ## Что понадобится Право менять настройки школы и фирменный цвет в шестнадцатеричном виде — тот самый, который лежит в вашем брендбуке. ## Шаг 1. Одна строка Настройки школы → «Оформление» → создать тему → в поле CSS: ```css :root { --brand: #C2185B; } ``` Посмотрите предпросмотр. Изменится **не только кнопка**: акцент, наведение, нажатие, бледная подложка выделенной строки, рамка контурной кнопки, цвет ссылок, активный пункт меню, заполненная часть прогресса и кольцо фокуса. И всё это — **отдельно для светлой и тёмной темы**. Малиновая школа остаётся малиновой в тёмной теме, а не превращается в бурую. ### Почему одна переменная, а не десять Из `--brand` производные считаются формулами в цветовом пространстве, где светлота отделена от насыщенности. Две из них считаются не «покрасивее», а по порогу контраста: - **`--text-accent`** — акцент, когда он текст или ссылка. Всегда темнее заливки, потому что текст обязан давать контраст 4.5:1, а фирменный цвет школы этого не гарантирует. - **`--text-on-accent`** — цвет надписи **поверх** акцентной заливки. Считается сам: на тёмном акценте светлый, на светлом — тёмный. Поэтому у школы с песочным фирменным цветом не получится белых букв на жёлтой кнопке. - **`--focus-ring`** — кольцо фокуса. Намеренно **не равно** акценту: у светлой школы акцент даёт 1.5:1, кольцо исчезает, и вместе с ним исчезает возможность работать с клавиатуры. Задав десять переменных руками, вы эти пороги потеряете. Задав одну — получите их бесплатно. ## Шаг 2. Шрифт ```css :root { --brand: #C2185B; --font-sans-brand: "PT Sans"; } ``` Менять `--font-sans` целиком не нужно: `--font-sans-brand` стоит первой в её списке, а запасные варианты на случай «шрифт не загрузился» останутся нашими. Шрифт должен быть доступен браузеру: системный, подключённый через `@font-face` в той же теме или через ваш CDN. ## Шаг 3. Углы и плотность ```css :root { --brand: #C2185B; --font-sans-brand: "PT Sans"; /* Острые углы вместо скруглённых */ --radius-control: 0; --radius-card: 0; /* Плотнее: было 16, стало 12 */ --space-4: 12px; /* Плоско: без теней у карточек */ --shadow-card: none; } ``` Полный перечень с описаниями и значениями по умолчанию — [Переменные оформления](/appearance/variables/). ## Шаг 4. Применить Предпросмотр → применить. История правок сохраняется: если получилось не то, откат к предыдущей редакции — одна кнопка. ## Что проверить обязательно Четыре вещи. Первые три — за минуту, четвёртая — то, из-за чего вообще написан этот раздел. **1. Тёмная тема.** Переключите тему в системе или в настройках и пройдите те же экраны. Акцент в тёмной теме автоматически светлеет — убедитесь, что получившийся оттенок вам подходит. **2. Кольцо фокуса.** Нажмите Tab несколько раз на любом экране. Кольцо должно быть **видно** на каждом элементе. Если вы не переопределяли `--focus-ring`, оно видно по построению; если переопределяли — проверьте на светлых подложках. **3. Текст на акценте.** Найдите главную кнопку и прочитайте надпись на ней. Если вы не трогали `--text-on-accent`, она читается по построению. **4. Экраны, которые темой не оформляются.** Их три: вход, настройки школы и настройки аккаунта. Они специально исключены, и это значит, что **там ваш фирменный цвет не появится**. Это не ошибка — это [аварийный выключатель](/appearance/kill-switch/): экран, на котором чинят последствия неудачной темы, ломать нельзя в принципе. ## Чего этим не сделать **Спрятать конкретный элемент.** Переменные меняют вид **везде**, где используются. Задачи вида «убрать колонку из таблицы заказов» решаются [якорями](/appearance/anchors/), а их в продукте пока нет. **Поменять цвета состояний.** Зелёное «оплачено» и красное «отказ» не отдаются школе намеренно: они должны выглядеть одинаково во всех школах, иначе ученик и куратор перестают понимать экран с первого взгляда. **Написать селектор по нашей вёрстке.** Технически можно, но это отложенная поломка: при первой же перевёрстке правило перестанет применяться — молча, при обновлении, без ошибки в логах. ## Готовый пример целиком Скопируйте, замените цвет и шрифт на свои: ```css :root { /* Единственное обязательное */ --brand: #C2185B; /* Необязательное */ --font-sans-brand: "PT Sans"; --radius-control: 4px; --radius-card: 4px; --shadow-card: none; } ``` Всё остальное — акцент, наведение, нажатие, ссылки, кольцо фокуса, тёмная тема — посчитается само. --- # Убрать колонку из таблицы заказов Адрес: https://docs-school.sersidteh.ru/recipes/hide-orders-column/ Состояние: этого ещё нет в продукте. **Этот рецепт пока не написать: нужны якоря, а их в продукте нет ни одного** — см. [Якоря](/appearance/anchors/). Единственный доступный сегодня способ — подобрать селектор по нашей вёрстке, и это ровно то, что мы обещаем не поддерживать: такое правило сломается при первой же перевёрстке, молча и задним числом. > **Этот рецепт пока не написать.** Он целиком опирается на якоря, а их в продукте > нет ни одного (ADR-056). Единственный способ, доступный сегодня, — подобрать > селектор по нашей вёрстке, и это ровно то, что мы обещаем не поддерживать: > такое правило сломается при первой же перевёрстке, молча и задним числом. ## Что понадобится *Якорь таблицы заказов.* ## Шаги *Найти якорь, написать правило, применить тему.* ## Что проверить *Телефон: таблица там перестраивается в карточки, и правило должно учитывать это.* --- # Построить свой отчёт по доходимости Адрес: https://docs-school.sersidteh.ru/recipes/completion-report/ Состояние: этого ещё нет в продукте. **Этот рецепт пока не написать: нужен работающий API, которого ещё нет** — см. [Проект API](/api/). Состав операций аналитики спроектирован и виден в [справочнике](/api/reference/analitika/). ## Что понадобится *Ключ с правами на чтение аналитики.* ## Шаги *Запросить доходимость по курсу, выгрузить прогресс, собрать таблицу.* ## Что проверить *Права: агрегаты доступны без права на чтение персональных данных.* --- # Для агентов Адрес: https://docs-school.sersidteh.ru/agents/ Состояние: страница ещё не написана. ## С чего начать агенту *Прочитать /llms.txt, забрать /openapi.draft.json, получить ключ только на чтение. И знать, что API ещё не написано: см. [Проект API](/api/).* --- # Машинные выходы Адрес: https://docs-school.sersidteh.ru/agents/machine-readable/ Документация отдаётся в четырёх машинных видах. Все четыре собираются **той же сборкой, что и сайт, из тех же файлов** — не отдельным скриптом сбоку. Приделанное сбоку расходится с сайтом на третьем заходе, и расходится молча. ## Точка входа: /llms.txt Карта разделов: заголовок, одна строка описания на раздел и перечень страниц со ссылками и описаниями. Небольшой файл, с которого модели стоит начинать. ```bash curl -s https://docs-school.sersidteh.ru/llms.txt ``` Страницы, которые ещё не написаны, помечены прямо в списке — `[страница ещё не написана]`. Это сделано намеренно: модель, которая знает, что раздела нет, скажет об этом, а не придумает содержимое. ## Всё сразу: /llms-full.txt Вся документация одним текстом, страницы подряд, у каждой указан её адрес. Нужен, когда агент читает целиком и не хочет обходить страницы по одной. ```bash curl -s https://docs-school.sersidteh.ru/llms-full.txt ``` ## Спецификация API: /openapi.draft.json OpenAPI 3.1. Из него собран [Каталог ресурсов](/api/reference/), из него же будут собраны клиентские библиотеки и MCP-сервер. ```bash curl -s https://docs-school.sersidteh.ru/openapi.draft.json ``` **Обратите внимание на имя файла.** `/openapi.json` — конвенция: агент, который его скачал, обоснованно считает, что перед ним рабочее API, и начинает дёргать адреса. Здесь так делать нельзя, и поэтому конвенциональное имя **не занято**: - публичного API в продукте ещё нет — маршрутов `/v1/*` ноль; - спецификация собрана машинным разбором проектного документа, а не из кода; - **60 путей из 226 выведены эвристикой** из сокращённой записи каталога и помечены `x-lms-shorthand: true` — эти адреса могут оказаться другими; - тел запросов и состава полей в ответах нет: у таких операций стоит `x-lms-unspecified`. У всего документа стоит `x-lms-provisional: true`. Проверять этот признак — самый дешёвый способ не построить интеграцию на несуществующем API. Когда API будет написано, спецификация начнёт собираться из zod-валидаторов и переедет на `/openapi.json`. Адреса страниц справочника при этом не изменятся. Подробнее — [Чего в справочнике ещё нет](/api/reference/#chego-v-spravochnike-eshhe-net). ## Исходник любой страницы К адресу страницы добавляется `.md` — и вместо разметки сайта отдаётся её исходный текст. ```bash curl -s https://docs-school.sersidteh.ru/api/errors.md ``` Работают оба написания: `/api/errors.md` и `/api/errors/index.md`. В `` каждой страницы на этот же файл стоит ссылка: ```html ``` ## Почему сайт статический Содержимое отдаётся готовым HTML и не собирается скриптом в браузере. Причина простая: **страница, пустая без JavaScript, для модели пустая.** Из этого же следует остальное устройство сайта: - заголовки и якоря стабильные — на них ссылаются и люди, и агенты, и ссылка не должна протухать от того, что мы переставили абзац; - одна страница — одна тема: гигантская страница «всё про API» плоха и для поиска, и для контекста модели; - поиск работает офлайн: индекс лежит рядом с сайтом, внешнего сервиса нет; - ничего важного не спрятано в картинку — скриншот иллюстрирует, но не несёт сведений, которых нет в тексте. ## Версия Каждая сборка называет версию продукта, на которой собрана: в подвале каждой страницы, в шапке `/llms.txt` и в поле `info.version` спецификации. Эта сборка — **версия 0.1.0**, сборка из коммита `933ad56` от 8 августа 2026. Публичный сайт всегда показывает последнюю версию. Если у вас коробка другой версии, её собственный справочник лежит внутри установки и собран на её версии — внешняя документация врала бы половине покупателей. --- # MCP-сервер: как подключить Адрес: https://docs-school.sersidteh.ru/agents/mcp/ Состояние: этого ещё нет в продукте. **MCP-сервера пока нет.** И он появится не раньше, чем появятся настоящие маршруты API: обернуть в инструменты спецификацию, которой нет в коде, значит выдать агенту 226 несуществующих команд. Ниже — замысел, чтобы было понятно, на что рассчитывать. ## Что это даёт *Агенту нужен инструмент, а не текст.* ## Настройка *Адрес школы, ключ, файл настройки агента.* ## Проверка *Первый вызов и что должно вернуться.* --- # Что умеет MCP-сервер Адрес: https://docs-school.sersidteh.ru/agents/tools/ Состояние: этого ещё нет в продукте. **MCP-сервера пока нет** — см. [Как подключить](/agents/mcp/). Ниже — замысел. ## Инструменты *Собираются из той же спецификации, что и справочник.* ## Права *Тот же ключ и те же права, что у обычной интеграции. Никакого отдельного языка прав.* ## След в журнале *Действие агента помечается в журнале как выполненное агентом, а не человеком.* --- # Ключ с узкими правами Адрес: https://docs-school.sersidteh.ru/agents/keys/ Состояние: написано наполовину. Одна вещь на этой странице важнее всех остальных, поэтому она первая. > **Ключ для агента по умолчанию создаётся только на чтение.** Права на запись > выдаются явно, отдельным действием, и на экране создания об этом написано словами. Это не настройка по вкусу и не осторожность ради осторожности. Агент действует по тексту, который он прочитал, а прочитать он может что угодно — включая текст, который кто-то оставил в описании курса или в ответе на задание специально. Ключ на чтение в худшем случае показывает лишнее. Ключ на запись в худшем случае отзывает доступ у ста человек. ## Сужение до курса — бесплатно У ключа нет своего языка прав: **ключ — такой же субъект, как человек**, и права у него те же самые, что у роли. Проверяет их та же функция. Из этого бесплатно получается то, чего у платформ обычно нет: **право сужается до конкретного курса**. Ключ агента, который помогает с одним курсом, умеет работать только с ним — не «с курсами вообще». Второго перечня прав в продукте не будет. Один список на интерфейс, на людей и на ключи: два списка разойдутся, вопрос только в том, через сколько заходов, и разойдутся молча — право закроют на экране и забудут закрыть в API. ## След в журнале Действие, выполненное агентом, помечается в журнале как выполненное **агентом**, а не человеком. Не «система изменила доступ», а «интеграция N от имени человека M». Без этого разбор случая «кто отозвал доступ у ученика» упирается в тупик через неделю после того, как о нём забыли. ## Что видно про ключ потом Название, кто создал, когда создан, когда использовался последний раз, с каких адресов, сколько запросов за сутки. Отзыв — одной кнопкой, немедленный. Значение ключа показывается **один раз**, при создании: в базе хранится только хеш. Потеряли — заведите новый и отзовите старый. Префиксы `lms_live_` и `lms_test_` не для красоты: случайно закоммиченный ключ опознаётся сканером секретов и отзывается до того, как им воспользуются. ## Состояние **Реестра ключей в продукте ещё нет** — он появится вместе с API. Правила выше приняты и не изменятся; экрана, на котором ключ заводится, пока не существует. Следить — в [Обновлениях](/changelog/). --- # Обновления Адрес: https://docs-school.sersidteh.ru/changelog/ Состояние: написано наполовину. Продукт в разработке. Здесь — что появилось и когда, крупными кусками. Читателю коробочного продукта этот раздел нужен чаще, чем кажется: по нему решают, стоит ли ставить обновление и что проверить после. Версия, на которой собрана эта документация, указана в подвале каждой страницы. ## Чего пока нет Список короче, чем список сделанного, но полезнее: - **работающего API** — спроектировано целиком, маршрутов в коде ноль; - **продаж** — продуктов, тарифов, заказов, приёма платежей, возвратов, чеков; - **рассылок** и **сценариев**; - **вебинаров**; - **якорей оформления** — переменные работают, якоря появятся вместе с ближайшими экранами; - **блоков кода** в конструкторе; - **проверенного порядка обновления** установки с данными — второй заход установки ещё не проходил. ## 8 августа 2026 — видео играет, ничего не теряется молча Крупный заход по кабинету и редактору урока. **Видео заработало.** Причин было две. Отдача файлов не понимала частичных запросов — для тега `