R.4

Errors

Every A2A error has a JSON-RPC code, an HTTP status, a gRPC status, and an ErrorInfo reason, and over HTTP the reason is what tells seven of them apart.

The nine A2A errors take their codes from the canonical table in §5.4. Each also has an ErrorInfo reason: its name in upper snake case without Error, such as TASK_NOT_FOUND. The spec spells out only that one and TASK_NOT_CANCELABLE, and the reference SDK uses the same nine strings.

ErrorJSON-RPCHTTPgRPC
TaskNotFoundError-32001404NOT_FOUND
TaskNotCancelableError-32002400FAILED_PRECONDITION
PushNotificationNotSupportedError-32003400FAILED_PRECONDITION
UnsupportedOperationError-32004400FAILED_PRECONDITION
ContentTypeNotSupportedError-32005400INVALID_ARGUMENT
InvalidAgentResponseError-32006500INTERNAL
ExtendedAgentCardNotConfiguredError-32007400FAILED_PRECONDITION
ExtensionSupportRequiredError-32008400FAILED_PRECONDITION
VersionNotSupportedError-32009400FAILED_PRECONDITION
JSONParseError-32700nonenone
InvalidRequestError-32600nonenone
MethodNotFoundError-32601nonenone
InvalidParamsError-32602400INVALID_ARGUMENT
InternalError-32603500 or 503INTERNAL or UNAVAILABLE
Authentication errorcustom401UNAUTHENTICATED
Authorization errorcustom403PERMISSION_DENIED

The last seven rows have no A2A code. Five are the standard JSON-RPC errors, whose messages are Invalid JSON payload, Request payload validation error, Method not found, Invalid parameters, and Internal error. §3.3.2 gives example HTTP and gRPC codes for two of them and for authentication and authorization errors. JSON-RPC reserves -32001 to -32099 for A2A errors and assigns only -32001 to -32009.

The official test kit, a2a-tck at tag 1.0.0.alpha2, keeps its own table and departs from §5.4 in six places. It expects HTTP 409 for TaskNotCancelableError, 415 for ContentTypeNotSupportedError, and 502 for InvalidAgentResponseError. It expects gRPC UNIMPLEMENTED for UnsupportedOperationError, PushNotificationNotSupportedError, and VersionNotSupportedError. A server that follows §5.4 fails those checks, and a2a-java matches the kit on UnsupportedOperationError. Conformance testing shows how to run the kit.

Operations by binding lists the operations that raise each A2A error, and none lists InvalidAgentResponseError. UnsupportedOperationError covers a terminal task, streaming that is off, and an extended card that is off, so read its message and metadata. A server must not reveal that a resource exists when the client has no access to it. So answer a task the caller cannot access with TaskNotFoundError.

Every error carries a code, a message, and optional details, each with an @type key. JSON-RPC carries them in error.code, error.message, and error.data, with an HTTP status the spec does not set. The kit and the SDK send 200 OK. The gRPC binding sends google.rpc.Status, and HTTP+JSON sends its JSON form in an error object. For an A2A error, both hold an ErrorInfo with reason and the domain a2a-protocol.org. Errors reads one of each.

A2A protocol 1.0.1 · 3303592 · 2026-05-28 · Edition 2026.10