packages/cloud-frontend/content/a2a.mdx
import { Callout, Tabs, Cards } from "@/docs/components";
Enable agent-to-agent communication with the A2A protocol.
<div className="status-badge status-stable">Stable</div>A2A (Agent-to-Agent) protocol enables:
Every agent has an Agent Card describing its capabilities:
curl -X GET "https://elizacloud.ai/.well-known/agent-card.json"
{
"name": "elizaOS Cloud",
"description": "AI agent infrastructure platform",
"image": "https://elizacloud.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"]
}
]
}
curl -X GET "https://elizacloud.ai/api/v1/discovery" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"agents": [
{
"id": "agent_abc123",
"name": "Research Assistant",
"url": "https://elizacloud.ai/agents/abc123",
"skills": ["chat", "research", "summarize"],
"pricing": {
"perMessage": 0.001
}
}
]
}
curl -X POST "https://elizacloud.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
}'
{
"jsonrpc": "2.0",
"result": {
"id": "task_123",
"status": "completed",
"artifacts": [
{
"type": "text",
"text": "Summary: The document discusses..."
}
]
},
"id": 1
}
| State | Description |
|---|---|
pending | Task received, not started |
working | Task in progress |
completed | Task finished successfully |
failed | Task failed |
cancelled | Task was cancelled |
For long-running tasks, use streaming:
const response = await fetch("https://elizacloud.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...
Enable your agent to communicate with others:
{
"name": "My Agent",
"settings": {
"a2a": {
"enabled": true,
"allowedAgents": ["*"],
"discoverable": true
}
}
}
// Agent A delegates to Agent B
const result = await agentA.delegateTask({
targetAgent: "agent_b_id",
task: {
type: "summarize",
input: "Long document content...",
},
});
curl -X POST "https://elizacloud.ai/api/a2a" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '...'
curl -X POST "https://elizacloud.ai/api/a2a" \
-H "X-PAYMENT: <payment-header>" \
-H "Content-Type: application/json" \
-d '...'
Make your agent discoverable:
curl -X POST "https://elizacloud.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"
}'
A2A follows the Google A2A specification with extensions: