Skip to content

Référence API REST

Le manager expose une seule API REST racinée à /api. La SPA dans web/ l'appelle ; vous pouvez l'appeler directement avec n'importe quel client HTTP. Il n'y a pas de GraphQL, pas de gRPC pour le trafic applicatif (gRPC n'est utilisé que pour le tunnel geminio, interne au manager).

Cette page est un catalogue de routes, pas une spec swagger écrite à la main. Source de vérité : cmd/ongrid/main.go (les mounts chi.Router) et internal/manager/server/*/http.go (les handlers par BC). Cliquez vers le handler pour les champs exacts de struct requête/réponse.

Conventions

  • Chemin de base : chaque route est préfixée /api. Donc GET /v1/edges est atteint à https://<manager>/api/v1/edges.
  • Versioning : toutes les routes sont sous /v1/. Il n'y a pas de /v2/. Les changements rétro-incompatibles partent derrière des feature flags ou de nouvelles routes.
  • Auth : JWT bearer dans Authorization: Bearer .... Les routes publiques (login, refresh, register, webhooks IM, sonde auth_request de Prometheus) sautent le middleware. Listées dans le tableau « Public » ci-dessous.
  • Rôles : admin, user, viewer. Les routes write requièrent admin (ou l'action casbin pertinente comme edge:* / write) ; les routes read acceptent n'importe quel rôle authentifié. viewer peut chatter mais le sac d'outils de l'agent est filtré à ClassSafe. Voir RBAC à trois rôles ADR-022.
  • Erreurs : JSON {"error":"code","message":"human text"}. Les codes sont des enums stables (not_found, invalid_argument, unauthorized, forbidden, conflict).
  • Type de contenu : chaque requête et réponse est application/json sauf si explicitement noté (chat streamé est SSE, ingest log/trace est OTLP-protobuf ou Loki-JSON).

Routes publiques (pas d'auth)

MéthodeCheminRôle
GET/healthzsonde de liveness
GET/readyzsonde de readiness
GET/internal/auth/dataplane-verifysonde auth_request nginx pour ingest log/trace
POST/api/v1/auth/loginéchange email+mot de passe contre JWT
POST/api/v1/auth/refreshéchange refresh token contre access token frais
POST/api/v1/auth/registerauto-enregistrement (gaté par config)
GET/api/v1/prometheus/authsonde auth_request nginx pour l'embed Grafana
POST/api/v1/im/feishu/eventscallback Feishu/Lark entrant ; la signature de webhook est l'auth

Routes authentifiées

iam (utilisateurs, orgs, sessions)

MéthodeCheminRôleSource
GET/v1/versiontouscmd/ongrid/main.go (inline)
GET/v1/metousinternal/iam/server/http.go
GET/v1/selftousinternal/iam/server/http.go
GET/v1/userstouslister utilisateurs
POST/v1/usersadmincréer utilisateur
PATCH/v1/users/{id}adminmettre à jour utilisateur (nom, email)
PATCH/v1/users/{id}/passwordself ou adminrotater mot de passe
PATCH/v1/users/{id}/roleadminchanger rôle (admin/user/viewer)
DELETE/v1/users/{id}adminretirer utilisateur
GET/v1/orgstouslister orgs
POST/v1/orgsadmincréer org
PATCH/v1/orgs/{id}adminmettre à jour org
DELETE/v1/orgs/{id}adminretirer org
GET/v1/orgs/{id}/memberstouslister membres
POST/v1/orgs/{id}/membersadminajouter membre
PATCH/v1/orgs/{id}/members/{user_id}adminchanger rôle de membre
DELETE/v1/orgs/{id}/members/{user_id}adminretirer membre

edge (l'agent connecté au tunnel)

MéthodeCheminRôleDescription
POST/v1/edgesedge:*créer edge, émet clés access+secret
GET/v1/edgestouslister edges
GET/v1/edges/{id}tousobtenir détail d'edge
DELETE/v1/edges/{id}edge:*supprimer edge
POST/v1/edges/{id}/rotate-secretedge:*rotater la clé secrète
POST/v1/edges/{id}/upgradeedge:*déclencher upgrade d'agent distant avec URL+sha256 explicites
POST/v1/edges/{id}/upgrade-packageedge:*upgrade de bundle en un clic (ADR-024)
GET/v1/edges/{id}/processestousliste de processus lecture seule (RPC à la demande)
GET/v1/edges/{id}/pluginstouslister les plugins configurés + live de l'edge (avec santé)
PUT/v1/edges/{id}/plugins/{name}edge:pluginactiver/désactiver + tuner un plugin
GET/v1/integrations/plugin-countstouscomptes globaux d'activation/désactivation de plugins (pour la tile homepage)

device (entité host, découplée de l'état du tunnel)

MéthodeCheminRôleDescription
GET/v1/devicestouslister devices host
GET/v1/devices/{id}tousobtenir détail de device
PATCH/v1/devices/{id}device:*mettre à jour nom d'affichage, tags
DELETE/v1/devices/{id}device:*retirer device
PATCH/v1/devices/{id}/rolesdevice:*assigner rôles (db, web, cache...)
GET/v1/devices/{id}/edgestousedges représentant actuellement ce device
GET/v1/devices/{device_id}/shellwebshellouvrir un stream WebSSH (upgrade websocket)

topology (CMDB typé)

MéthodeCheminRôleDescription
GET/v1/topology/node-typestouslister schémas de node-type
POST/v1/topology/node-typestopology:*créer type de nœud
GET/v1/topology/node-types/{name}tousobtenir un type de nœud
DELETE/v1/topology/node-types/{name}topology:*retirer type de nœud
GET/v1/topology/nodestouslister nœuds (filtrer par type, tag)
POST/v1/topology/nodestopology:*créer nœud
GET/v1/topology/nodes/{id}tousobtenir nœud
PATCH/v1/topology/nodes/{id}topology:*mettre à jour nœud
DELETE/v1/topology/nodes/{id}topology:*retirer nœud
GET/v1/topology/relation-typestouslister schémas de relation-type
POST/v1/topology/relation-typestopology:*créer type de relation
GET/v1/topology/relation-types/{name}tousobtenir un type de relation
DELETE/v1/topology/relation-types/{name}topology:*retirer type de relation
GET/v1/topology/relationstouslister arêtes (relations)
POST/v1/topology/relationstopology:*créer relation
GET/v1/topology/relations/{id}tousobtenir relation
PATCH/v1/topology/relations/{id}topology:*mettre à jour relation
DELETE/v1/topology/relations/{id}topology:*retirer relation

alert (règles, incidents, canaux)

MéthodeCheminRôleDescription
GET/v1/alert-rulestouslister règles
POST/v1/alert-rulesalert:*créer règle
GET/v1/alert-rules/{id}tousobtenir règle
PUT/v1/alert-rules/{id}alert:*remplacer règle
DELETE/v1/alert-rules/{id}alert:*retirer règle
POST/v1/alert-rules/{id}/enabledalert:*basculer le flag enabled
POST/v1/alert-rules/previewalert:*dry-run une définition de règle contre les données courantes
GET/v1/alerts/incidentstouslister incidents (filtres : statut, sévérité, scope)
GET/v1/alerts/incidents/{id}tousobtenir incident
GET/v1/alerts/incidents/{id}/eventstoustimeline d'événements
POST/v1/alerts/incidents/{id}/acktousacknowledger
POST/v1/alerts/incidents/{id}/resolvetousmarquer résolu
POST/v1/alerts/incidents/{id}/silencetoussilencer pour N heures
GET/v1/alerts/incidents/{id}/investigationtousobtenir le rapport d'investigation généré par IA
POST/v1/alerts/incidents/{id}/investigationtousdéclencher ou ré-exécuter l'investigation
GET/v1/alerts/runtime-infotouspace d'evaluator + stats du dernier cycle
GET/v1/notification-channelstouslister canaux
POST/v1/notification-channelschannel:*créer canal
GET/v1/notification-channels/{id}tousobtenir canal
PUT/v1/notification-channels/{id}channel:*remplacer canal
DELETE/v1/notification-channels/{id}channel:*retirer canal
POST/v1/notification-channels/{id}/testchannel:*envoyer une notification synthétique

Voir Schéma de règle d'alerte pour la forme JSON d'une règle.

aiops (chat, agents, modèles)

MéthodeCheminRôleDescription
GET/v1/agentstouslister personas d'agent
GET/v1/agents/{name}tousobtenir détail de persona
DELETE/v1/agents/{name}agent:*supprimer une persona built-in / disk (rare ; généralement seul custom est supprimable)
POST/v1/agents/customagent:*créer une persona user-défini
PATCH/v1/agents/custom/{name}agent:*mettre à jour persona user
DELETE/v1/agents/custom/{name}agent:*supprimer persona user
GET/v1/chat/sessionstouslister sessions
POST/v1/chat/sessionstouscréer session
PATCH/v1/chat/sessions/{id}tousrenommer / taguer une session
DELETE/v1/chat/sessions/{id}toussupprimer session
GET/v1/chat/sessions/{id}/messagestoushistorique de messages
POST/v1/chat/sessions/{id}/messagestousenvoyer un message (non-streaming, renvoie la réponse finale)
POST/v1/chat/sessions/{id}/messages/streamtousenvoyer un message (stream SSE d'événements token + tool-call)
GET/v1/aiops/modelstousproviders + modèles disponibles (gaté par les clés d'API configurées)
POST/v1/aiops/query-translatetouscomposition PromQL / LogQL / TraceQL assistée par LLM
GET/v1/aiops/mentions/searchtousautocomplete pour les mentions @edge, @device, @dashboard
GET/v1/usage/todaytousutilisation de tokens pour le jour UTC courant

Voir Format de persona d'agent pour la forme du frontmatter markdown.

knowledge (RAG, vault, repos, uploads)

MéthodeCheminRôleDescription
GET/v1/knowledge/docstouslister documents (arbre)
POST/v1/knowledge/docsknowledge:*créer document
GET/v1/knowledge/docs/{id}tousobtenir document
PATCH/v1/knowledge/docs/{id}knowledge:*éditer corps de document
PATCH/v1/knowledge/docs/{id}/moveknowledge:*déplacer vers un autre chemin
DELETE/v1/knowledge/docs/{id}knowledge:*retirer document
GET/v1/knowledge/pathstouslister nœuds de chemin (pour l'arbre)
GET/v1/knowledge/repostouslister repos Git
POST/v1/knowledge/reposknowledge:*enregistrer un repo
DELETE/v1/knowledge/repos/{id}knowledge:*retirer repo
POST/v1/knowledge/repos/{id}/syncknowledge:*déclencher une re-sync
POST/v1/knowledge/uploadknowledge:*uploader .md / .txt / .pdf / .docx (parsé via docextract)
GET/v1/knowledge/searchtousrequête RAG (renvoie chunks + scores)
POST/v1/knowledge/vault/syncknowledge:*re-tirer le vault intégré depuis GitHub
GET/v1/knowledge/ssh-identitiesknowledge:*lister clés SSH pour auth Git
POST/v1/knowledge/ssh-identitiesknowledge:*enregistrer une clé SSH existante
POST/v1/knowledge/ssh-identities/generateknowledge:*générer un nouveau keypair (la clé privée ne quitte jamais le serveur)
PATCH/v1/knowledge/ssh-identities/{id}knowledge:*éditer identité (nom, commentaire)
DELETE/v1/knowledge/ssh-identities/{id}knowledge:*retirer identité

skill (introspection du sac d'outils)

MéthodeCheminRôleDescription
GET/v1/skillstouslister skills (scope manager + scope edge)
GET/v1/skills/{key}tousobtenir détail de skill (schéma, description, scope, class)
POST/v1/skills/{key}/executeskill:*exécution directe de skill (test / debugging)

Voir Manifeste de skill pour la forme skill.json sur disque.

logs / traces (proxies en lecture seule)

MéthodeCheminRôleDescription
GET/v1/logs/query_rangetousLogQL query_range proxifié
GET/v1/logs/labelstouslabel-names proxifiés
GET/v1/logs/labels/{name}/valuestouslabel-values proxifiés
GET/v1/traces/searchtousTraceQL /api/search proxifié
GET/v1/traces/{trace_id}tousune trace par ID
GET/v1/traces/tags/{tag}/valuestous/api/search/tag/.../values proxifié

monitor (dashboards / panels)

MéthodeCheminRôleDescription
GET/v1/monitor/panelstouslister panels
POST/v1/monitor/panelsmonitor:*créer panel
PATCH/v1/monitor/panels/{id}monitor:*éditer panel
DELETE/v1/monitor/panels/{id}monitor:*retirer panel
GET/v1/observability/dashboards/{uid}tousJSON de dashboard Grafana prêt à rendre

metric (snapshot de métrique par edge)

MéthodeCheminRôleDescription
GET/v1/edges/{id}/metricstousdernier snapshot de métrique host en ensemble fermé

prometheus (admin)

MéthodeCheminRôleDescription
POST/v1/prometheus/launchadmin(re-)lancer le Prometheus embarqué
POST/v1/prometheus/query_rangetousquery_range pour outils LLM (renvoie matrix normalisée)

imbridge (surfaces de chat — Slack / Telegram / Lark / DingTalk / WeCom)

MéthodeCheminRôleDescription
GET/v1/im/appstouslister apps IM connectées
POST/v1/im/appsim:*enregistrer app IM
GET/v1/im/apps/{id}tousobtenir app
PUT/v1/im/apps/{id}im:*mettre à jour app
DELETE/v1/im/apps/{id}im:*retirer app
POST/v1/im/apps/{id}/revealadminrévéler secrets masqués

marketplace (skill packs)

MéthodeCheminRôleDescription
GET/v1/marketplace/registriestouslister registries configurés
GET/v1/marketplace/installedtouslister packs installés
POST/v1/marketplace/installmarketplace:*installer pack depuis un registry
DELETE/v1/marketplace/installed/{pack_id}marketplace:*désinstaller pack

setting (settings système : intégrations, défauts, secrets)

MéthodeCheminRôleDescription
GET/v1/system-settingstouslister settings visibles
PUT/v1/system-settings/{category}/{key}adminupsert setting
DELETE/v1/system-settings/{category}/{key}adminretirer setting
GET/v1/system-settings/{category}/{key}/revealadminrévéler secret masqué

integration (tests de connectivité)

MéthodeCheminRôleDescription
POST/v1/integrations/grafana/syncadminsync dashboards + datasources
POST/v1/integrations/grafana/testadmintester la connexion Grafana
POST/v1/integrations/llm/invalidateadmininvalider le client LLM caché (force re-lecture des clés API)
POST/v1/integrations/loki/testadmintester la connexion Loki
POST/v1/integrations/prom/testadmintester la connexion Prometheus
POST/v1/integrations/tempo/testadmintester la connexion Tempo
POST/v1/integrations/websearch/testadmintester le backend SearXNG / web-search

webshell (shell interactif sur le tunnel)

MéthodeCheminRôleDescription
GET/v1/devices/{device_id}/shellwebshellouvrir stream SSH upgradé en WebSocket
GET/v1/webshell/sessionstouslister sessions actives
DELETE/v1/webshell/sessions/{id}webshelltuer une session

audit (log admin)

MéthodeCheminRôleDescription
GET/v1/admin/audit-logsadminpiste d'audit tenant-wide (HLD-010)

Pagination

Les endpoints de liste utilisent des curseurs opaques :

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

La réponse porte {"items":[...], "next_cursor":"...", "total":...}. next_cursor est vide à la dernière page.

Rate limits

Il n'y a pas de rate limits globaux dans le build open-source. Le gate de budget LLM (ONGRID_LLM_DAILY_TOKEN_LIMIT) borne le trafic de chat — chaque autre endpoint dépend de ce que vous mettez devant le manager (nginx, votre propre gateway).

Versioning

GET /v1/version renvoie {"manager_version":"vX.Y.Z"}. La SPA lit ceci et flag les edges dont la version d'agent dérive du manager. Utilisez-le pour l'outillage d'upgrade.

Voir aussi