REST API и SDK
Два независимых API: API агентов (ядро MindRoot — запуск задач, трассировка, ключи) и API витрины (реестр плагинов, установка, публикация). Первый работает в вашем контуре, второй — публичный каталог.
API агентов (в вашем контуре)
Запуск задачи
| Метод | Путь | Назначение |
|---|---|---|
| POST | /task/{агент}?api_key=… |
Запуск задачи агентом без диалога: возвращает результат и полную трассировку |
| GET | /api/keys | Управление API-ключами (админ) |
| GET | /logs/{session_id} | Журнал сессии: команды, аргументы, результаты |
wait_for_user_reply, say) и убедитесь, что
включена task_result — иначе цикл задачи остановится на полпути.Python SDK
JavaScript
API витрины mindroot.ru
Публичный каталог плагинов и агентов. Все ответы в JSON, CORS открыт, ключ не требуется. Swagger доступен по адресу /api/swagger.
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/registry | Весь реестр: плагины, агенты, статистика, категории |
| GET | /api/plugins | Фильтры: q (поиск по
названиям и описаниям команд), category, tag,
sort (popular/rating/name/commands/fresh) |
| GET | /api/plugins/{slug} | Карточка плагина с командами, настройками и блоком 152-ФЗ |
| GET | /api/plugins/{slug}/install | План установки: способы, переменные окружения, список команд для политики |
| POST | /api/plugins/{slug}/install | Регистрация установки в статистике витрины |
| GET | /api/plugins/{slug}/download | Скачивание пакета плагина архивом .zip |
| GET | /api/agents, /api/agents/{slug} |
Готовые агенты и их инструкции |
| GET | /api/agents/{slug}/download | agent.json для импорта в MindRoot |
| POST | /api/agents/validate | Проверка сценария агента: неизвестные команды, запись без подтверждения, ПДн, лимиты |
| POST | /api/agents/export | Сборка agent.json из сценария конструктора |
| POST | /api/publish | Заявка разработчика на публикацию плагина |
| GET | /api/pricing, /api/models |
Тарифы и поддерживаемые модели |
Пример: поиск плагина и план установки
Аутентификация и лимиты
- API агентов — API-ключ в query-параметре
api_keyлибо JWT в заголовкеAuthorization: Bearer. Один ключ = один интеграционный сценарий: отзывается без влияния на остальные системы. - RBAC — ключи привязаны к ролям: наблюдатель (только чтение логов), оператор (запуск агентов), администратор (изменение политик и ключей).
- Лимиты — на тарифе «Старт» 500 запусков в месяц, «Команда» — 25 000, «Бизнес» — 150 000. При превышении возвращается HTTP 429 с указанием лимита.
API провижининга контура
Тот же публичный API витрины умеет превращать агента в разворачиваемый контур: считает ресурсы и смету, генерирует IaC-пакет и возвращает журнал шагов.
| Метод | Путь | Назначение |
|---|---|---|
| GET | /api/provisioning/options |
Типы контуров, провайдеры и тарифы |
| POST | /api/provisioning/plan |
Ресурсы и смета по нагрузке. В теле — config и либо
agent_slug (агент из витрины), либо описание агента из
конструктора |
| POST | /api/provisioning/deploy |
Создаёт пакет контура в deployments/<id>/ и возвращает
13 шагов с логами. Сценарий с ошибками политики отклоняется с HTTP 422 |
| GET | /api/provisioning/deployments |
История контуров |
| GET | /api/provisioning/deployments/{id} |
Карточка контура: план, смета, шаги |
| GET | /api/provisioning/deployments/{id}/file?path=… |
Один файл пакета (манифест, Terraform, чеклист) |
| GET | /api/provisioning/deployments/{id}/download |
Весь пакет контура архивом .zip |
| DELETE | /api/provisioning/deployments/{id} |
Удаление записи и файлов контура |
Пример: смета и пакет для выделенного контура
curl -X POST https://mindroot.ru/api/provisioning/plan \
-H 'Content-Type: application/json' \
-d '{"agent_slug":"context_ads_specialist",
"config":{"contour":"dedicated_vpc","provider":"vk_cloud","tasks_per_month":40000}}'
curl -X POST https://mindroot.ru/api/provisioning/deploy \
-H 'Content-Type: application/json' \
-d '{"agent_slug":"context_ads_specialist","config":{"contour":"on_premise","tenant":"bank"}}'
Вход, организации и роли
Витрина публична: каталог, карточки плагинов, скачивание пакетов и прайс доступны без входа. Всё, что связано с контурами, агентами и аккаунтом, требует токена — сессии пользователя или API-ключа организации.
| Метод | Путь | Назначение |
|---|---|---|
| POST | /api/auth/register |
{"organization": "Северный ветер", "email": "...", "password": "..."} —
организация, владелец и токен сессии |
| POST | /api/auth/login |
Вход по e-mail и паролю; если пользователь в нескольких организациях —
org_id обязателен |
| GET | /api/auth/me |
Организация, роль, список прав, лимиты тарифа и фактическое использование |
| POST | /api/auth/logout | Завершение сессии |
| GET | /api/orgs/current |
Карточка организации: тариф, квоты, ключ шифрования, число сотрудников |
| POST | /api/orgs/current/plan |
{"plan": "team"} — смена тарифа (право «менять лимиты») |
| GET/POST | /api/orgs/current/members |
Сотрудники и роли: список, приглашение; /{user_id}/role — смена роли,
DELETE /{user_id} — удаление |
| GET | /api/orgs/current/audit |
Журнал действий организации: входы, роли, ключи, тариф, контуры |
| GET/POST/DELETE | /api/account/keys |
API-ключи: создание с ролью (значение показывается один раз), список, отзыв |
| POST | /api/account/rotate-key |
Ротация ключа шифрования организации: секреты контуров перешифровываются |
| GET | /api/account/security |
Состояние защиты данных: алгоритм, схема ключей, хранилища, срок сессии |
| DELETE | /api/orgs/current |
{"confirm": "Ромашка"} — удаление организации: контуры (вместе с
каталогами и секретами), ключ шифрования, API-ключи, сотрудники и сессии.
Подтверждение — название организации; без него 422 |
Роли: владелец, администратор, разработчик агентов,
оператор, наблюдатель. Права проверяются на каждом запросе; отказ
приходит как 403 с названием недостающего права. Контур чужой
организации отвечает 404 — как несуществующий.
Удаление организации необратимо: вместе с ней уходят контуры, их секреты и журналы,
ключ шифрования, API-ключи и учётные записи сотрудников, у которых не остаётся других
организаций. Поэтому запрос требует права delete_organization (только
владелец) и подтверждения названием.
python3 scripts/check_multitenancy.py — 79 проверок по
HTTP, тестовую организацию скрипт удаляет за собой. Сквозной сценарий по четырём
организациям: python3 scripts/demo_scenario.py > docs/DEMO.md.
# токен сессии
TOKEN=$(curl -s -X POST localhost:8080/api/auth/login -H 'Content-Type: application/json' \
-d '{"email":"owner@romashka.ru","password":"mindroot"}' | python3 -c 'import json,sys;print(json.load(sys.stdin)["token"])')
# тот же запрос с API-ключом организации
curl -s localhost:8080/api/contours -H 'Authorization: Bearer mrk_...'
Контур: работающий агент
После развёртывания с target=local у контура есть собственный HTTP-интерфейс.
Задачи проходят один путь: подбор команды по формулировке → проверка политики →
исполнение кода плагина → запись в аудит. Изменяющие операции ждут человека.
| Метод | Путь | Назначение |
|---|---|---|
| GET | /api/contours | Работающие контуры: статус, агент, задачи, эндпоинт |
| GET | /c/{dep_id}/ | Панель контура: чат, подтверждения, политики, аудит, команды |
| GET | /c/{dep_id}/health | Статус контура и состав плагинов |
| POST | /c/{dep_id}/api/task | {"text": "проверь контрагента по ИНН 7707083893"} |
| POST | /c/{dep_id}/api/command | Прямой вызов: {"command": "focus_check_inn", "arguments": {"inn": "7707083893"}} |
| POST | /c/{dep_id}/api/approve | {"token": "ap-…", "user": "Иван"} — выполнить изменяющую команду |
| POST | /c/{dep_id}/api/reject | Отклонить операцию с комментарием |
| GET | /c/{dep_id}/api/report | Счётчики, ошибки, подтверждения, разбивка по плагинам, политики |
| GET | /c/{dep_id}/api/audit?limit=50 | Журнал аудита: задача, команда, аргументы, источник, время |
| GET | /c/{dep_id}/api/commands | Команды агента с параметрами и очередь подтверждений |
| GET/POST | /c/{dep_id}/api/secrets | Состав настроек без значений / подключение боевых токенов |
| POST | /c/{dep_id}/api/smoke, /api/stop | Дымовой тест и остановка контура |
# задача агенту: чтение выполняется сразу, запись уходит на подтверждение
curl -X POST localhost:8080/c/$DEP/api/task -H 'Content-Type: application/json' \
-d '{"text":"Добавь минус-слова к кампании 700112244: дешево, бесплатно","user":"Мария"}'
# решение человека
curl -X POST localhost:8080/c/$DEP/api/approve -H 'Content-Type: application/json' \
-d '{"token":"ap-1a2b3c4d5e","user":"Мария"}'