The A2A (Agent-to-Agent) protocol enables AI agents to discover, understand, and invoke each other’s capabilities through standardized communication.
External agents discover your capabilities by fetching the Agent Card:
The Agent Card describes your agent’s identity, skills, and how to invoke them. It is publicly accessible without authentication.
Once discovered, external agents invoke capabilities by sending JSON-RPC requests to the A2A endpoint:
The A2A endpoint supports these JSON-RPC methods:
SendMessage — Execute a task synchronouslySendStreamingMessage — Execute a task with SSE streamingGetTask — Get task statusListTasks — List tasks (cursor-paginated)CancelTask — Cancel a running taskSubscribeToTask — Resume SSE stream for a taskThe legacy v0.3 method names (message/send, message/stream, tasks/get, tasks/cancel, tasks/resubscribe) are still accepted as aliases for backward compatibility.
Authentication uses either header:
Authorization: Bearer a2a_xxxX-API-Key: a2a_xxxWhen A2A Surfaces use managed mode, the external agent does not need to specify which skill to invoke. Instead:
This simplifies integration — external agents do not need to understand your internal capability structure.
Runtype’s A2A implementation follows the A2A Protocol v1.0 (https://a2a-protocol.org).
Key features:
All requests are JSON-RPC 2.0 envelopes sent to the A2A endpoint. Message parts use kind (for example "kind": "text"), and the skill to invoke is passed in metadata.skill — in managed orchestration mode you can omit metadata.skill and let the orchestrator route the request.
Execute a task synchronously and wait for the result:
A completed task is returned as the result. The status is an object with a state field, and outputs are returned as artifacts:
To continue a multi-turn conversation, include contextId inside params.message. To receive asynchronous updates, add a params.configuration.pushNotificationConfig with a webhook url.
Execute a task and receive incremental updates over Server-Sent Events. The stream emits task/status and task/artifact events, and the terminal status carries "final": true:
A task/error event is emitted instead if execution fails.
Retrieve the current state of a task. Pass the task id, and optionally historyLength to include status history:
Cancel a running task by its id:
Every task moves through these states:
Errors are returned as a JSON-RPC error object with a numeric code and optional data:
Standard JSON-RPC codes:
A2A-specific codes:
A2A Surfaces support authentication and rate limiting:
a2a_ prefixBuild complex workflows by composing multiple specialized agents across different platforms.
Platforms like LangChain, CrewAI, or Vercel AI SDK can discover and call your Capabilities as part of larger workflows.
Partner organizations can integrate their agents with yours without custom integration work.