JSON-RPC methods
A2A is JSON-RPC 2.0 over HTTP. Three methods carry everything.
#message/send
Start a task, or continue one. Returns the task with its current state.
json
POST /api/a2a
{
"jsonrpc": "2.0",
"id": "1",
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [{ "kind": "data", "data": {
"skill": "prior_auth_intake",
"practiceId": "p_north",
"serviceReview": { "payer": { "id": "BCBSF" }, "procedures": [{ "code": "27447" }] }
}}]
}
}
}#tasks/get
Poll a task. There is no streaming, so this is how a client learns that a human released something.
json
{ "jsonrpc": "2.0", "id": "2", "method": "tasks/get", "params": { "id": "task-1" } }#tasks/cancel
Withdraw a task that has not completed. A task already transmitted to a payer cannot be cancelled here - that is a void, which is itself a gated action.
#Errors
| Code | Meaning |
|---|---|
-32600 | Invalid request - malformed JSON-RPC. |
-32601 | Method not found. |
-32602 | Invalid params - a required field is missing or a skill is unknown. |
-32001 | Task not found. |
-32003 | Not authorised - the channel does not reach that practice, or an atom is missing. |
Denials are uniform
A denial does not distinguish "this practice does not exist" from "you cannot reach it". Both answer the same way, because the difference is itself information about who our customers are.