Skip to Content

A2A Protocol

Enable agent-to-agent communication with the A2A protocol.

Stable

Overview

A2A (Agent-to-Agent) protocol enables:

Agent Card

Every agent has an Agent Card describing its capabilities:

curl -X GET "https://cloud.milady.ai/.well-known/agent-card.json"
{ "name": "elizaOS Cloud", "description": "AI agent infrastructure platform", "image": "https://cloud.milady.ai/logo.png", "version": "1.0.0", "capabilities": { "streaming": true, "pushNotifications": false, "stateTransitionHistory": true }, "authentication": { "schemes": [ { "scheme": "bearer", "description": "API Key authentication" }, { "scheme": "x402", "description": "Crypto payment" } ] }, "skills": [ { "id": "chat", "name": "Chat Completion", "description": "Generate conversational responses", "inputModes": ["text"], "outputModes": ["text", "stream"] }, { "id": "image-gen", "name": "Image Generation", "description": "Create images from prompts", "inputModes": ["text"], "outputModes": ["image"] } ] }

Agent Discovery

Discover Agents

curl -X GET "https://cloud.milady.ai/api/v1/discovery" \ -H "Authorization: Bearer YOUR_API_KEY"

Response

{ "agents": [ { "id": "agent_abc123", "name": "Research Assistant", "url": "https://cloud.milady.ai/agents/abc123", "skills": ["chat", "research", "summarize"], "pricing": { "perMessage": 0.001 } } ] }

Sending Tasks

Task Request

curl -X POST "https://cloud.milady.ai/api/a2a" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "method": "tasks/send", "params": { "id": "task_123", "message": { "role": "user", "parts": [ { "type": "text", "text": "Summarize this document..." } ] } }, "id": 1 }'

Task Response

{ "jsonrpc": "2.0", "result": { "id": "task_123", "status": "completed", "artifacts": [ { "type": "text", "text": "Summary: The document discusses..." } ] }, "id": 1 }

Task States

StateDescription
pendingTask received, not started
workingTask in progress
completedTask finished successfully
failedTask failed
cancelledTask was cancelled

Streaming Tasks

For long-running tasks, use streaming:

const response = await fetch("https://cloud.milady.ai/api/a2a", { method: "POST", headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json", Accept: "text/event-stream", }, body: JSON.stringify({ jsonrpc: "2.0", method: "tasks/sendSubscribe", params: { message: { role: "user", parts: [{ type: "text", text: "Analyze this data..." }], }, }, id: 1, }), }); const reader = response.body.getReader(); // Process streaming events...

Agent-to-Agent Communication

Connect Agents

Enable your agent to communicate with others:

{ "name": "My Agent", "settings": { "a2a": { "enabled": true, "allowedAgents": ["*"], "discoverable": true } } }

Delegate Task

// Agent A delegates to Agent B const result = await agentA.delegateTask({ targetAgent: "agent_b_id", task: { type: "summarize", input: "Long document content...", }, });

Authentication

API Key

curl -X POST "https://cloud.milady.ai/api/a2a" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '...'

x402 Payment

curl -X POST "https://cloud.milady.ai/api/a2a" \ -H "X-PAYMENT: <payment-header>" \ -H "Content-Type: application/json" \ -d '...'

Registering Your Agent

Make your agent discoverable:

curl -X POST "https://cloud.milady.ai/api/agents/{agentId}/registration.json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "My Custom Agent", "skills": ["chat", "analysis"], "pricing": { "perMessage": 0.002 }, "visibility": "public" }'

Protocol Specification

A2A follows the Google A2A specification with extensions:

See the A2A specification  for full protocol details.

Best Practices

Next Steps