Back to Eliza

A2A Protocol

packages/cloud-frontend/content/a2a.mdx

2.0.15.6 KB
Original Source

import { Callout, Tabs, Cards } from "@/docs/components";

A2A Protocol

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

<div className="status-badge status-stable">Stable</div>

Overview

A2A (Agent-to-Agent) protocol enables:

  • Agent Discovery: Find and connect to other agents
  • Task Delegation: Assign tasks between agents
  • Collaboration: Agents working together on complex tasks
  • Interoperability: Standard protocol across platforms

Agent Card

Every agent has an Agent Card describing its capabilities:

bash
curl -X GET "https://elizacloud.ai/.well-known/agent-card.json"
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"]
    }
  ]
}

Agent Discovery

Discover Agents

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

Response

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

Sending Tasks

Task Request

bash
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
  }'

Task Response

json
{
  "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:

javascript
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...

Agent-to-Agent Communication

Connect Agents

Enable your agent to communicate with others:

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

Delegate Task

javascript
// 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

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

x402 Payment

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

Registering Your Agent

Make your agent discoverable:

bash
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"
  }'

Protocol Specification

A2A follows the Google A2A specification with extensions:

  • JSON-RPC 2.0 transport
  • Server-Sent Events for streaming
  • Standard task lifecycle
  • Artifact types for multi-modal output
<Callout type="info"> See the [A2A specification](https://github.com/google/a2a) for full protocol details. </Callout>

Best Practices

  • Clear Skills — Define agent capabilities clearly in your Agent Card
  • Handle Errors — Implement robust error handling for task failures
  • Rate Limiting — Respect rate limits of other agents you communicate with
  • Security — Validate all incoming requests and authenticate callers

Next Steps

<Cards> <Cards.Card title="MCP Protocol" href="/docs/mcp"> Connect tools to agents </Cards.Card> <Cards.Card title="Billing" href="/docs/billing"> Enable crypto payments </Cards.Card> <Cards.Card title="API Reference" href="/docs/api"> Complete API documentation </Cards.Card> </Cards>