JSON-RPC 2.0 binding
A2A defines a JSON-RPC 2.0 binding in Section 9 of its specification. AAP rides on top of A2A v1.0 without modification, and uses JSON-RPC 2.0 as its sole transport: every skill is invoked via the SendMessage JSON-RPC method, with the AAP request packaged as a typed DataPart inside params.message.parts[].

A JSON-RPC interface is REQUIRED on every AAP agent card: supportedInterfaces[] MUST include at least one entry with protocolBinding: "JSONRPC". JSON-RPC 2.0 is the only transport AAP defines — the HTTP+JSON (REST) binding was removed in v1.1, and gRPC is out of scope.
AAP rides on A2A v1.0, whose single canonical wire format is the ProtoJSON form: the method is SendMessage, Role is the enum name "ROLE_USER" / "ROLE_AGENT", and a Part has no kind discriminator (it is typed by the member it carries — AAP uses the data member). A compliant AAP agent MUST emit and accept this form so any A2A v1.0 client can parse its replies.
| Aspect | A2A v1.0 (ProtoJSON) |
|---|---|
| Method name | SendMessage |
| Role | "ROLE_USER" / "ROLE_AGENT" |
| Part discriminator | member-name (no kind) |
| Message discriminator | (none — no kind) |
result (JSON-RPC) | the SendMessageResponse, i.e. { "message": <Message> } |
messageId | required on every Message |
mediaType on DataPart | application/vnd.autoagent.<skill>-request+json |