Data Structures

A field reference for the A2A data model, listed by their JSON-serialized camelCase names (snake_case in a2a.proto). Fields marked “required” correspond to REQUIRED in the proto. The authoritative definition is a2a.proto .

Task and TaskStatus

Task is the core unit of work in A2A: it has a current status, stores results as artifacts when they are produced, and keeps multi-turn interactions in its history.

FieldDescription
idRequired. Unique identifier of the task, generated by the server for a new task
contextIdIdentifier that groups the task and messages into one context
statusRequired. A TaskStatus with state (required), an optional message, and an ISO 8601 timestamp
artifactsThe output artifacts of the task
historyThe interaction history of the task (a list of messages)
metadataCustom key-value metadata about the task

TaskState

ValueKindMeaning
TASK_STATE_SUBMITTEDIn progressThe task has been submitted and acknowledged
TASK_STATE_WORKINGIn progressThe agent is actively processing the task
TASK_STATE_INPUT_REQUIREDInterruptedThe agent needs additional user input to proceed
TASK_STATE_AUTH_REQUIREDInterruptedAuthentication is required to proceed. Entering this state is not, by itself, authorization for any particular operation; the scope and semantics of the authorization are defined by the implementation
TASK_STATE_COMPLETEDTerminalFinished successfully
TASK_STATE_FAILEDTerminalFinished with an error
TASK_STATE_CANCELEDTerminalCanceled before completion
TASK_STATE_REJECTEDTerminalThe agent decided not to perform the task (at creation or later)

There is also TASK_STATE_UNSPECIFIED for an unknown or indeterminate state. For how states flow, see Life of a Task .

Message, Role, and Part

Message is one unit of communication between client and server.

FieldDescription
messageIdRequired. Identifier of the message, created by the message creator
contextId / taskIdOptional; associate the message with a context or a task. Server messages must carry contextId and carry taskId only if a task was created. Both are optional on client messages and must match if both are provided
roleRequired. ROLE_USER (client to server) or ROLE_AGENT (server to client)
partsRequired. The message content, at least one Part
metadataOptional metadata
extensionsURIs of extensions present in or contributed to this message
referenceTaskIdsIDs of tasks referenced for additional context

Part is the smallest unit of content in a message or artifact. In v1.0 it is a single unified structure: exactly one of the four content fields below, plus the shared fields.

FieldDescription
textText content
rawThe raw bytes of a file, a base64 string in JSON
urlA URL pointing to the file’s content
dataArbitrary structured JSON value (object, array, string, number, boolean, or null)
mediaTypeThe media type (MIME type) of the content, available for all part types
filenameAn optional file name
metadataOptional metadata of the part

Artifact and streaming events

Artifact represents a task output.

FieldDescription
artifactIdRequired. Unique within the task
name / descriptionA human-readable name and description
partsRequired. The content, at least one Part
metadata / extensionsMetadata and extension URIs

Streaming operations and subscriptions return StreamResponse, whose payload is one of: task, message, statusUpdate, or artifactUpdate.

EventKey fields
TaskStatusUpdateEventtaskId, contextId, status (all required), metadata. v1.0 has no kind and no final; completion is detected from a terminal state and stream closure
TaskArtifactUpdateEventtaskId, contextId, artifact (all required), append (when true, the content is appended to an already sent artifact with the same ID), lastChunk (when true, this is the final chunk of the artifact), metadata

Request configuration and push notifications

SendMessageRequest contains the required message plus optional tenant, configuration, and metadata. The fields of SendMessageConfiguration:

FieldDescription
acceptedOutputModesMedia types the client is prepared to accept for responses; agents SHOULD tailor their output to them
taskPushNotificationConfigConfiguration for the agent to send push notifications for task updates; the task ID should be empty in a SendMessage request
historyLengthMaximum number of recent messages in the response; semantics in the Core Protocol Specification
returnImmediatelyWhen true, return right after creating the task; defaults to false, which waits for a terminal or interrupted state

The fields of TaskPushNotificationConfig (a webhook configuration):

FieldDescription
tenantOptional routing identifier; when set, it must match the tenant of the selected AgentInterface
idUnique identifier of this configuration
taskIdThe task the configuration belongs to
urlRequired. The URL to which notifications are sent
tokenA token unique to the task or session
authenticationAuthentication required to send the notification: scheme (required, an HTTP authentication scheme from the IANA registry such as Bearer) and credentials

AgentCard and related objects

AgentCard is the agent’s self-describing manifest. For discovery and verification rules, see Agent Discovery and the Agent Card .

FieldDescription
name, description, versionRequired. Basic identity information
supportedInterfacesRequired. An ordered list of interfaces; the first entry is preferred
providerThe service provider: organization and url (both required)
documentationUrl, iconUrlOptional documentation and icon URLs
capabilitiesRequired. AgentCapabilities
securitySchemesA map of authentication schemes (name to SecurityScheme)
securityRequirementsSecurity requirements for contacting the agent
defaultInputModes, defaultOutputModesRequired. Default input and output media types, overridable per skill
skillsRequired. A list of AgentSkill
signaturesJSON Web Signatures computed for this card
  • AgentInterface: url (a valid absolute HTTPS URL in production for HTTP-based transports, or a hostname:port address for gRPC), protocolBinding (the core bindings are JSONRPC, GRPC, and HTTP+JSON; custom bindings are an open string), and protocolVersion (for example 1.0) are required. The optional tenant is an opaque routing string; when set, the client MUST include it in all requests sent to that interface.
  • AgentCapabilities: three optional booleans, streaming, pushNotifications, and extendedAgentCard, plus extensions (a list of AgentExtension).
  • AgentExtension: uri, description, required (when true, the client must understand and comply with the extension), and params.
  • AgentSkill: id, name, description, and tags are required; examples, inputModes, outputModes (overriding the defaults), and securityRequirements are optional.
  • AgentCardSignature: protected (the base64url-encoded JWS protected header, required), signature (the base64url signature, required), and header (the unprotected header, optional).

Security schemes

SecurityScheme is based on the OpenAPI 3.2 Security Scheme Object and is one of five types:

SchemeKey fields
apiKeySecuritySchemelocation (query, header, or cookie) and name
httpAuthSecuritySchemescheme (such as Bearer, which should be registered in the IANA authentication scheme registry) and bearerFormat (such as JWT, a hint only)
oauth2SecuritySchemeflows (required) and oauth2MetadataUrl (RFC 8414 authorization server metadata, TLS required)
openIdConnectSecuritySchemeopenIdConnectUrl (the OIDC Discovery URL, required)
mtlsSecuritySchemeMutual TLS, with no additional required fields

OAuthFlows supports:

  • Authorization Code: authorizationUrl, tokenUrl, and scopes are required, refreshUrl is optional, and pkceRequired indicates whether PKCE (RFC 7636) is mandatory. PKCE should always be used for public clients and is recommended for all clients.
  • Client Credentials: tokenUrl and scopes are required, refreshUrl is optional.
  • Device Code (RFC 8628, for input-constrained devices such as IoT devices and CLI tools): deviceAuthorizationUrl, tokenUrl, and scopes are required, refreshUrl is optional.
  • Implicit and Password flows: marked deprecated in the proto; use Authorization Code + PKCE, or Device Code instead.

In securityRequirements, the schemes of each entry map a scheme name to the list of required scopes.

Related pages

Source: A2A official specification · Protocol Data Model and a2a.proto