Authorization: Bearer <token> or X-API-Key: <key>).
Base path: /api/v1.
Auth
Registry
Per type:mcps, agents, skills, hooks, prompts, sandboxes.
All {id} parameters accept a UUID or a name.
POST /{type}/{id}/install accepts version for agents, MCP servers, skills, and hooks. The response reports the version that was installed; component installs also return its version_id and content digest.
MCP webhook sync
Owner routes manage GitHub or GitLab webhook sync for one MCP listing. See Sync an MCP server from GitHub or GitLab.Registry forks
Only authenticated users can fork an approved listing and an approved base release. The result is an independently owned draft; no source content or counts are changed. For component endpoints,{type} is one of mcps, skills, hooks, prompts, or sandboxes.
Diff access follows normal fork-version permissions. If the upstream is no longer visible or its approved base is gone, comparison returns
404, never a saved source reference. Component diffs omit secret environment/header values and use a digest marker for install content excluded from public version responses. Fork and customize describes the workflow.
Agent versions and locks
Each agent version pins exact component versions. Installs generate every component from its pinned version. Agent versions released before pinning can have unlocked components: those install at their latest approved release, are reported withsource: fallback-latest in the install lock, and are refused by a strict install.
A component reference’s
version must name an approved (or archived) release. Drafts may also pin a release that is not approved yet, but only a caller who may read it (its owner, co-authors, admins, and reviewers); to anyone else it does not exist, as on the component version routes.
POST /agents/{id}/install also accepts strict. Its response includes version (the agent version installed) and lock: status (locked, partial, or unlocked), digest, components with each one’s source, and problems. With strict: true, any problem is a 409 and nothing is generated.
Scan
Review
Discovery (ARD)
Agentic Resource Discovery endpoints. Authentication is optional: anonymous callers see public, approved resources only whendeployment.public_registry_enabled
is on; authenticated callers see what the registry’s visibility rules
already grant them (public, their teams’, and their own drafts). Errors use the
ARD envelope {"errorCode": "INVALID_ARGUMENT", "message": "..."}. See
ADR 0001.
Search request body follows the spec:
{"query": {"text": "...", "filter": {...}}, "federation": "none", "pageSize": 5}.
Supported filter terms: type, tags, capabilities, publisher, version,
obs:kind, obs:supportedHarnesses, obs:lifecycle, obs:activatable,
obs:forksOf. The last filter takes one upstream urn:air: identifier and
returns only currently public approved direct forks. Search, List, entry,
and manifest serialization add obs:forkedFrom only while both fork and source
are currently public and approved; private lineage is never projected from a
saved reference.
Remote A2A agents
Remote agents are registered by Agent Card URL and reviewed before anyone can delegate to them. They then appear in search astype: application/a2a-agent-card+json with the reviewed card pinned in the entry
(obs:agentCard, obs:a2aInterface). Clients call the agent directly; the
server does not proxy A2A traffic. See ADR 0002.
Cards must be served over https from a public address. Internal hosts are
allowed individually with the
discovery.a2a_private_hosts setting. The
discovery.delegation_enabled setting (default on) adds the observal-agents
MCP server to every pulled Agent.
Telemetry
Session record identity is scoped by project, user, harness, session ID, and source line index. Retrying the same content at the same index is safe; different content at an already acknowledged index returns
409.
Final session requests can include session_hash and hashed_line_count. The response includes integrity_ok, server_hash, and repair_from_line. A failed audit rewinds the durable checkpoint to the first affected range; the exporter then replays that range idempotently. Hashing and canonical manifest scans occur only for final/audit requests, not incremental ingest.
Telemetry hooks
Alerts
Feedback
Admin
Requiresadmin or super_admin role.
GraphQL
Single endpoint, query + subscription via WebSocket.
Subscriptions use
graphql-ws protocol.
Health
Rate limiting
Auth endpoints are subject toRATE_LIMIT_AUTH and RATE_LIMIT_AUTH_STRICT. Non-auth endpoints are not rate-limited by default; put a reverse proxy or API gateway in front if you need it.
Request size limits
MAX_REQUEST_SIZE_MB (default 10) caps body size on all endpoints. Large telemetry batches may need tuning.

