MindRoot.ru
Данные в РФ К документации

REST API и SDK

Два независимых API: API агентов (ядро MindRoot — запуск задач, трассировка, ключи) и API витрины (реестр плагинов, установка, публикация). Первый работает в вашем контуре, второй — публичный каталог.

API агентов (в вашем контуре)

Запуск задачи

МетодПутьНазначение
POST/task/{агент}?api_key=… Запуск задачи агентом без диалога: возвращает результат и полную трассировку
GET/api/keysУправление API-ключами (админ)
GET/logs/{session_id}Журнал сессии: команды, аргументы, результаты
curl -X POST "https://agents.yourcompany.ru/task/Менеджер по продажам?api_key=КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{"instructions": "Проверь ИНН 7707083893 и создай сделку на 250000 рублей"}' # Ответ { "status": "ok", "results": "Контрагент проверен: риск низкий. Создана сделка №12345 на 250 000 ₽.", "full_results": [ { "command": "focus_risk_score", "args": { "inn": "7707083893" }, "result": {"level": "низкий"} }, { "command": "b24_create_deal", "args": { "title": "…" }, "result": {"deal_id": 12345} } ], "log_id": "a8f3c9d1e2" }
Для серверных вызовов отключите у агента команды ожидания пользователя (wait_for_user_reply, say) и убедитесь, что включена task_result — иначе цикл задачи остановится на полпути.

Python SDK

pip install mrsdk from mrsdk import MindRoot client = MindRoot(base_url="https://agents.yourcompany.ru", api_key="КЛЮЧ") result = await client.run_task("Менеджер по продажам", instructions="Собери сводку по воронке за неделю") print(result.text) for step in result.trace: print(step.command, step.status, step.duration_ms)

JavaScript

const res = await fetch(`${BASE}/task/${encodeURIComponent(agent)}?api_key=${KEY}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instructions: 'Проверь контрагента 7707083893' }), }); const data = await res.json(); console.log(data.results, data.full_results);

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}/downloadagent.json для импорта в MindRoot
POST/api/agents/validateПроверка сценария агента: неизвестные команды, запись без подтверждения, ПДн, лимиты
POST/api/agents/exportСборка agent.json из сценария конструктора
POST/api/publishЗаявка разработчика на публикацию плагина
GET/api/pricing, /api/models Тарифы и поддерживаемые модели

Пример: поиск плагина и план установки

curl -G "https://mindroot.ru/api/plugins" --data-urlencode "q=остатки" { "total": 1, "items": [{ "slug": "1c-odata", "title": "1С:Предприятие (OData)", "category": "ERP и учёт", "commands": ["onec_get_stock", "onec_get_price", "…"], "compliance": { "data_residency": "on_premise" } }] } curl "https://mindroot.ru/api/plugins/1c-odata/install"

Аутентификация и лимиты

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"}}'
Режим dry-run. Пакет контура создаётся полностью, но облачные API не вызываются: для боевого применения нужны доступы заказчика к Yandex Cloud, VK Cloud или Selectel. Terraform-файлы — рабочая стартовая точка; перед применением сверьте имена ресурсов с документацией провайдера.

Вход, организации и роли

Витрина публична: каталог, карточки плагинов, скачивание пакетов и прайс доступны без входа. Всё, что связано с контурами, агентами и аккаунтом, требует токена — сессии пользователя или 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":"Мария"}'