# Чем отличается технически

Страница описывает различия в устройстве и список того, чего в продукте нет.
Выводов о том, что лучше, здесь нет: выбор зависит от того, что вы делаете,
и делаете его вы.

Сравнение — с GetCourse: это платформа, с которой чаще всего переходят.
Сведения о ней взяты из их справочного центра, ответов их поддержки и практики
интеграторов.

## API: два независимых против одного

**У GetCourse два API**, независимых друг от друга: разные базовые адреса, разная
аутентификация, разный формат тела запроса, разные конверты ответа и разные
названия одних и тех же сущностей.

*Классическое API* умеет три действия: создать пользователя, создать заказ,
запустить асинхронный экспорт. Формат — JSON, закодированный в base64, внутри
`application/x-www-form-urlencoded`. Чтения одного объекта нет: только массовая
выгрузка. Лимит экспорта — 100 запросов за 2 часа на весь аккаунт, экспорт
однопоточный, каждый опрос готовности расходует квоту.

*Tech API* — около 50 методов, включая уроки, диалоги, вебинары. Ключ выдаётся
по анкете, документация закрыта в `robots.txt`. Офферы доступны только на чтение,
учебную структуру создавать нельзя.

**Здесь одно API:** один базовый адрес, одна аутентификация, один формат тела,
один конверт ошибок, один справочник событий. Ключ школа заводит в своих
настройках.

Практическое различие для интегратора: чтобы узнать состояние одного заказа
в GetCourse, нужно заказать выгрузку всех и дождаться файла; здесь это запрос
по идентификатору.

**Оговорка о состоянии:** работающего API здесь пока нет. Первый срез —
в разработке ([состав и граница](/api/scope/)), остальное — замысел
([Проект API](/api-project/)).

## Вебхуки

| | GetCourse | Здесь |
|---|---|---|
| Подпись | нет; защита — неугадываемый адрес | HMAC-SHA256 по сырому телу |
| Повторы при неудаче | нет | 6 попыток примерно за сутки |
| Переигрывание пропущенного | нет | по диапазону дат или списку событий |
| Формат события | три несовместимые схемы у разных семейств | один конверт на все события |

Три несовместимые схемы означают, что единый обработчик написать нельзя:
у заказов одно имя поля события и время в ISO, у диалогов числовой идентификатор
и время в другом формате, у звонков третья схема.

Устройство здесь описано на странице [Вебхуки](/api/webhooks/); реализации ещё нет.

## Права: галочки против ролей

**У GetCourse ролей как сущности нет.** Есть поле «тип» в карточке человека
и около семидесяти отдельных галочек прав, которые расставляются каждому
сотруднику по одной, руками. Шаблонов, групп и копирования прав с человека
на человека нет.

Три технических следствия:

- права почти не привязаны к объектам: ограничить сотрудника одним курсом можно
  только назначив его преподавателем этого курса; одной воронкой, одним продуктом,
  одной рассылкой — нельзя;
- контакты ученика видны либо целиком, либо никак; промежуточного состояния нет;
- крупные права каскадно включают пакеты других: «может настраивать аккаунт»
  разом добавляет управление правами, мессенджеры, хранилище, виджеты, трафик,
  пользователей, сайт, рассылки, промоакции и партнёрку.

**Здесь роль — сущность:** набор прав, который выдаётся целиком и правится
в одном месте. Право сужается до курса; контакты закрываются отдельным правом,
не связанным с правом работать с человеком.

Различие в умолчании: у GetCourse куратор по умолчанию видит всех учеников
тренинга, включая чужие ответы, а «только своих» включается галочкой в каждом
тренинге отдельно. Здесь куратор по умолчанию видит только своих.

## Кастомизация: классы вёрстки против объявленного контракта

Распространённый механизм — задокументировать классы элементов, чтобы школа
писала по ним свой CSS. Здесь он не используется, и причина техническая.

Разметка собрана из утилитарных классов. Если объявить их публичными, то,
во-первых, правило `.text-body { font-size: 20px }` меняет размер везде, где этот
класс встречается: в карточке курса, в подписи к платежу, в письме, в кнопке.
Во-вторых, при перевёрстке класс на элементе меняется, и оформление перестаёт
применяться **молча** — CSS не падает при неверном селекторе, ошибки в логах нет.

Механизм здесь — два объявленных слоя:

- **переменные оформления** — имена, которые не переименовываются; переопределение
  меняет вид везде, где переменная используется ([справочник](/appearance/variables/));
- **якоря** — стабильные атрибуты на ключевых элементах для точечных правил
  ([Якоря](/appearance/anchors/)).

Внутренняя разметка при этом остаётся изменяемой. Якорей в продукте пока нет
ни одного.

## Выгрузка данных

**GetCourse:** выгрузка по частям через асинхронный экспорт, в пределах квоты
100 запросов за 2 часа на аккаунт; курсы, уроки, ответы учеников, промокоды
и сегменты API не отдаёт.

**Здесь:** база PostgreSQL на вашем сервере, доступ к ней у вас; плюс
спроектирована выгрузка школы одним архивом, включая содержимое курсов и файлы.
Реализации выгрузки пока нет.

Что это означает при переходе — [Перенос данных с GetCourse](/start/migration/).

## Чего в продукте нет

Список фактический.

**Работающего API.** Первый срез в разработке ([состав](/api/scope/)).

**MCP-сервера.** Внешний агент подключается по машинным выходам документации,
готовых инструментов пока нет ([подробнее](/agents/mcp/)). Встроенный
помощник школы при этом работает — [ИИ-агент школы](/guide/agent/).

**Якорей оформления** — ни одного. Переменные работают.

**Автоматического переноса с GetCourse.** Модуль спроектирован, не написан.

> **Что из этого списка ушло за сентябрь 2026.** Здесь значились продажи,
> рассылки, сценарии и вебинары, а следом — приём платежей и возврат денег.
> Всё это теперь есть и описано:
> [Продажи](/guide/sales/), [Рассылки](/guide/messaging/),
> [Сценарии](/guide/scenarios/), [Вебинары](/guide/webinars/). Плюс
> появилась [почта школы](/guide/mail/) с подтверждением адреса,
> [встроенный ИИ-агент](/guide/agent/), касса ЮKassa и возврат денег.

**Приложений в App Store и Google Play — не будет.** Не «пока нет»: одна
установка — одна школа, значит каждой школе понадобилось бы своё приложение
со своим названием, то есть сотни публикаций, сотни ревью, аккаунт разработчика
и ежегодные платежи на стороне школы. Вместо этого кабинет ученика ставится
на домашний экран как PWA, а для Telegram есть отдельная оболочка; обе показывают
один и тот же кабинет.

**Зрелости.** GetCourse работает десять лет; первая установка этого продукта
на живой сервер прошла в августе 2026 года и дала девять находок.

## Что дальше

- [Что вам понадобится кроме коробки](/start/requirements/) — сервер и внешние сервисы.
- [Перенос данных с GetCourse](/start/migration/) — что переносится и как.
- [Установка](/start/install/) — требования и порядок.
