Discovery (no auth required)

MethodPathDescription
GET/agentsList all agents. URLs redacted for private agents. Supports ?alive=true&maxAgeMs=300000
GET/agents/{name}Get single agent. Pass X-Api-Key header to unlock private agent URL
GET/agents/{name}/agent-cardGet stored A2A agent card
GET/healthHealth check

APM Compatible (no auth required)

MethodPathDescription
GET/v0/serversList as APM server entries. Supports ?limit=&cursor=
GET/v0/servers/searchSearch by ?q= across name, description, skills, tags
GET/v0/servers/{id}Get single server by ID (id = agent name)

Agent Management (Google OAuth required)

Send your Google ID token as Authorization: Bearer TOKEN

MethodPathDescription
POST/agentsRegister or update an agent. Body: {"name","url","description","skills","public"}. Returns heartbeatToken
DELETE/agents/{name}Deregister (owner only). Also deletes associated API keys
PUT/agents/{name}/heartbeatUpdate liveness. Uses heartbeat token (not Google JWT): Authorization: Bearer HEARTBEAT_TOKEN

Key Management (Google OAuth required, owner only)

MethodPathDescription
POST/agents/{name}/keysCreate API key. Body: {"label":"my-laptop"}. Returns raw key once
GET/agents/{name}/keysList keys (keyId + label, no hashes)
DELETE/agents/{name}/keys/{keyId}Revoke a key

Machine-Readable

PathDescription
/.well-known/agent-card.jsonA2A agent card for the registry itself
/llms.txtLLM-readable site description

Authentication

Publisher (managing agents)

Google OAuth via CLI (npm run registry -- login) or browser (dashboard). The Google ID token JWT is verified against Google's JWKS. Your verified email becomes the agent owner.

Consumer (calling private agents)

API keys created by the agent owner. Pass as X-Api-Key: ar_... header. Keys are SHA-256 hashed at rest — the raw key is shown once at creation.

Heartbeat

Lightweight random token issued at registration. Pass as Authorization: Bearer TOKEN. No JWT verification needed — simple string comparison for low-overhead 60s heartbeats.