Protocol surfaces

A2A

Experimental A2A v1.0.0: Agent Card discovery and JSON-RPC SendMessage at /a2a.

ExperimentalA2A v1.0.0, off unless protocols.a2a.enabled is true.
BindingJSON-RPC 2.0 over HTTPS
MethodSendMessage (not the legacy message/send)
Version headerA2A-Version: 1.0, required
Agent CardGET /.well-known/agent-card.json
Default mount/a2a
Streaming, task persistence, push notificationsunsupported

Agent Card

GET/.well-known/agent-card.jsonpublic

Resources exposed with expose: [a2a] become skills: skill id = resource id; a paid skill is tagged paid and names its price. Core A2A v1.0 skills have no input schema field, so input schemas are not embedded — read them from GET /api/resources.

SendMessage

POST/a2apayment
json
{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "SendMessage",
  "params": {
    "message": {
      "role": "ROLE_USER",
      "messageId": "msg-1",
      "parts": [
        {
          "data": { "resource": "market_report", "input": { "_payment": "<base64 x402 proof>" } },
          "mediaType": "application/json"
        }
      ]
    }
  }
}

One message, one data part naming the resource and its input. Text, file, bytes and URL parts, multi-part messages, roles other than ROLE_USER, and task or context continuation are refused.

Results

OutcomeTask stateArtifact data
deliveredTASK_STATE_COMPLETEDthe merchant response (non-objects wrapped as { value }); delivery summary in agent-commerce/delivery metadata
payment requiredTASK_STATE_FAILEDthe payment envelope
domain failureTASK_STATE_FAILEDthe error envelope

Payment required is terminal: there is no task store, so the buyer sends a new message carrying the proof.

JSON-RPC errors

Reserved for requests that are malformed or unsupported as A2A — never for commerce outcomes.

CodeMeaning
-32700bad JSON
-32600bad request object
-32601unknown method
-32602bad params or envelope
-32004unsupported operation, including a missing or unsupported A2A-Version