A2A Protocol
Enable agent-to-agent communication with the A2A protocol.
Stable
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:
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
| State | Description |
|---|---|
pending | Task received, not started |
working | Task in progress |
completed | Task finished successfully |
failed | Task failed |
cancelled | Task 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:
- JSON-RPC 2.0 transport
- Server-Sent Events for streaming
- Standard task lifecycle
- Artifact types for multi-modal output
See the A2A specification for full protocol details.
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