Messages
Messages are the primary unit of communication in A2A.
Message Structure
Every message requires:
| Field | Type | Description |
|---|---|---|
messageId | string | Unique UUID identifier |
kind | string | Message type identifier |
role | string | Either "user" or "agent" |
parts | array | Content parts |
Parts
A message can contain multiple parts of different types:
TextPart
{ "kind": "text", "text": "Hello, agent!" }
FilePart
{
"kind": "file",
"file": {
"name": "document.pdf",
"mimeType": "application/pdf",
"bytes": "base64-encoded-content"
}
}
DataPart
{
"kind": "data",
"data": { "key": "value" }
}
Sending Messages
message/send (Synchronous)
Waits for processing to complete before returning:
{
"jsonrpc": "2.0",
"method": "message/send",
"id": "1",
"params": {
"message": {
"messageId": "550e8400-e29b-41d4-a716-446655440000",
"kind": "message",
"role": "user",
"parts": [{ "kind": "text", "text": "Hello" }]
}
}
}
message/stream (Server-Sent Events)
Returns incremental updates as SSE events:
{
"jsonrpc": "2.0",
"method": "message/stream",
"id": "1",
"params": {
"message": {
"messageId": "550e8400-e29b-41d4-a716-446655440001",
"kind": "message",
"role": "user",
"parts": [{ "kind": "text", "text": "Hello" }]
}
}
}
Streaming event types: task, message, status, artifact, error, done