Messages

Messages are the primary unit of communication in A2A.

Message Structure

Every message requires:

FieldTypeDescription
messageIdstringUnique UUID identifier
kindstringMessage type identifier
rolestringEither "user" or "agent"
partsarrayContent 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