Operations by binding
Every A2A operation has one name in JSON-RPC and gRPC, one route in HTTP+JSON, one request and one response message, and a fixed list of errors.
The proto defines eleven operations in one gRPC service, A2AService, and the JSON-RPC method carries the same name as the rpc. The routes are the proto's google.api.http templates. The first column links each operation to the section that explains it.
| JSON-RPC method | gRPC rpc | HTTP+JSON route | Request in, response out |
|---|---|---|---|
| SendMessage | SendMessage | POST /message:send | SendMessageRequest, SendMessageResponse |
| SendStreamingMessage | SendStreamingMessage | POST /message:stream | SendMessageRequest, a stream of StreamResponse |
| GetTask | GetTask | GET /tasks/{id=*} | GetTaskRequest, Task |
| ListTasks | ListTasks | GET /tasks | ListTasksRequest, ListTasksResponse |
| CancelTask | CancelTask | POST /tasks/{id=*}:cancel | CancelTaskRequest, Task |
| SubscribeToTask | SubscribeToTask | GET /tasks/{id=*}:subscribe in the proto, and POST in §5.3 and §11.3.2, so accept both verbs, as the reference SDK does (conflict D1) | SubscribeToTaskRequest, a stream of StreamResponse |
| CreateTaskPushNotificationConfig | CreateTaskPushNotificationConfig | POST /tasks/{task_id=*}/pushNotificationConfigs | TaskPushNotificationConfig in and out, with no request wrapper (conflict D5) |
| GetTaskPushNotificationConfig | GetTaskPushNotificationConfig | GET /tasks/{task_id=*}/pushNotificationConfigs/{id=*} | GetTaskPushNotificationConfigRequest, TaskPushNotificationConfig |
| ListTaskPushNotificationConfigs | ListTaskPushNotificationConfigs | GET /tasks/{task_id=*}/pushNotificationConfigs | ListTaskPushNotificationConfigsRequest, ListTaskPushNotificationConfigsResponse |
| DeleteTaskPushNotificationConfig | DeleteTaskPushNotificationConfig | DELETE /tasks/{task_id=*}/pushNotificationConfigs/{id=*} | DeleteTaskPushNotificationConfigRequest, google.protobuf.Empty |
| GetExtendedAgentCard | GetExtendedAgentCard | GET /extendedAgentCard | GetExtendedAgentCardRequest, AgentCard |
Every rpc has a second route in its additional_bindings, the same path under a /{tenant} prefix, such as POST /{tenant}/message:send. The prose in §5.3, §11.3, and §11.5 lists only the plain routes (discrepancy N12). In JSON-RPC the same value travels as params.tenant, and in gRPC as the tenant field of the request. In every binding it must match the tenant of the chosen interface when that is set, as HTTP+JSON explains.
SendMessageResponse holds one task or one message. A send requires message, and get, cancel, and subscribe require the task id. The get, list, and delete configuration requests require taskId, get and delete also require id, and create requires url. JSON-RPC posts each call as one envelope, with the name in method and the request message in params.
Each operation can raise the errors §3.1 lists for it. The last column names the card capability that must be true. When it is false or absent, the push configuration methods fail with PushNotificationNotSupportedError and the others with UnsupportedOperationError.
| Method | Other A2A errors | Capability flag |
|---|---|---|
| SendMessage | ContentTypeNotSupportedError, TaskNotFoundError, and UnsupportedOperationError for a terminal task | none |
| SendStreamingMessage | The same three as SendMessage | streaming |
| GetTask | TaskNotFoundError | none |
| ListTasks | None beyond the standard protocol errors | none |
| CancelTask | TaskNotCancelableError, TaskNotFoundError | none |
| SubscribeToTask | TaskNotFoundError, and UnsupportedOperationError for a terminal task | streaming |
| The four push configuration methods | TaskNotFoundError, which GetTaskPushNotificationConfig also returns for a missing configuration | pushNotifications |
| GetExtendedAgentCard | ExtendedAgentCardNotConfiguredError when the flag is on and no extended card is configured | extendedAgentCard |
Any operation can also fail with VersionNotSupportedError, ExtensionSupportRequiredError, or an authentication or authorization error. Errors gives their codes in every binding, and the gRPC binding shows one rpc with its full annotation.
A2A protocol 1.0.1 · 3303592 · 2026-05-28 · Edition 2026.10