Skip to content

HTTP routes

Every route below is served on FANOUT_ADDR (127.0.0.1:7520 by default; the image sets :7520). OTLP shares this listener but uses its own handlers and ingest credential; see send your first telemetry.

Application API errors, including unknown routes and wrong methods, return objects shaped like {"code":"bad_request","message":"Safe explanation"}. Codes are stable snake_case identifiers; clients branch on code rather than message text. Invalid dashboard or panel specs also include problems with field paths, messages and optional hints. Every error response uses Cache-Control: no-store; HEAD errors have no body. Server failures return a short, safe message; the underlying error is logged and never returned.

Default codes by HTTP status:

StatusCode
400bad_request
401unauthorized
403forbidden
404not_found
405method_not_allowed
409conflict
413payload_too_large
415unsupported_media_type
422unprocessable
429rate_limited
500internal
502bad_gateway
503unavailable
504timeout

Other 4xx statuses use bad_request; other 5xx statuses use internal. Specific conditions use already_current, dashboard_version_not_found, dashboard_version_conflict, invalid_spec and last_active_administrator. Tool failures carry error: {code, message} inside the tool result. Panel execution results keep their own status and error fields. OAuth, OTLP/gRPC, MCP JSON-RPC and AG-UI run errors keep their protocol spelling. Operational responses at /healthz, /readyz and /metrics keep their bodies.

The Requires column is not a description of the rule. It is the answer the authorization middleware gives for that exact method and path, so a route cannot be documented as public while the server treats it otherwise. Capabilities map to roles in roles.

MethodPathRequires
GET/none
GET/*none
GET/.well-known/oauth-authorization-serverprotocol handshake
GET/.well-known/oauth-protected-resourceprotocol handshake
GET/.well-known/oauth-protected-resource/mcpprotocol handshake
POST/api/agent/runsagent:run
GET/api/agent/threadsagent:run
DELETE/api/agent/threads/:idagent:run
GET/api/agent/threads/:idagent:run
PATCH/api/agent/threads/:idagent:run
GET/api/alerting/rulestelemetry:read
POST/api/alerting/rulesalerts:manage
DELETE/api/alerting/rules/:idalerts:manage
PUT/api/alerting/rules/:idalerts:manage
POST/api/alerting/rules/:id/testalerts:manage
GET/api/alertstelemetry:read
GET/api/alerts/summarytelemetry:read
POST/api/annotationstelemetry:read
POST/api/auth/code/sendnone
POST/api/auth/code/verifynone
POST/api/auth/link/verifynone
POST/api/auth/logoutany signed-in user
GET/api/auth/meany signed-in user
GET/api/auth/oauth/authorizeany signed-in user
POST/api/auth/oauth/authorizeany signed-in user
GET/api/auth/oidc/callbacknone
GET/api/auth/oidc/startnone
POST/api/auth/setupnone
GET/api/auth/statusnone
GET/api/dashboardsdashboards:manage-own
POST/api/dashboardsdashboards:manage-own
DELETE/api/dashboards/:iddashboards:manage-own
GET/api/dashboards/:iddashboards:manage-own
PATCH/api/dashboards/:iddashboards:manage-own
PUT/api/dashboards/:iddashboards:manage-own
GET/api/dashboards/:id/versionsdashboards:manage-own
GET/api/dashboards/:id/versions/:versiondashboards:manage-own
POST/api/dashboards/:id/versions/:version/restoredashboards:manage-own
GET/api/intelligencetelemetry:read
Any/api/mcptelemetry:read
POST/api/panels/exemplarstelemetry:read
POST/api/panels/querytelemetry:read
POST/api/panels/variables/resolvetelemetry:read
GET/api/settings/ingestingest:read-metadata
POST/api/settings/ingest/token/rotateingest:manage
GET/api/telemetry/schematelemetry:read
GET/api/traces/:idtelemetry:read
GET/api/usersusers:manage
POST/api/usersusers:manage
DELETE/api/users/:idusers:manage
PATCH/api/users/:idusers:manage
POST/api/users/:id/access/revokeusers:manage
PATCH/api/users/:id/roleusers:manage
PATCH/api/users/:id/statususers:manage
GET/debug/pprof/operations:read
GET/debug/pprof/:nameoperations:read
GET/debug/pprof/cmdlineoperations:read
GET/debug/pprof/profileoperations:read
GET/debug/pprof/symboloperations:read
GET/debug/pprof/traceoperations:read
GET/healthznone
Any/mcpprotocol handshake
GET/metricsoperations:read, or a service credential
POST/oauth/registerprotocol handshake
POST/oauth/tokenprotocol handshake
GET/readyznone
  • none — reachable without a credential. The health endpoints are deliberately here: a probe that needs a credential fails for the wrong reason during an outage.
  • any signed-in user — a session, but no particular capability.
  • protocol handshake — the OAuth and MCP endpoints, which authenticate as part of their own protocol rather than through the middleware.
  • a named capability — the caller’s role must carry it.
  • or a service credential — additionally reachable without a browser session, which is how a scraper reaches the metrics endpoint.

A method of Any means the route is registered for every verb, and the middleware gives the same answer for all of them — where it would not, this page fails to build rather than pick one. GET /* serves the single-page application for browser paths. Unknown /api/* and OTLP paths return errors instead.