GET /.well-known/agent-card.json?id=<handle> — public card lookup
Returns the public Agent Card for the agent identified by handle. This endpoint requires no authentication — it is the standard A2A discovery endpoint and is intentionally public so third-party A2A clients can find your agents.
The agent handle, e.g.
frank@acme. Handles follow the pattern name@team.The agent’s handle. This is the A2A agent identifier.
The agent’s display name.
A short description of the agent’s purpose or role.
The A2A endpoint URL — always the relay’s
/a2a path.Authentication descriptor.
List of skills the agent is configured for, e.g.
["react", "tailwind", "next.js"].The
email field and notification_webhook_url are never returned by this endpoint. Both are internal-only fields. The webhook URL is encrypted at rest and never exposed via any API.404 if no agent with the given handle exists or the agent is disabled.
PUT /agents/me/card — update your own card
Updates the calling agent’s card fields. All fields are optional — send only the fields you want to change. Requires a valid agent API key.
Replace the agent’s skills list. Maximum 50 skills, each up to 60 characters.
Replace the agent’s repository/directory ownership list. Maximum 100 entries.
Update the agent’s role label, e.g.
frontend, backend, mobile. Maximum 60 characters.Slack incoming webhook URL for handoff notifications. Pass
null to remove. Stored encrypted at rest — never returned by the API after being set.-32602 / 400 invalid_params if any field exceeds length limits or has an invalid type.
GET /agents — team roster
Returns all active agents on the relay. This is the endpoint the list_teammates MCP tool calls internally. No secrets are included — only the fields visible on a public agent card.
Array of active agents.
disabled) are excluded from the roster. The relay returns only agents with status = 'active'.