Why architecture matters here

A2A message architecture matters because cross-vendor interoperability requires strict structure. Missing fields break integrations; unversioned methods surprise consumers; unsigned messages allow impersonation.

Cost is small — structured metadata is bytes.

Reliability comes from idempotency + signatures + audit. Retries safe; disputes resolvable.

Advertisement

The architecture: every field explained

Walk the diagram top to bottom.

Sender agent. Produces a request message on behalf of user.

JSON-RPC 2.0 envelope. id + jsonrpc + method + params. Standard.

Recipient agent. Consumes; validates; responds with id + result or error.

Method versioning. methods include version (e.g., translate.v2). Capability check first.

Trace context. W3C traceparent propagated in message headers or params.

Signature. Sender signs message; recipient verifies against agent card's public key.

Idempotency key. Client-supplied unique key; server dedupes retries.

Cost + budget. Request includes budget hint; response includes cost consumed.

Error format. code (retryable/non-retryable), message, data. Clients route by class.

Audit trail. Both parties log message ID + hash + parties + outcome.

Sender agentproduces messageJSON-RPC 2.0 envelopeid + method + paramsRecipient agentconsumes + respondsMethod versioningcapability checkTrace contextW3C propagationSignaturesender authIdempotency keysafe retryCost + budgetreported per messageError formatstructured code + retryableAudit trailimmutableWell-formed A2A messages enable multi-vendor agent workflows
A2A message architecture: JSON-RPC 2.0 envelope + method versioning + trace context + signature + idempotency + cost + structured errors + audit.
Advertisement

End-to-end message flow

Trace a message. Sender agent creates request: ``` { "jsonrpc": "2.0", "id": "req-abc123", "method": "translate.v2", "params": { "text": "Hello", "target_lang": "de" }, "meta": { "trace_id": "0af7651916cd43dd8448eb211c80319c", "signature": "0x…", "idempotency_key": "user-42-session-xyz-1", "budget_usd": 0.10 } } ``` Recipient verifies signature against sender's agent card public key. Extracts trace context; attaches to spans. Checks idempotency key: if already processed, return prior result.

Runs translation. Consumes $0.02.

Returns: ``` { "jsonrpc": "2.0", "id": "req-abc123", "result": { "translated": "Hallo", "cost_usd": 0.02 } } ``` Both parties log. Audit consistent.

Error scenario: translation service down. Returns error with code: ``` { "jsonrpc": "2.0", "id": "req-abc123", "error": { "code": "SERVICE_UNAVAILABLE", "retryable": true, "message": "translation service temporarily down" } } ``` Sender knows to retry with backoff.