Skip to content

Справочник REST API

Manager выставляет единый REST API с корнем /api. SPA в web/ его вызывает; вы можете вызывать его напрямую любым HTTP-клиентом. Нет GraphQL, нет gRPC для трафика приложения (gRPC используется только для geminio-туннеля, внутри manager'а).

Эта страница — каталог маршрутов, не написанная вручную swagger-спецификация. Источник истины: cmd/ongrid/main.go (mounts chi.Router'а) и internal/manager/server/*/http.go (per-BC обработчики). Кликайте по handler'у для точных полей struct request/response.

Соглашения

  • Базовый путь: каждый маршрут имеет префикс /api. Так что GET /v1/edges доступен по https://<manager>/api/v1/edges.
  • Версионирование: все маршруты под /v1/. Нет /v2/. Несовместимые изменения едут за feature-флагами или новыми маршрутами.
  • Auth: bearer JWT в Authorization: Bearer .... Публичные маршруты (login, refresh, register, IM webhooks, auth_request-проба Prometheus) пропускают middleware. Перечислены в таблице "Public" ниже.
  • Роли: admin, user, viewer. Write-маршруты требуют admin (или соответствующего casbin-действия типа edge:* / write); read-маршруты принимают любую авторизованную роль. viewer может вести чат, но toolbag агента фильтруется до ClassSafe. См. ADR-022 three-role RBAC.
  • Ошибки: JSON {"error":"code","message":"human text"}. Коды — стабильные enum'ы (not_found, invalid_argument, unauthorized, forbidden, conflict).
  • Content type: каждый запрос и ответ — application/json, если явно не указано иное (streaming chat — SSE, ingest логов/трейсов — OTLP-protobuf или Loki-JSON).

Публичные маршруты (без auth)

МетодПутьНазначение
GET/healthzliveness-проба
GET/readyzreadiness-проба
GET/internal/auth/dataplane-verifyauth_request-проба nginx для ingest'а логов/трейсов
POST/api/v1/auth/loginобмен email+пароль на JWT
POST/api/v1/auth/refreshобмен refresh-токена на новый access-токен
POST/api/v1/auth/registerсамостоятельная регистрация (гейтится конфигом)
GET/api/v1/prometheus/authauth_request-проба nginx для Grafana embed
POST/api/v1/im/feishu/eventsвходящий Feishu/Lark callback; auth — это webhook-подпись

Авторизованные маршруты

iam (пользователи, организации, сессии)

МетодПутьРольИсточник
GET/v1/versionanycmd/ongrid/main.go (inline)
GET/v1/meanyinternal/iam/server/http.go
GET/v1/selfanyinternal/iam/server/http.go
GET/v1/usersanyсписок пользователей
POST/v1/usersadminсоздать пользователя
PATCH/v1/users/{id}adminобновить пользователя (имя, email)
PATCH/v1/users/{id}/passwordself or adminсменить пароль
PATCH/v1/users/{id}/roleadminсменить роль (admin/user/viewer)
DELETE/v1/users/{id}adminудалить пользователя
GET/v1/orgsanyсписок организаций
POST/v1/orgsadminсоздать организацию
PATCH/v1/orgs/{id}adminобновить организацию
DELETE/v1/orgs/{id}adminудалить организацию
GET/v1/orgs/{id}/membersanyсписок участников
POST/v1/orgs/{id}/membersadminдобавить участника
PATCH/v1/orgs/{id}/members/{user_id}adminсменить роль участника
DELETE/v1/orgs/{id}/members/{user_id}adminудалить участника

edge (агент, подключённый по туннелю)

МетодПутьРольОписание
POST/v1/edgesedge:*создать edge, выдаёт access+secret ключи
GET/v1/edgesanyсписок edges
GET/v1/edges/{id}anyдетали edge
DELETE/v1/edges/{id}edge:*удалить edge
POST/v1/edges/{id}/rotate-secretedge:*ротация secret-ключа
POST/v1/edges/{id}/upgradeedge:*триггер удалённого апгрейда агента с явным URL+sha256
POST/v1/edges/{id}/upgrade-packageedge:*one-click bundle-апгрейд (ADR-024)
GET/v1/edges/{id}/processesanyread-only список процессов (on-demand RPC)
GET/v1/edges/{id}/pluginsanyсписок настроенных + live плагинов edge (с health)
PUT/v1/edges/{id}/plugins/{name}edge:pluginвключить/выключить + настроить плагин
GET/v1/integrations/plugin-countsanyглобальные счётчики enable/disable плагинов (для плитки на главной)

device (host-сущность, отвязана от состояния туннеля)

МетодПутьРольОписание
GET/v1/devicesanyсписок host-устройств
GET/v1/devices/{id}anyдетали устройства
PATCH/v1/devices/{id}device:*обновить отображаемое имя, теги
DELETE/v1/devices/{id}device:*удалить устройство
PATCH/v1/devices/{id}/rolesdevice:*назначить роли (db, web, cache...)
GET/v1/devices/{id}/edgesanyedges, представляющие это устройство сейчас
GET/v1/devices/{device_id}/shellwebshellоткрыть поток WebSSH (websocket upgrade)

topology (типизированная CMDB)

МетодПутьРольОписание
GET/v1/topology/node-typesanyсписок схем типов узлов
POST/v1/topology/node-typestopology:*создать тип узла
GET/v1/topology/node-types/{name}anyполучить один тип узла
DELETE/v1/topology/node-types/{name}topology:*удалить тип узла
GET/v1/topology/nodesanyсписок узлов (фильтр по типу, тегу)
POST/v1/topology/nodestopology:*создать узел
GET/v1/topology/nodes/{id}anyполучить узел
PATCH/v1/topology/nodes/{id}topology:*обновить узел
DELETE/v1/topology/nodes/{id}topology:*удалить узел
GET/v1/topology/relation-typesanyсписок схем типов связей
POST/v1/topology/relation-typestopology:*создать тип связи
GET/v1/topology/relation-types/{name}anyполучить один тип связи
DELETE/v1/topology/relation-types/{name}topology:*удалить тип связи
GET/v1/topology/relationsanyсписок рёбер (связей)
POST/v1/topology/relationstopology:*создать связь
GET/v1/topology/relations/{id}anyполучить связь
PATCH/v1/topology/relations/{id}topology:*обновить связь
DELETE/v1/topology/relations/{id}topology:*удалить связь

alert (правила, инциденты, каналы)

МетодПутьРольОписание
GET/v1/alert-rulesanyсписок правил
POST/v1/alert-rulesalert:*создать правило
GET/v1/alert-rules/{id}anyполучить правило
PUT/v1/alert-rules/{id}alert:*заменить правило
DELETE/v1/alert-rules/{id}alert:*удалить правило
POST/v1/alert-rules/{id}/enabledalert:*переключить флаг enabled
POST/v1/alert-rules/previewalert:*dry-run определения правила на текущих данных
GET/v1/alerts/incidentsanyсписок инцидентов (фильтры: status, severity, scope)
GET/v1/alerts/incidents/{id}anyполучить инцидент
GET/v1/alerts/incidents/{id}/eventsanyтаймлайн событий
POST/v1/alerts/incidents/{id}/ackanyподтвердить (acknowledge)
POST/v1/alerts/incidents/{id}/resolveanyпометить как resolved
POST/v1/alerts/incidents/{id}/silenceanyзаглушить на N часов
GET/v1/alerts/incidents/{id}/investigationanyполучить AI-сгенерированный investigation-отчёт
POST/v1/alerts/incidents/{id}/investigationanyзапустить или перезапустить расследование
GET/v1/alerts/runtime-infoanyтемп evaluator'а + статистика последнего цикла
GET/v1/notification-channelsanyсписок каналов
POST/v1/notification-channelschannel:*создать канал
GET/v1/notification-channels/{id}anyполучить канал
PUT/v1/notification-channels/{id}channel:*заменить канал
DELETE/v1/notification-channels/{id}channel:*удалить канал
POST/v1/notification-channels/{id}/testchannel:*отправить синтетическое уведомление

См. схему правила алерта для JSON-формы правила.

aiops (chat, агенты, модели)

МетодПутьРольОписание
GET/v1/agentsanyсписок personas агента
GET/v1/agents/{name}anyдетали persona
DELETE/v1/agents/{name}agent:*удалить встроенную / disk persona (редко; обычно удаляется только custom)
POST/v1/agents/customagent:*создать пользовательскую persona
PATCH/v1/agents/custom/{name}agent:*обновить пользовательскую persona
DELETE/v1/agents/custom/{name}agent:*удалить пользовательскую persona
GET/v1/chat/sessionsanyсписок сессий
POST/v1/chat/sessionsanyсоздать сессию
PATCH/v1/chat/sessions/{id}anyпереименовать / отметить сессию тегом
DELETE/v1/chat/sessions/{id}anyудалить сессию
GET/v1/chat/sessions/{id}/messagesanyистория сообщений
POST/v1/chat/sessions/{id}/messagesanyотправить сообщение (non-streaming, возвращает финальный ответ)
POST/v1/chat/sessions/{id}/messages/streamanyотправить сообщение (SSE-поток событий токенов + tool-call)
GET/v1/aiops/modelsanyдоступные provider'ы + модели (гейтятся настроенными API-ключами)
POST/v1/aiops/query-translateanyLLM-assisted композиция PromQL / LogQL / TraceQL
GET/v1/aiops/mentions/searchanyавтодополнение для упоминаний @edge, @device, @dashboard
GET/v1/usage/todayanyиспользование токенов за текущий UTC-день

См. формат persona агента для формы markdown frontmatter.

knowledge (RAG, vault, repos, uploads)

МетодПутьРольОписание
GET/v1/knowledge/docsanyсписок документов (tree)
POST/v1/knowledge/docsknowledge:*создать документ
GET/v1/knowledge/docs/{id}anyполучить документ
PATCH/v1/knowledge/docs/{id}knowledge:*редактировать тело документа
PATCH/v1/knowledge/docs/{id}/moveknowledge:*переместить в другой путь
DELETE/v1/knowledge/docs/{id}knowledge:*удалить документ
GET/v1/knowledge/pathsanyсписок path-узлов (для дерева)
GET/v1/knowledge/reposanyсписок Git-репозиториев
POST/v1/knowledge/reposknowledge:*зарегистрировать репозиторий
DELETE/v1/knowledge/repos/{id}knowledge:*удалить репозиторий
POST/v1/knowledge/repos/{id}/syncknowledge:*запустить re-sync
POST/v1/knowledge/uploadknowledge:*загрузить .md / .txt / .pdf / .docx (парсится через docextract)
GET/v1/knowledge/searchanyRAG-запрос (возвращает chunks + scores)
POST/v1/knowledge/vault/syncknowledge:*заново подтянуть встроенный vault из GitHub
GET/v1/knowledge/ssh-identitiesknowledge:*список SSH-ключей для Git auth
POST/v1/knowledge/ssh-identitiesknowledge:*зарегистрировать существующий SSH-ключ
POST/v1/knowledge/ssh-identities/generateknowledge:*сгенерировать новую keypair (приватный ключ никогда не покидает сервер)
PATCH/v1/knowledge/ssh-identities/{id}knowledge:*редактировать identity (имя, комментарий)
DELETE/v1/knowledge/ssh-identities/{id}knowledge:*удалить identity

skill (интроспекция toolbag)

МетодПутьРольОписание
GET/v1/skillsanyсписок скиллов (manager-scope + edge-scope)
GET/v1/skills/{key}anyдетали скилла (схема, описание, scope, class)
POST/v1/skills/{key}/executeskill:*прямое исполнение скилла (тестирование / отладка)

См. skill-манифест для формы on-disk skill.json.

logs / traces (read-only прокси)

МетодПутьРольОписание
GET/v1/logs/query_rangeanyпроксированный LogQL query_range
GET/v1/logs/labelsanyпроксированные label-names
GET/v1/logs/labels/{name}/valuesanyпроксированные label-values
GET/v1/traces/searchanyпроксированный TraceQL /api/search
GET/v1/traces/{trace_id}anyодин trace по ID
GET/v1/traces/tags/{tag}/valuesanyпроксированный /api/search/tag/.../values

monitor (дашборды / панели)

МетодПутьРольОписание
GET/v1/monitor/panelsanyсписок панелей
POST/v1/monitor/panelsmonitor:*создать панель
PATCH/v1/monitor/panels/{id}monitor:*редактировать панель
DELETE/v1/monitor/panels/{id}monitor:*удалить панель
GET/v1/observability/dashboards/{uid}anyготовый к рендеру JSON Grafana-дашборда

metric (snapshot метрик per-edge)

МетодПутьРольОписание
GET/v1/edges/{id}/metricsanyпоследний snapshot host-метрик из закрытого набора

prometheus (admin)

МетодПутьРольОписание
POST/v1/prometheus/launchadmin(пере)запустить встроенный Prometheus
POST/v1/prometheus/query_rangeanyLLM-tool-facing query_range (возвращает нормализованную матрицу)

imbridge (чат-поверхности — Slack / Telegram / Lark / DingTalk / WeCom)

МетодПутьРольОписание
GET/v1/im/appsanyсписок подключённых IM-приложений
POST/v1/im/appsim:*зарегистрировать IM-приложение
GET/v1/im/apps/{id}anyполучить приложение
PUT/v1/im/apps/{id}im:*обновить приложение
DELETE/v1/im/apps/{id}im:*удалить приложение
POST/v1/im/apps/{id}/revealadminраскрыть замаскированные секреты

marketplace (skill-паки)

МетодПутьРольОписание
GET/v1/marketplace/registriesanyсписок настроенных registry
GET/v1/marketplace/installedanyсписок установленных паков
POST/v1/marketplace/installmarketplace:*установить пак из registry
DELETE/v1/marketplace/installed/{pack_id}marketplace:*удалить пак

setting (системные настройки: интеграции, дефолты, секреты)

МетодПутьРольОписание
GET/v1/system-settingsanyсписок видимых настроек
PUT/v1/system-settings/{category}/{key}adminupsert настройки
DELETE/v1/system-settings/{category}/{key}adminудалить настройку
GET/v1/system-settings/{category}/{key}/revealadminраскрыть замаскированный секрет

integration (тесты подключений)

МетодПутьРольОписание
POST/v1/integrations/grafana/syncadminсинхронизация дашбордов + datasources
POST/v1/integrations/grafana/testadminпроверка подключения к Grafana
POST/v1/integrations/llm/invalidateadminинвалидировать кешированного LLM-клиента (принудительно перечитать API-ключи)
POST/v1/integrations/loki/testadminпроверка подключения к Loki
POST/v1/integrations/prom/testadminпроверка подключения к Prometheus
POST/v1/integrations/tempo/testadminпроверка подключения к Tempo
POST/v1/integrations/websearch/testadminпроверка SearXNG / бэкенда web-search

webshell (интерактивный shell поверх туннеля)

МетодПутьРольОписание
GET/v1/devices/{device_id}/shellwebshellоткрыть SSH-поток с WebSocket-upgrade
GET/v1/webshell/sessionsanyсписок активных сессий
DELETE/v1/webshell/sessions/{id}webshellзавершить сессию

audit (admin log)

МетодПутьРольОписание
GET/v1/admin/audit-logsadmintenant-wide audit-trail (HLD-010)

Пагинация

List-эндпоинты используют непрозрачные курсоры:

text
GET /v1/edges?limit=50&cursor=eyJpZCI6MTAwMH0

Ответ несёт {"items":[...], "next_cursor":"...", "total":...}. next_cursor пуст на последней странице.

Rate limits

В open-source-сборке нет глобальных rate limit'ов. LLM-гейт бюджета (ONGRID_LLM_DAILY_TOKEN_LIMIT) ограничивает чат-трафик — каждый другой эндпоинт зависит от того, что вы поставили перед manager'ом (nginx, ваш собственный gateway).

Версионирование

GET /v1/version возвращает {"manager_version":"vX.Y.Z"}. SPA читает это и помечает edges, у которых версия агента дрейфит относительно manager'а. Используйте для апгрейд-тулинга.

См. также