Skip to content

Referência da REST API

O manager expõe uma única REST API com raiz em /api. O SPA em web/ a chama; você pode chamar diretamente com qualquer client HTTP. Não há GraphQL, sem gRPC para tráfego de aplicação (gRPC só é usado para o tunnel geminio, interno ao manager).

Esta página é um catálogo de rotas, não um spec swagger escrito à mão. Fonte de verdade: cmd/ongrid/main.go (os mounts chi.Router) e internal/manager/server/*/http.go (os handlers por-BC). Clique no handler para os campos exatos de struct de request/response.

Convenções

  • Base path: cada rota é prefixada /api. Então GET /v1/edges é alcançado em https://<manager>/api/v1/edges.
  • Versionamento: todas as rotas estão sob /v1/. Não há /v2/. Mudanças incompatíveis distribuem atrás de feature flags ou novas rotas.
  • Auth: bearer JWT em Authorization: Bearer .... Rotas públicas (login, refresh, register, webhooks IM, probe auth_request do Prometheus) pulam o middleware. Listadas na tabela "Públicas" abaixo.
  • Roles: admin, user, viewer. Rotas write exigem admin (ou a ação casbin relevante como edge:* / write); rotas read aceitam qualquer role autenticada. viewer pode chat mas a toolbag do agent é filtrada a ClassSafe. Veja RBAC de três roles do ADR-022.
  • Erros: JSON {"error":"code","message":"human text"}. Codes são enums estáveis (not_found, invalid_argument, unauthorized, forbidden, conflict).
  • Content type: cada request e response é application/json a menos que explicitamente notado (chat streamed é SSE, ingest de log/trace é OTLP-protobuf ou Loki-JSON).

Rotas públicas (sem auth)

MétodoPathPropósito
GET/healthzprobe de liveness
GET/readyzprobe de readiness
GET/internal/auth/dataplane-verifyprobe nginx auth_request para ingest de log/trace
POST/api/v1/auth/logintroca email+senha por JWT
POST/api/v1/auth/refreshtroca refresh token por um access token novo
POST/api/v1/auth/registerauto-registro (gateado por config)
GET/api/v1/prometheus/authprobe nginx auth_request para o embed Grafana
POST/api/v1/im/feishu/eventscallback inbound Feishu/Lark; a assinatura do webhook é a auth

Rotas autenticadas

iam (users, orgs, sessions)

MétodoPathRoleFonte
GET/v1/versionqualquercmd/ongrid/main.go (inline)
GET/v1/mequalquerinternal/iam/server/http.go
GET/v1/selfqualquerinternal/iam/server/http.go
GET/v1/usersqualquerlista users
POST/v1/usersadmincria user
PATCH/v1/users/{id}adminatualiza user (name, email)
PATCH/v1/users/{id}/passwordself ou adminrotaciona senha
PATCH/v1/users/{id}/roleadminmuda role (admin/user/viewer)
DELETE/v1/users/{id}adminremove user
GET/v1/orgsqualquerlista orgs
POST/v1/orgsadmincria org
PATCH/v1/orgs/{id}adminatualiza org
DELETE/v1/orgs/{id}adminremove org
GET/v1/orgs/{id}/membersqualquerlista members
POST/v1/orgs/{id}/membersadminadiciona member
PATCH/v1/orgs/{id}/members/{user_id}adminmuda role do member
DELETE/v1/orgs/{id}/members/{user_id}adminremove member

edge (o agent conectado ao tunnel)

MétodoPathRoleDescrição
POST/v1/edgesedge:*cria edge, emite access+secret keys
GET/v1/edgesqualquerlista edges
GET/v1/edges/{id}qualquerpega detalhe do edge
DELETE/v1/edges/{id}edge:*deleta edge
POST/v1/edges/{id}/rotate-secretedge:*rotaciona a secret key
POST/v1/edges/{id}/upgradeedge:*dispara upgrade remoto do agent com URL+sha256 explícito
POST/v1/edges/{id}/upgrade-packageedge:*upgrade one-click de bundle (ADR-024)
GET/v1/edges/{id}/processesqualquerlista de processos read-only (RPC on-demand)
GET/v1/edges/{id}/pluginsqualquerlista plugins configurados + vivos do edge (com health)
PUT/v1/edges/{id}/plugins/{name}edge:pluginhabilita/desabilita + tune de um plugin
GET/v1/integrations/plugin-countsqualquercontagens globais de plugin habilitado/desabilitado (para o tile da homepage)

device (entidade de host, desacoplada do estado do tunnel)

MétodoPathRoleDescrição
GET/v1/devicesqualquerlista host devices
GET/v1/devices/{id}qualquerpega detalhe do device
PATCH/v1/devices/{id}device:*atualiza nome de display, tags
DELETE/v1/devices/{id}device:*remove device
PATCH/v1/devices/{id}/rolesdevice:*atribui roles (db, web, cache...)
GET/v1/devices/{id}/edgesqualqueredges atualmente representando esse device
GET/v1/devices/{device_id}/shellwebshellabre um stream WebSSH (upgrade websocket)

topology (CMDB tipado)

MétodoPathRoleDescrição
GET/v1/topology/node-typesqualquerlista schemas de node-type
POST/v1/topology/node-typestopology:*cria node type
GET/v1/topology/node-types/{name}qualquerpega um node type
DELETE/v1/topology/node-types/{name}topology:*remove node type
GET/v1/topology/nodesqualquerlista nós (filtro por tipo, tag)
POST/v1/topology/nodestopology:*cria nó
GET/v1/topology/nodes/{id}qualquerpega nó
PATCH/v1/topology/nodes/{id}topology:*atualiza nó
DELETE/v1/topology/nodes/{id}topology:*remove nó
GET/v1/topology/relation-typesqualquerlista schemas de relation-type
POST/v1/topology/relation-typestopology:*cria relation type
GET/v1/topology/relation-types/{name}qualquerpega um relation type
DELETE/v1/topology/relation-types/{name}topology:*remove relation type
GET/v1/topology/relationsqualquerlista arestas (relations)
POST/v1/topology/relationstopology:*cria relation
GET/v1/topology/relations/{id}qualquerpega relation
PATCH/v1/topology/relations/{id}topology:*atualiza relation
DELETE/v1/topology/relations/{id}topology:*remove relation

alert (rules, incidents, channels)

MétodoPathRoleDescrição
GET/v1/alert-rulesqualquerlista rules
POST/v1/alert-rulesalert:*cria rule
GET/v1/alert-rules/{id}qualquerpega rule
PUT/v1/alert-rules/{id}alert:*substitui rule
DELETE/v1/alert-rules/{id}alert:*remove rule
POST/v1/alert-rules/{id}/enabledalert:*vira flag enabled
POST/v1/alert-rules/previewalert:*dry-run de uma definição de rule contra dado atual
GET/v1/alerts/incidentsqualquerlista incidents (filtros: status, severity, scope)
GET/v1/alerts/incidents/{id}qualquerpega incident
GET/v1/alerts/incidents/{id}/eventsqualquertimeline de eventos
POST/v1/alerts/incidents/{id}/ackqualqueracknowledge
POST/v1/alerts/incidents/{id}/resolvequalquermarca resolved
POST/v1/alerts/incidents/{id}/silencequalquersilencia por N horas
GET/v1/alerts/incidents/{id}/investigationqualquerpega o report de investigação gerado por IA
POST/v1/alerts/incidents/{id}/investigationqualquerdispara ou re-roda a investigação
GET/v1/alerts/runtime-infoqualquerpace do evaluator + stats do último ciclo
GET/v1/notification-channelsqualquerlista canais
POST/v1/notification-channelschannel:*cria canal
GET/v1/notification-channels/{id}qualquerpega canal
PUT/v1/notification-channels/{id}channel:*substitui canal
DELETE/v1/notification-channels/{id}channel:*remove canal
POST/v1/notification-channels/{id}/testchannel:*envia notificação sintética

Veja Schema de alert rule para o formato JSON de uma rule.

aiops (chat, agents, models)

MétodoPathRoleDescrição
GET/v1/agentsqualquerlista personas de agent
GET/v1/agents/{name}qualquerpega detalhe da persona
DELETE/v1/agents/{name}agent:*deleta uma persona built-in / disk (raro; geralmente só custom deletável)
POST/v1/agents/customagent:*cria uma persona definida pelo usuário
PATCH/v1/agents/custom/{name}agent:*atualiza user persona
DELETE/v1/agents/custom/{name}agent:*deleta user persona
GET/v1/chat/sessionsqualquerlista sessões
POST/v1/chat/sessionsqualquercria sessão
PATCH/v1/chat/sessions/{id}qualquerrenomeia / tagueia uma sessão
DELETE/v1/chat/sessions/{id}qualquerdeleta sessão
GET/v1/chat/sessions/{id}/messagesqualquerhistórico de mensagens
POST/v1/chat/sessions/{id}/messagesqualquerenvia uma mensagem (não-streaming, retorna reply final)
POST/v1/chat/sessions/{id}/messages/streamqualquerenvia uma mensagem (stream SSE de eventos token + tool-call)
GET/v1/aiops/modelsqualquerproviders + models disponíveis (gateado por API keys configuradas)
POST/v1/aiops/query-translatequalquercomposição PromQL / LogQL / TraceQL assistida por LLM
GET/v1/aiops/mentions/searchqualquerautocomplete para menções @edge, @device, @dashboard
GET/v1/usage/todayqualqueruso de token para o dia UTC corrente

Veja Formato de persona de agent para o formato do frontmatter markdown.

knowledge (RAG, vault, repos, uploads)

MétodoPathRoleDescrição
GET/v1/knowledge/docsqualquerlista documentos (árvore)
POST/v1/knowledge/docsknowledge:*cria documento
GET/v1/knowledge/docs/{id}qualquerpega documento
PATCH/v1/knowledge/docs/{id}knowledge:*edita corpo do documento
PATCH/v1/knowledge/docs/{id}/moveknowledge:*move para outro path
DELETE/v1/knowledge/docs/{id}knowledge:*remove documento
GET/v1/knowledge/pathsqualquerlista nós de path (para a árvore)
GET/v1/knowledge/reposqualquerlista repos Git
POST/v1/knowledge/reposknowledge:*registra um repo
DELETE/v1/knowledge/repos/{id}knowledge:*remove repo
POST/v1/knowledge/repos/{id}/syncknowledge:*dispara um re-sync
POST/v1/knowledge/uploadknowledge:*upload .md / .txt / .pdf / .docx (parseado via docextract)
GET/v1/knowledge/searchqualquerquery RAG (retorna chunks + scores)
POST/v1/knowledge/vault/syncknowledge:*re-puxa vault built-in do GitHub
GET/v1/knowledge/ssh-identitiesknowledge:*lista chaves SSH para auth Git
POST/v1/knowledge/ssh-identitiesknowledge:*registra uma chave SSH existente
POST/v1/knowledge/ssh-identities/generateknowledge:*gera um novo keypair (chave privada nunca sai do server)
PATCH/v1/knowledge/ssh-identities/{id}knowledge:*edita identity (name, comment)
DELETE/v1/knowledge/ssh-identities/{id}knowledge:*remove identity

skill (introspecção de toolbag)

MétodoPathRoleDescrição
GET/v1/skillsqualquerlista skills (escopo manager + escopo edge)
GET/v1/skills/{key}qualquerpega detalhe da skill (schema, descrição, scope, class)
POST/v1/skills/{key}/executeskill:*execução direta de skill (testing / debugging)

Veja Manifesto de skill para o formato skill.json on-disk.

logs / traces (proxies read-only)

MétodoPathRoleDescrição
GET/v1/logs/query_rangequalquerLogQL query_range proxiado
GET/v1/logs/labelsqualquerlabel-names proxiado
GET/v1/logs/labels/{name}/valuesqualquerlabel-values proxiado
GET/v1/traces/searchqualquerTraceQL /api/search proxiado
GET/v1/traces/{trace_id}qualquerum trace por ID
GET/v1/traces/tags/{tag}/valuesqualquer/api/search/tag/.../values proxiado

monitor (dashboards / painéis)

MétodoPathRoleDescrição
GET/v1/monitor/panelsqualquerlista painéis
POST/v1/monitor/panelsmonitor:*cria painel
PATCH/v1/monitor/panels/{id}monitor:*edita painel
DELETE/v1/monitor/panels/{id}monitor:*remove painel
GET/v1/observability/dashboards/{uid}qualquerJSON de dashboard Grafana pronto para render

metric (snapshot de métrica por-edge)

MétodoPathRoleDescrição
GET/v1/edges/{id}/metricsqualquerúltimo snapshot de métrica de host conjunto-fechado

prometheus (admin)

MétodoPathRoleDescrição
POST/v1/prometheus/launchadmin(re-)lança o Prometheus embarcado
POST/v1/prometheus/query_rangequalquerquery_range voltado ao LLM-tool (retorna matriz normalizada)

imbridge (superfícies de chat — Slack / Telegram / Lark / DingTalk / WeCom)

MétodoPathRoleDescrição
GET/v1/im/appsqualquerlista apps IM conectados
POST/v1/im/appsim:*registra app IM
GET/v1/im/apps/{id}qualquerpega app
PUT/v1/im/apps/{id}im:*atualiza app
DELETE/v1/im/apps/{id}im:*remove app
POST/v1/im/apps/{id}/revealadminrevela secrets mascarados

marketplace (skill packs)

MétodoPathRoleDescrição
GET/v1/marketplace/registriesqualquerlista registries configuradas
GET/v1/marketplace/installedqualquerlista packs instalados
POST/v1/marketplace/installmarketplace:*instala pack de um registry
DELETE/v1/marketplace/installed/{pack_id}marketplace:*desinstala pack

setting (settings do sistema: integrações, defaults, secrets)

MétodoPathRoleDescrição
GET/v1/system-settingsqualquerlista settings visíveis
PUT/v1/system-settings/{category}/{key}adminupsert de setting
DELETE/v1/system-settings/{category}/{key}adminremove setting
GET/v1/system-settings/{category}/{key}/revealadminrevela secret mascarado

integration (testes de conectividade)

MétodoPathRoleDescrição
POST/v1/integrations/grafana/syncadminsincroniza dashboards + datasources
POST/v1/integrations/grafana/testadmintesta conexão Grafana
POST/v1/integrations/llm/invalidateadmininvalida client LLM cacheado (força re-leitura de API keys)
POST/v1/integrations/loki/testadmintesta conexão Loki
POST/v1/integrations/prom/testadmintesta conexão Prometheus
POST/v1/integrations/tempo/testadmintesta conexão Tempo
POST/v1/integrations/websearch/testadmintesta backend SearXNG / web-search

webshell (shell interativo sobre o tunnel)

MétodoPathRoleDescrição
GET/v1/devices/{device_id}/shellwebshellabre stream SSH upgraded em WebSocket
GET/v1/webshell/sessionsqualquerlista sessões ativas
DELETE/v1/webshell/sessions/{id}webshellmata uma sessão

audit (log de admin)

MétodoPathRoleDescrição
GET/v1/admin/audit-logsadminaudit trail tenant-wide (HLD-010)

Paginação

Endpoints de lista usam cursores opacos:

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

A resposta carrega {"items":[...], "next_cursor":"...", "total":...}. next_cursor é vazio na última página.

Rate limits

Não há rate limits globais no build open-source. O gate de budget LLM (ONGRID_LLM_DAILY_TOKEN_LIMIT) limita tráfego de chat — todo outro endpoint depende do que você coloca na frente do manager (nginx, seu próprio gateway).

Versionamento

GET /v1/version retorna {"manager_version":"vX.Y.Z"}. O SPA lê isso e flagga edges cuja versão de agent drifta do manager. Use para tooling de upgrade.

Veja também