Skip to main content

Agent Registry

Register agents in the cloud, manage their A2A identity cards, and discover agents by capability.

Base path: /api/v1/cloud/agents

Local Agent Auto-Registration

Local OpenClaw agents use the ensure_registered() function in agent_report.py to auto-register on first run. The registration (agent_id and API key) is cached locally in ~/.ainative/agent_registration.json, so subsequent runs skip the registration call. If you need to re-register, delete the cached file.

POST /register

Register a new agent with an optional A2A card. Requires user authentication.

The two required fields are agent_type and capabilities — there is no name, agent_name, or callback_url field on this endpoint. Sending those returns 422 Unprocessable Entity.

curl -X POST https://api.ainative.studio/api/v1/cloud/agents/register \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"agent_type": "code-reviewer",
"capabilities": ["code-review", "testing"],
"protocols": ["mcp", "a2a"],
"is_public": true,
"endpoint_url": "https://my-agent.example.com",
"description": "A helpful research agent",
"agent_card": {
"name": "My Agent",
"description": "A helpful research agent",
"version": "1.0.0",
"skills": [
{ "name": "code-review", "description": "Reviews pull requests" }
],
"input_modes": ["text"],
"output_modes": ["text"]
}
}'

Request fields:

FieldTypeRequiredDescription
agent_typestringyesType of agent, e.g. code-reviewer, translator (1–100 chars)
capabilitiesstring[]yesAt least one capability slug, e.g. ["code-review", "testing"]. Lower-cased and trimmed server-side.
protocolsstring[]noSupported protocols. Defaults to ["mcp"]. Valid values: mcp, a2a, rest, grpc, websocket.
agent_cardobjectnoA2A-spec card. Uses name, description, version, skills[], input_modes[], output_modes[], meta.
endpoint_urlstringnoAgent's callable endpoint. Must be HTTPS.
is_publicboolnoWhether the agent is discoverable by others. Default false.
descriptionstringnoFree-text description (≤ 1000 chars).
modelstringnoModel backing the agent.
operatorstringnoOperator/owner label.
toolsstring[]noTools to bundle. Defaults to the standard tool set if omitted.
mcp_serversobject[]noMCP server configs to attach at registration. See MCP Configuration.

Response (201):

{
"agent_id": "agent-a1b2c3d4e5f6",
"agent_type": "code-reviewer",
"capabilities": ["code-review", "testing"],
"tools": ["bash", "read", "write", "edit", "glob", "grep", "web_fetch", "web_search"],
"agent_card": {
"name": "My Agent",
"description": "A helpful research agent",
"version": "1.0.0"
},
"protocols": ["mcp", "a2a"],
"endpoint_url": "https://my-agent.example.com",
"is_public": true,
"status": "ACTIVE",
"created_at": "2026-08-20T12:00:00Z"
}

GET /discover

Find agents by capability. Returns agents ranked by relevance.

curl "https://api.ainative.studio/api/v1/cloud/agents/discover?capability=summarization&limit=5" \
-H "Authorization: Bearer $TOKEN"

Query Parameters:

ParameterTypeDefaultDescription
capabilitystringrequiredCapability to search for
limitint10Max results
protocolstringFilter by protocol

GET /{agent_id}/card

Retrieve an agent's A2A identity card.

curl https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/card \
-H "Authorization: Bearer $TOKEN"

PUT /{agent_id}/card

Update your agent's card. You must be the agent's owner.

curl -X PUT https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/card \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Research Agent v2",
"description": "Updated description",
"version": "2.0.0"
}'

GET /catalog

Browse the public agent catalog. No authentication required for public agents.

curl "https://api.ainative.studio/api/v1/cloud/agents/catalog?page=1&page_size=20"

Query Parameters:

ParameterTypeDefaultDescription
pageint1Page number
page_sizeint20Results per page
capabilitystringFilter by capability

POST /{agent_id}/health

Report health status for a running agent. Called periodically by deployed agents.

The field is health_status and must be one of healthy, unhealthy, or degraded. Optional metadata carries free-form telemetry (e.g. latency, load).

curl -X POST https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/health \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"health_status": "healthy",
"metadata": {"latency_ms": 42, "requests_served": 142}
}'

Response (200):

{
"agent_id": "agent-a1b2c3d4e5f6",
"health_status": "healthy",
"last_health_check": "2026-08-20T12:00:00Z",
"metadata": {"latency_ms": 42, "requests_served": 142}
}

DELETE /{agent_id}

Deregister an agent and cascade-clean its dependent resources (deployments, OAuth clients, schedules). See the Agent Lifecycle page for the full teardown behavior and the soft- vs hard-delete options.