R.1

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 methodgRPC rpcHTTP+JSON routeRequest in, response out
SendMessageSendMessagePOST /message:sendSendMessageRequest, SendMessageResponse
SendStreamingMessageSendStreamingMessagePOST /message:streamSendMessageRequest, a stream of StreamResponse
GetTaskGetTaskGET /tasks/{id=*}GetTaskRequest, Task
ListTasksListTasksGET /tasksListTasksRequest, ListTasksResponse
CancelTaskCancelTaskPOST /tasks/{id=*}:cancelCancelTaskRequest, Task
SubscribeToTaskSubscribeToTaskGET /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
CreateTaskPushNotificationConfigCreateTaskPushNotificationConfigPOST /tasks/{task_id=*}/pushNotificationConfigsTaskPushNotificationConfig in and out, with no request wrapper (conflict D5)
GetTaskPushNotificationConfigGetTaskPushNotificationConfigGET /tasks/{task_id=*}/pushNotificationConfigs/{id=*}GetTaskPushNotificationConfigRequest, TaskPushNotificationConfig
ListTaskPushNotificationConfigsListTaskPushNotificationConfigsGET /tasks/{task_id=*}/pushNotificationConfigsListTaskPushNotificationConfigsRequest, ListTaskPushNotificationConfigsResponse
DeleteTaskPushNotificationConfigDeleteTaskPushNotificationConfigDELETE /tasks/{task_id=*}/pushNotificationConfigs/{id=*}DeleteTaskPushNotificationConfigRequest, google.protobuf.Empty
GetExtendedAgentCardGetExtendedAgentCardGET /extendedAgentCardGetExtendedAgentCardRequest, 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.

MethodOther A2A errorsCapability flag
SendMessageContentTypeNotSupportedError, TaskNotFoundError, and UnsupportedOperationError for a terminal tasknone
SendStreamingMessageThe same three as SendMessagestreaming
GetTaskTaskNotFoundErrornone
ListTasksNone beyond the standard protocol errorsnone
CancelTaskTaskNotCancelableError, TaskNotFoundErrornone
SubscribeToTaskTaskNotFoundError, and UnsupportedOperationError for a terminal taskstreaming
The four push configuration methodsTaskNotFoundError, which GetTaskPushNotificationConfig also returns for a missing configurationpushNotifications
GetExtendedAgentCardExtendedAgentCardNotConfiguredError when the flag is on and no extended card is configuredextendedAgentCard

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