Skip to content

A2A Definition/Schema

Protobuf

The normative A2A protocol definition in Protocol Buffers (proto3 syntax). This is the source of truth for the A2A protocol specification.

Download

You can download the proto file directly: a2a.proto

Definition

// Older protoc compilers don't understand edition yet.
syntax = "proto3";
package a2a.v1;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "A2a.V1";
option go_package = "google.golang.org/a2a/v1";
option java_multiple_files = true;
option java_outer_classname = "A2A";
option java_package = "com.google.a2a.v1";

// A2AService defines the operations of the A2A protocol.
service A2AService {
  // Send a message to the agent.
  rpc SendMessage(SendMessageRequest) returns (SendMessageResponse) {
    option (google.api.http) = {
      post: "/v1/message:send"
      body: "*"
    };
  }
  // SendStreamingMessage is a streaming version of SendMessage.
  rpc SendStreamingMessage(SendMessageRequest) returns (stream StreamResponse) {
    option (google.api.http) = {
      post: "/v1/message:stream"
      body: "*"
    };
  }

  // Get the current state of a task from the agent.
  rpc GetTask(GetTaskRequest) returns (Task) {
    option (google.api.http) = {
      get: "/v1/{name=tasks/*}"
    };
    option (google.api.method_signature) = "name";
  }
  // List tasks with optional filtering and pagination.
  rpc ListTasks(ListTasksRequest) returns (ListTasksResponse) {
    option (google.api.http) = {
      get: "/v1/tasks"
    };
  }
  // Cancel a task.
  rpc CancelTask(CancelTaskRequest) returns (Task) {
    option (google.api.http) = {
      post: "/v1/{name=tasks/*}:cancel"
      body: "*"
    };
  }
  // SubscribeToTask allows subscribing to task updates for tasks not in terminal state.
  // Returns UnsupportedOperationError if task is in terminal state (completed, failed, cancelled, rejected).
  rpc SubscribeToTask(SubscribeToTaskRequest)
      returns (stream StreamResponse) {
    option (google.api.http) = {
      get: "/v1/{name=tasks/*}:subscribe"
    };
  }

  // Set a push notification config for a task.
  rpc SetTaskPushNotificationConfig(SetTaskPushNotificationConfigRequest)
      returns (TaskPushNotificationConfig) {
    option (google.api.http) = {
      post: "/v1/{parent=tasks/*/pushNotificationConfigs}"
      body: "config"
    };
    option (google.api.method_signature) = "parent,config";
  }
  // Get a push notification config for a task.
  rpc GetTaskPushNotificationConfig(GetTaskPushNotificationConfigRequest)
      returns (TaskPushNotificationConfig) {
    option (google.api.http) = {
      get: "/v1/{name=tasks/*/pushNotificationConfigs/*}"
    };
    option (google.api.method_signature) = "name";
  }
  // Get a list of push notifications configured for a task.
  rpc ListTaskPushNotificationConfig(ListTaskPushNotificationConfigRequest)
      returns (ListTaskPushNotificationConfigResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=tasks/*}/pushNotificationConfigs"
    };
    option (google.api.method_signature) = "parent";
  }
  // GetExtendedAgentCard returns the extended agent card for authenticated agents.
  rpc GetExtendedAgentCard(GetExtendedAgentCardRequest) returns (AgentCard) {
    option (google.api.http) = {
      get: "/v1/extendedAgentCard"
    };
  }
  // Delete a push notification config for a task.
  rpc DeleteTaskPushNotificationConfig(DeleteTaskPushNotificationConfigRequest)
      returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete: "/v1/{name=tasks/*/pushNotificationConfigs/*}"
    };
    option (google.api.method_signature) = "name";
  }
}

///////// Data Model ////////////

// Configuration of a send message request.
message SendMessageConfiguration {
  // The output modes that the agent is expected to respond with.
  repeated string accepted_output_modes = 1;
  // A configuration of a webhook that can be used to receive updates
  PushNotificationConfig push_notification_config = 2;
  // The maximum number of messages to include in the history.
  optional int32 history_length = 3;
  // If true, the message will be blocking until the task is completed.
  bool blocking = 4;
}

// Task is the core unit of action for A2A. It has a current status
// and when results are created for the task they are stored in the
// artifact. If there are multiple turns for a task, these are stored in
// history.
message Task {
  // Unique identifier (e.g. UUID) for the task, generated by the server for a
  // new task.
  string id = 1 [(google.api.field_behavior) = REQUIRED];
  // Unique identifier (e.g. UUID) for the contextual collection of interactions
  // (tasks and messages). Created by the A2A server.
  string context_id = 2 [(google.api.field_behavior) = REQUIRED];
  // The current status of a Task, including state and a message.
  TaskStatus status = 3 [(google.api.field_behavior) = REQUIRED];
  // A set of output artifacts for a Task.
  repeated Artifact artifacts = 4;
  // protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
  // The history of interactions from a task.
  repeated Message history = 5;
  // protolint:enable REPEATED_FIELD_NAMES_PLURALIZED
  // A key/value object to store custom metadata about a task.
  // Optional metadata for extensions. The key is an extension-specific
  // identifier.
  google.protobuf.Struct metadata = 6;
}

// The set of states a Task can be in.
enum TaskState {
  TASK_STATE_UNSPECIFIED = 0;
  // Represents the status that acknowledges a task is created
  TASK_STATE_SUBMITTED = 1;
  // Represents the status that a task is actively being processed
  TASK_STATE_WORKING = 2;
  // Represents the status a task is finished. This is a terminal state
  TASK_STATE_COMPLETED = 3;
  // Represents the status a task is done but failed. This is a terminal state
  TASK_STATE_FAILED = 4;
  // Represents the status a task was cancelled before it finished.
  // This is a terminal state.
  TASK_STATE_CANCELLED = 5;
  // Represents the status that the task requires information to complete.
  // This is an interrupted state.
  TASK_STATE_INPUT_REQUIRED = 6;
  // Represents the status that the agent has decided to not perform the task.
  // This may be done during initial task creation or later once an agent
  // has determined it can't or won't proceed. This is a terminal state.
  TASK_STATE_REJECTED = 7;
  // Represents the state that some authentication is needed from the upstream
  // client. Authentication is expected to come out-of-band thus this is not
  // an interrupted or terminal state.
  TASK_STATE_AUTH_REQUIRED = 8;
}

// A container for the status of a task
message TaskStatus {
  // The current state of this task.
  TaskState state = 1 [(google.api.field_behavior) = REQUIRED];
  // A message associated with the status.
  Message message = 2;
  // ISO 8601 Timestamp when the status was recorded.
  // Example: "2023-10-27T10:00:00Z"
  google.protobuf.Timestamp timestamp = 3;
}

// Part represents a container for a section of communication content.
// Parts can be purely textual, some sort of file (image, video, etc) or
// a structured data blob (i.e. JSON).
message Part {
  oneof part {
    // The string content of the text part.
    string text = 1;
    // The file content, represented as either a URI or as base64-encoded bytes.
    FilePart file = 2;
    // The structured data content.
    DataPart data = 3;
  }
  // Optional metadata associated with this part.
  google.protobuf.Struct metadata = 4;
}

// FilePart represents the different ways files can be provided. If files are
// small, directly feeding the bytes is supported via file_with_bytes. If the
// file is large, the agent should read the content as appropriate directly
// from the file_with_uri source.
message FilePart {
  oneof file {
    // A URL pointing to the file's content.
    string file_with_uri = 1;
    // The base64-encoded content of the file.
    bytes file_with_bytes = 2;
  }
  // The media type of the file (e.g., "application/pdf").
  string media_type = 3;
  // An optional name for the file (e.g., "document.pdf").
  string name = 4;
}

// DataPart represents a structured blob. This is most commonly a JSON payload.
message DataPart {
  // The structured data content.
  google.protobuf.Struct data = 1 [(google.api.field_behavior) = REQUIRED];
}

// Defines the sender of a message in A2A protocol communication.
enum Role {
  ROLE_UNSPECIFIED = 0;
  // USER role refers to communication from the client to the server.
  ROLE_USER = 1;
  // AGENT role refers to communication from the server to the client.
  ROLE_AGENT = 2;
}

// Message is one unit of communication between client and server. It is
// associated with a context and optionally a task. Since the server is
// responsible for the context definition, it must always provide a context_id
// in its messages. The client can optionally provide the context_id if it
// knows the context to associate the message to. Similarly for task_id,
// except the server decides if a task is created and whether to include the
// task_id.
message Message {
  // The unique identifier (e.g. UUID) of the message. This is required and
  // created by the message creator.
  string message_id = 1 [(google.api.field_behavior) = REQUIRED];
  // The context id of the message. This is optional and if set, the message
  // will be associated with the given context.
  string context_id = 2;
  // The task id of the message. This is optional and if set, the message
  // will be associated with the given task.
  string task_id = 3;
  // Identifies the sender of the message.
  Role role = 4 [(google.api.field_behavior) = REQUIRED];
  // protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
  // Parts is the container of the message content.
  repeated Part parts = 5 [(google.api.field_behavior) = REQUIRED];
  // protolint:enable REPEATED_FIELD_NAMES_PLURALIZED
  // Any optional metadata to provide along with the message.
  google.protobuf.Struct metadata = 6;
  // The URIs of extensions that are present or contributed to this Message.
  repeated string extensions = 7;
  // A list of task IDs that this message references for additional context.
  repeated string reference_task_ids = 8;
}

// Artifacts represent task outputs.
message Artifact {
  // Unique identifier (e.g. UUID) for the artifact. It must be at least unique
  // within a task.
  string artifact_id = 1 [(google.api.field_behavior) = REQUIRED];
  // A human readable name for the artifact.
  string name = 3;
  // A human readable description of the artifact, optional.
  string description = 4;
  // The content of the artifact.
  repeated Part parts = 5 [(google.api.field_behavior) = REQUIRED];
  // Optional metadata included with the artifact.
  google.protobuf.Struct metadata = 6;
  // The URIs of extensions that are present or contributed to this Artifact.
  repeated string extensions = 7;
}

// An event sent by the agent to notify the client of a change in a task's
// status.
message TaskStatusUpdateEvent {
  // The id of the task that is changed
  string task_id = 1 [(google.api.field_behavior) = REQUIRED];
  // The id of the context that the task belongs to
  string context_id = 2 [(google.api.field_behavior) = REQUIRED];
  // The new status of the task.
  TaskStatus status = 3 [(google.api.field_behavior) = REQUIRED];
  // If true, this is the final event in the stream for this interaction.
  bool final = 4 [(google.api.field_behavior) = REQUIRED];
  // Optional metadata to associate with the task update.
  google.protobuf.Struct metadata = 5;
}

// TaskArtifactUpdateEvent represents a task delta where an artifact has
// been generated.
message TaskArtifactUpdateEvent {
  // The id of the task for this artifact.
  string task_id = 1 [(google.api.field_behavior) = REQUIRED];
  // The id of the context that this task belongs to.
  string context_id = 2 [(google.api.field_behavior) = REQUIRED];
  // The artifact that was generated or updated.
  Artifact artifact = 3 [(google.api.field_behavior) = REQUIRED];
  // If true, the content of this artifact should be appended to a previously
  // sent artifact with the same ID.
  bool append = 4;
  // If true, this is the final chunk of the artifact.
  bool last_chunk = 5;
  // Optional metadata associated with the artifact update.
  google.protobuf.Struct metadata = 6;
}

// Configuration for setting up push notifications for task updates.
message PushNotificationConfig {
  // A unique identifier (e.g. UUID) for this push notification.
  string id = 1;
  // Url to send the notification too
  string url = 2 [(google.api.field_behavior) = REQUIRED];
  // Token unique for this task/session
  string token = 3;
  // Information about the authentication to sent with the notification
  AuthenticationInfo authentication = 4;
}

// Defines authentication details, used for push notifications.
message AuthenticationInfo {
  // A list of supported authentication schemes (e.g., 'Basic', 'Bearer').
  repeated string schemes = 1 [(google.api.field_behavior) = REQUIRED];
  // Optional credentials
  string credentials = 2;
}

// Declares a combination of a target URL and a transport protocol for interacting with the agent.
// This allows agents to expose the same functionality over multiple protocol binding mechanisms.
message AgentInterface {
  // The URL where this interface is available. Must be a valid absolute HTTPS URL in production.
  // Example: "https://api.example.com/a2a/v1", "https://grpc.example.com/a2a"
  string url = 1 [(google.api.field_behavior) = REQUIRED];
  // The protocol binding supported at this URL. This is an open form string, to be
  // easily extended for other protocol bindings. The core ones officially
  // supported are JSONRPC, GRPC and HTTP+JSON.
  // Example: "JSONRPC", "GRPC", "HTTP+JSON"
  string protocol_binding = 2 [(google.api.field_behavior) = REQUIRED];
}

// AgentCard is a self-describing manifest for an agent. It provides essential
// metadata including the agent's identity, capabilities, skills, supported
// communication methods, and security requirements.
// AgentCard conveys key information:
// - Overall details (version, name, description, uses)
// - Skills; a set of actions/solutions the agent can perform
// - Default modalities/content types supported by the agent.
// - Authentication requirements
// Next ID: 20
message AgentCard {
  // The version of the A2A protocol this agent supports.
  // Default: "1.0"
  optional string protocol_version = 16 [(google.api.field_behavior) = REQUIRED];
  // A human readable name for the agent.
  // Example: "Recipe Agent"
  string name = 1 [(google.api.field_behavior) = REQUIRED];
  // A human-readable description of the agent, assisting users and other agents
  // in understanding its purpose.
  // Example: "Agent that helps users with recipes and cooking."
  string description = 2 [(google.api.field_behavior) = REQUIRED];
  // Ordered list of supported interfaces. First entry is preferred.
  repeated AgentInterface supported_interfaces = 19;
  // DEPRECATED: Use 'supported_interfaces' instead.
  optional string url = 3 [deprecated = true];
  // DEPRECATED: Use 'supported_interfaces' instead.
  optional string preferred_transport = 14 [deprecated = true];
  // DEPRECATED: Use 'supported_interfaces' instead.
  repeated AgentInterface additional_interfaces = 15 [deprecated = true];
  // The service provider of the agent.
  AgentProvider provider = 4;
  // The version of the agent.
  // Example: "1.0.0"
  string version = 5 [(google.api.field_behavior) = REQUIRED];
  // A url to provide additional documentation about the agent.
  optional string documentation_url = 6;
  // A2A Capability set supported by the agent.
  AgentCapabilities capabilities = 7 [(google.api.field_behavior) = REQUIRED];
  // The security scheme details used for authenticating with this agent.
  map<string, SecurityScheme> security_schemes = 8;
  // protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
  // Security requirements for contacting the agent.
  repeated Security security = 9;
  // protolint:enable REPEATED_FIELD_NAMES_PLURALIZED
  // The set of interaction modes that the agent supports across all skills.
  // This can be overridden per skill. Defined as media types.
  repeated string default_input_modes = 10 [(google.api.field_behavior) = REQUIRED];
  // The media types supported as outputs from this agent.
  repeated string default_output_modes = 11 [(google.api.field_behavior) = REQUIRED];
  // Skills represent a unit of ability an agent can perform. This may
  // somewhat abstract but represents a more focused set of actions that the
  // agent is highly likely to succeed at.
  repeated AgentSkill skills = 12 [(google.api.field_behavior) = REQUIRED];
  // Whether the agent supports providing an extended agent card when authenticated.
  optional bool supports_authenticated_extended_card = 13;
  // JSON Web Signatures computed for this AgentCard.
  repeated AgentCardSignature signatures = 17;
  // An optional URL to an icon for the agent.
  optional string icon_url = 18;
}

// Represents the service provider of an agent.
message AgentProvider {
  // A URL for the agent provider's website or relevant documentation.
  // Example: "https://ai.google.dev"
  string url = 1 [(google.api.field_behavior) = REQUIRED];
  // The name of the agent provider's organization.
  // Example: "Google"
  string organization = 2 [(google.api.field_behavior) = REQUIRED];
}

// Defines optional capabilities supported by an agent.
message AgentCapabilities {
  // Indicates if the agent supports streaming responses.
  optional bool streaming = 1;
  // Indicates if the agent supports sending push notifications for asynchronous task updates.
  optional bool push_notifications = 2;
  // A list of protocol extensions supported by the agent.
  repeated AgentExtension extensions = 3;
  // Indicates if the agent provides a history of state transitions for a task.
  optional bool state_transition_history = 4;
}

// A declaration of a protocol extension supported by an Agent.
message AgentExtension {
  // The unique URI identifying the extension.
  string uri = 1;
  // A human-readable description of how this agent uses the extension.
  string description = 2;
  // If true, the client must understand and comply with the extension's requirements.
  bool required = 3;
  // Optional, extension-specific configuration parameters.
  google.protobuf.Struct params = 4;
}

// Represents a distinct capability or function that an agent can perform.
message AgentSkill {
  // A unique identifier for the agent's skill.
  string id = 1 [(google.api.field_behavior) = REQUIRED];
  // A human-readable name for the skill.
  string name = 2 [(google.api.field_behavior) = REQUIRED];
  // A detailed description of the skill.
  string description = 3 [(google.api.field_behavior) = REQUIRED];
  // A set of keywords describing the skill's capabilities.
  repeated string tags = 4 [(google.api.field_behavior) = REQUIRED];
  // Example prompts or scenarios that this skill can handle.
  repeated string examples = 5;
  // The set of supported input media types for this skill, overriding the agent's defaults.
  repeated string input_modes = 6;
  // The set of supported output media types for this skill, overriding the agent's defaults.
  repeated string output_modes = 7;
  // protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
  // Security schemes necessary for this skill.
  repeated Security security = 8;
  // protolint:enable REPEATED_FIELD_NAMES_PLURALIZED
}

// AgentCardSignature represents a JWS signature of an AgentCard.
// This follows the JSON format of an RFC 7515 JSON Web Signature (JWS).
message AgentCardSignature {
  // The protected JWS header for the signature. This is always a
  // base64url-encoded JSON object. Required.
  string protected = 1 [(google.api.field_behavior) = REQUIRED];
  // The computed signature, base64url-encoded. Required.
  string signature = 2 [(google.api.field_behavior) = REQUIRED];
  // The unprotected JWS header values.
  google.protobuf.Struct header = 3;
}

// A container associating a push notification configuration with a specific
// task.
message TaskPushNotificationConfig {
  // The resource name of the config.
  // Format: tasks/{task_id}/pushNotificationConfigs/{config_id}
  string name = 1 [(google.api.field_behavior) = REQUIRED];
  // The push notification configuration details.
  PushNotificationConfig push_notification_config = 2 [(google.api.field_behavior) = REQUIRED];
}

// protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
message StringList {
  repeated string list = 1;
}
// protolint:enable REPEATED_FIELD_NAMES_PLURALIZED

message Security {
  map<string, StringList> schemes = 1;
}

// Defines a security scheme that can be used to secure an agent's endpoints.
// This is a discriminated union type based on the OpenAPI 3.2 Security Scheme Object.
// See: https://spec.openapis.org/oas/v3.2.0.html#security-scheme-object
message SecurityScheme {
  oneof scheme {
    APIKeySecurityScheme api_key_security_scheme = 1;
    HTTPAuthSecurityScheme http_auth_security_scheme = 2;
    OAuth2SecurityScheme oauth2_security_scheme = 3;
    OpenIdConnectSecurityScheme open_id_connect_security_scheme = 4;
    MutualTlsSecurityScheme mtls_security_scheme = 5;
  }
}

// Defines a security scheme using an API key.
message APIKeySecurityScheme {
  // An optional description for the security scheme.
  string description = 1;
  // The location of the API key. Valid values are "query", "header", or "cookie".
  string location = 2 [(google.api.field_behavior) = REQUIRED];
  // The name of the header, query, or cookie parameter to be used.
  string name = 3 [(google.api.field_behavior) = REQUIRED];
}

// Defines a security scheme using HTTP authentication.
message HTTPAuthSecurityScheme {
  // An optional description for the security scheme.
  string description = 1;
  // The name of the HTTP Authentication scheme to be used in the Authorization header,
  // as defined in RFC7235 (e.g., "Bearer").
  // This value should be registered in the IANA Authentication Scheme registry.
  string scheme = 2 [(google.api.field_behavior) = REQUIRED];
  // A hint to the client to identify how the bearer token is formatted (e.g., "JWT").
  // This is primarily for documentation purposes.
  string bearer_format = 3;
}

// Defines a security scheme using OAuth 2.0.
message OAuth2SecurityScheme {
  // An optional description for the security scheme.
  string description = 1;
  // An object containing configuration information for the supported OAuth 2.0 flows.
  OAuthFlows flows = 2 [(google.api.field_behavior) = REQUIRED];
  // URL to the oauth2 authorization server metadata
  // RFC8414 (https://datatracker.ietf.org/doc/html/rfc8414). TLS is required.
  string oauth2_metadata_url = 3;
}

// Defines a security scheme using OpenID Connect.
message OpenIdConnectSecurityScheme {
  // An optional description for the security scheme.
  string description = 1;
  // The OpenID Connect Discovery URL for the OIDC provider's metadata.
  // See: https://openid.net/specs/openid-connect-discovery-1_0.html
  string open_id_connect_url = 2 [(google.api.field_behavior) = REQUIRED];
}

// Defines a security scheme using mTLS authentication.
message MutualTlsSecurityScheme {
  // An optional description for the security scheme.
  string description = 1;
}

// Defines the configuration for the supported OAuth 2.0 flows.
message OAuthFlows {
  oneof flow {
    // Configuration for the OAuth Authorization Code flow.
    AuthorizationCodeOAuthFlow authorization_code = 1;
    // Configuration for the OAuth Client Credentials flow.
    ClientCredentialsOAuthFlow client_credentials = 2;
    // Configuration for the OAuth Implicit flow.
    ImplicitOAuthFlow implicit = 3;
    // Configuration for the OAuth Resource Owner Password flow.
    PasswordOAuthFlow password = 4;
  }
}

// Defines configuration details for the OAuth 2.0 Authorization Code flow.
message AuthorizationCodeOAuthFlow {
  // The authorization URL to be used for this flow.
  string authorization_url = 1 [(google.api.field_behavior) = REQUIRED];
  // The token URL to be used for this flow.
  string token_url = 2 [(google.api.field_behavior) = REQUIRED];
  // The URL to be used for obtaining refresh tokens.
  string refresh_url = 3;
  // The available scopes for the OAuth2 security scheme.
  map<string, string> scopes = 4 [(google.api.field_behavior) = REQUIRED];
}

// Defines configuration details for the OAuth 2.0 Client Credentials flow.
message ClientCredentialsOAuthFlow {
  // The token URL to be used for this flow.
  string token_url = 1 [(google.api.field_behavior) = REQUIRED];
  // The URL to be used for obtaining refresh tokens.
  string refresh_url = 2;
  // The available scopes for the OAuth2 security scheme.
  map<string, string> scopes = 3 [(google.api.field_behavior) = REQUIRED];
}

// Defines configuration details for the OAuth 2.0 Implicit flow.
message ImplicitOAuthFlow {
  // The authorization URL to be used for this flow.
  string authorization_url = 1 [(google.api.field_behavior) = REQUIRED];
  // The URL to be used for obtaining refresh tokens.
  string refresh_url = 2;
  // The available scopes for the OAuth2 security scheme.
  map<string, string> scopes = 3 [(google.api.field_behavior) = REQUIRED];
}

// Defines configuration details for the OAuth 2.0 Resource Owner Password flow.
message PasswordOAuthFlow {
  // The token URL to be used for this flow.
  string token_url = 1 [(google.api.field_behavior) = REQUIRED];
  // The URL to be used for obtaining refresh tokens.
  string refresh_url = 2;
  // The available scopes for the OAuth2 security scheme.
  map<string, string> scopes = 3 [(google.api.field_behavior) = REQUIRED];
}

///////////// Request Messages ///////////
// Represents a request for the `message/send` method.
message SendMessageRequest {
  // The message to send to the agent.
  Message request = 1
      [(google.api.field_behavior) = REQUIRED, json_name = "message"];
  // Configuration for the send request.
  SendMessageConfiguration configuration = 2;
  // Optional metadata for the request.
  google.protobuf.Struct metadata = 3;
}

// Represents a request for the `tasks/get` method.
message GetTaskRequest {
  // The resource name of the task.
  // Format: tasks/{task_id}
  string name = 1 [(google.api.field_behavior) = REQUIRED];
  // The maximum number of messages to include in the history.
  optional int32 history_length = 2;
}

// Parameters for listing tasks with optional filtering criteria.
message ListTasksRequest {
  // Filter tasks by context ID to get tasks from a specific conversation or session.
  string context_id = 1;
  // Filter tasks by their current status state.
  TaskState status = 2;
  // Maximum number of tasks to return. Must be between 1 and 100.
  // Defaults to 50 if not specified.
  optional int32 page_size = 3;
  // Token for pagination. Use the next_page_token from a previous ListTasksResponse.
  string page_token = 4;
  // The maximum number of messages to include in each task's history.
  optional int32 history_length = 5;
  // Filter tasks updated after this timestamp (milliseconds since epoch).
  // Only tasks with a last updated time greater than or equal to this value will be returned.
  int64 last_updated_after = 6;
  // Whether to include artifacts in the returned tasks.
  // Defaults to false to reduce payload size.
  optional bool include_artifacts = 7;
  // Request-specific metadata.
  google.protobuf.Struct metadata = 8;
}

// Result object for tasks/list method containing an array of tasks and pagination information.
message ListTasksResponse {
  // Array of tasks matching the specified criteria.
  repeated Task tasks = 1 [(google.api.field_behavior) = REQUIRED];
  // Token for retrieving the next page. Empty string if no more results.
  string next_page_token = 2 [(google.api.field_behavior) = REQUIRED];
  // The size of page requested.
  int32 page_size = 3 [(google.api.field_behavior) = REQUIRED];
  // Total number of tasks available (before pagination).
  int32 total_size = 4 [(google.api.field_behavior) = REQUIRED];
}

// Represents a request for the `tasks/cancel` method.
message CancelTaskRequest {
  // The resource name of the task to cancel.
  // Format: tasks/{task_id}
  string name = 1;
}

message GetTaskPushNotificationConfigRequest {
  // The resource name of the config to retrieve.
  // Format: tasks/{task_id}/pushNotificationConfigs/{config_id}
  string name = 1;
}

// Represents a request for the `tasks/pushNotificationConfig/delete` method.
message DeleteTaskPushNotificationConfigRequest {
  // The resource name of the config to delete.
  // Format: tasks/{task_id}/pushNotificationConfigs/{config_id}
  string name = 1;
}

// Represents a request for the `tasks/pushNotificationConfig/set` method.
message SetTaskPushNotificationConfigRequest {
  // The parent task resource for this config.
  // Format: tasks/{task_id}
  string parent = 1 [(google.api.field_behavior) = REQUIRED];
  // The ID for the new config.
  string config_id = 2 [(google.api.field_behavior) = REQUIRED];
  // The configuration to create.
  TaskPushNotificationConfig config = 3
      [(google.api.field_behavior) = REQUIRED];
}

message SubscribeToTaskRequest {
  // The resource name of the task to subscribe to.
  // Format: tasks/{task_id}
  string name = 1;
}

message ListTaskPushNotificationConfigRequest {
  // The parent task resource.
  // Format: tasks/{task_id}
  string parent = 1;
  // The maximum number of configurations to return.
  int32 page_size = 2;

  // A page token received from a previous ListTaskPushNotificationConfigRequest call.
  string page_token = 3;
}

message GetExtendedAgentCardRequest {
  // Empty. Added to fix linter violation.
}

//////// Response Messages ///////////
message SendMessageResponse {
  oneof payload {
    Task task = 1;
    Message msg = 2 [json_name = "message"];
  }
}

// Response message containing task updates or messages.
message StreamResponse {
  oneof payload {
    Task task = 1;
    Message msg = 2 [json_name = "message"];
    TaskStatusUpdateEvent status_update = 3;
    TaskArtifactUpdateEvent artifact_update = 4;
  }
}

// Represents a successful response for the `tasks/pushNotificationConfig/list`
// method.
message ListTaskPushNotificationConfigResponse {
  // The list of push notification configurations.
  repeated TaskPushNotificationConfig configs = 1;
  // A token, which can be sent as `page_token` to retrieve the next page.
  // If this field is omitted, there are no subsequent pages.
  string next_page_token = 2;
}

JSON

The A2A protocol JSON Schema definition (JSON Schema 2020-12 compliant). This schema is automatically generated from the protocol buffer definitions and bundled into a single file with all message definitions.

Download

You can download the schema file directly: a2a.json

Definition

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "A2A Protocol Schemas",
  "description": "Non-normative JSON Schema bundle extracted from proto definitions.",
  "version": "v1",
  "definitions": {
    "API Key Security Scheme": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines a security scheme using an API key.",
      "properties": {
        "description": {
          "default": "",
          "description": "An optional description for the security scheme.",
          "type": "string"
        },
        "location": {
          "default": "",
          "description": "The location of the API key. Valid values are \"query\", \"header\", or \"cookie\".",
          "type": "string"
        },
        "name": {
          "default": "",
          "description": "The name of the header, query, or cookie parameter to be used.",
          "type": "string"
        }
      },
      "title": "API Key Security Scheme",
      "type": "object"
    },
    "Agent Capabilities": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines optional capabilities supported by an agent.",
      "patternProperties": {
        "^(push_notifications)$": {
          "description": "Indicates if the agent supports sending push notifications for asynchronous task updates.",
          "type": "boolean"
        },
        "^(state_transition_history)$": {
          "description": "Indicates if the agent provides a history of state transitions for a task.",
          "type": "boolean"
        }
      },
      "properties": {
        "extensions": {
          "description": "A list of protocol extensions supported by the agent.",
          "items": {
            "$ref": "a2a.v1.AgentExtension.jsonschema.json"
          },
          "type": "array"
        },
        "pushNotifications": {
          "description": "Indicates if the agent supports sending push notifications for asynchronous task updates.",
          "type": "boolean"
        },
        "stateTransitionHistory": {
          "description": "Indicates if the agent provides a history of state transitions for a task.",
          "type": "boolean"
        },
        "streaming": {
          "description": "Indicates if the agent supports streaming responses.",
          "type": "boolean"
        }
      },
      "title": "Agent Capabilities",
      "type": "object"
    },
    "Agent Card": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "AgentCard is a self-describing manifest for an agent. It provides essential\n metadata including the agent's identity, capabilities, skills, supported\n communication methods, and security requirements.\n AgentCard conveys key information:\n - Overall details (version, name, description, uses)\n - Skills; a set of actions/solutions the agent can perform\n - Default modalities/content types supported by the agent.\n - Authentication requirements\n Next ID: 20",
      "patternProperties": {
        "^(additional_interfaces)$": {
          "description": "DEPRECATED: Use 'supported_interfaces' instead.",
          "items": {
            "$ref": "a2a.v1.AgentInterface.jsonschema.json"
          },
          "type": "array"
        },
        "^(default_input_modes)$": {
          "description": "The set of interaction modes that the agent supports across all skills.\n This can be overridden per skill. Defined as media types.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "^(default_output_modes)$": {
          "description": "The media types supported as outputs from this agent.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "^(documentation_url)$": {
          "description": "A url to provide additional documentation about the agent.",
          "type": "string"
        },
        "^(icon_url)$": {
          "description": "An optional URL to an icon for the agent.",
          "type": "string"
        },
        "^(preferred_transport)$": {
          "description": "DEPRECATED: Use 'supported_interfaces' instead.",
          "type": "string"
        },
        "^(protocol_version)$": {
          "description": "The version of the A2A protocol this agent supports.\n Default: \"1.0\"",
          "type": "string"
        },
        "^(security_schemes)$": {
          "additionalProperties": {
            "$ref": "a2a.v1.SecurityScheme.jsonschema.json"
          },
          "description": "The security scheme details used for authenticating with this agent.",
          "propertyNames": {
            "type": "string"
          },
          "type": "object"
        },
        "^(supported_interfaces)$": {
          "description": "Ordered list of supported interfaces. First entry is preferred.",
          "items": {
            "$ref": "a2a.v1.AgentInterface.jsonschema.json"
          },
          "type": "array"
        },
        "^(supports_authenticated_extended_card)$": {
          "description": "Whether the agent supports providing an extended agent card when authenticated.",
          "type": "boolean"
        }
      },
      "properties": {
        "additionalInterfaces": {
          "description": "DEPRECATED: Use 'supported_interfaces' instead.",
          "items": {
            "$ref": "a2a.v1.AgentInterface.jsonschema.json"
          },
          "type": "array"
        },
        "capabilities": {
          "$ref": "a2a.v1.AgentCapabilities.jsonschema.json",
          "description": "A2A Capability set supported by the agent."
        },
        "defaultInputModes": {
          "description": "The set of interaction modes that the agent supports across all skills.\n This can be overridden per skill. Defined as media types.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "defaultOutputModes": {
          "description": "The media types supported as outputs from this agent.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "description": {
          "default": "",
          "description": "A human-readable description of the agent, assisting users and other agents\n in understanding its purpose.\n Example: \"Agent that helps users with recipes and cooking.\"",
          "type": "string"
        },
        "documentationUrl": {
          "description": "A url to provide additional documentation about the agent.",
          "type": "string"
        },
        "iconUrl": {
          "description": "An optional URL to an icon for the agent.",
          "type": "string"
        },
        "name": {
          "default": "",
          "description": "A human readable name for the agent.\n Example: \"Recipe Agent\"",
          "type": "string"
        },
        "preferredTransport": {
          "description": "DEPRECATED: Use 'supported_interfaces' instead.",
          "type": "string"
        },
        "protocolVersion": {
          "description": "The version of the A2A protocol this agent supports.\n Default: \"1.0\"",
          "type": "string"
        },
        "provider": {
          "$ref": "a2a.v1.AgentProvider.jsonschema.json",
          "description": "The service provider of the agent."
        },
        "security": {
          "description": "Security requirements for contacting the agent.",
          "items": {
            "$ref": "a2a.v1.Security.jsonschema.json"
          },
          "type": "array"
        },
        "securitySchemes": {
          "additionalProperties": {
            "$ref": "a2a.v1.SecurityScheme.jsonschema.json"
          },
          "description": "The security scheme details used for authenticating with this agent.",
          "propertyNames": {
            "type": "string"
          },
          "type": "object"
        },
        "signatures": {
          "description": "JSON Web Signatures computed for this AgentCard.",
          "items": {
            "$ref": "a2a.v1.AgentCardSignature.jsonschema.json"
          },
          "type": "array"
        },
        "skills": {
          "description": "Skills represent a unit of ability an agent can perform. This may\n somewhat abstract but represents a more focused set of actions that the\n agent is highly likely to succeed at.",
          "items": {
            "$ref": "a2a.v1.AgentSkill.jsonschema.json"
          },
          "type": "array"
        },
        "supportedInterfaces": {
          "description": "Ordered list of supported interfaces. First entry is preferred.",
          "items": {
            "$ref": "a2a.v1.AgentInterface.jsonschema.json"
          },
          "type": "array"
        },
        "supportsAuthenticatedExtendedCard": {
          "description": "Whether the agent supports providing an extended agent card when authenticated.",
          "type": "boolean"
        },
        "url": {
          "description": "DEPRECATED: Use 'supported_interfaces' instead.",
          "type": "string"
        },
        "version": {
          "default": "",
          "description": "The version of the agent.\n Example: \"1.0.0\"",
          "type": "string"
        }
      },
      "title": "Agent Card",
      "type": "object"
    },
    "Agent Card Signature": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "AgentCardSignature represents a JWS signature of an AgentCard.\n This follows the JSON format of an RFC 7515 JSON Web Signature (JWS).",
      "properties": {
        "header": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "The unprotected JWS header values."
        },
        "protected": {
          "default": "",
          "description": "The protected JWS header for the signature. This is always a\n base64url-encoded JSON object. Required.",
          "type": "string"
        },
        "signature": {
          "default": "",
          "description": "The computed signature, base64url-encoded. Required.",
          "type": "string"
        }
      },
      "title": "Agent Card Signature",
      "type": "object"
    },
    "Agent Extension": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "A declaration of a protocol extension supported by an Agent.",
      "properties": {
        "description": {
          "default": "",
          "description": "A human-readable description of how this agent uses the extension.",
          "type": "string"
        },
        "params": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Optional, extension-specific configuration parameters."
        },
        "required": {
          "default": false,
          "description": "If true, the client must understand and comply with the extension's requirements.",
          "type": "boolean"
        },
        "uri": {
          "default": "",
          "description": "The unique URI identifying the extension.",
          "type": "string"
        }
      },
      "title": "Agent Extension",
      "type": "object"
    },
    "Agent Interface": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Declares a combination of a target URL and a transport protocol for interacting with the agent.\n This allows agents to expose the same functionality over multiple protocol binding mechanisms.",
      "patternProperties": {
        "^(protocol_binding)$": {
          "default": "",
          "description": "The protocol binding supported at this URL. This is an open form string, to be\n easily extended for other protocol bindings. The core ones officially\n supported are JSONRPC, GRPC and HTTP+JSON.\n Example: \"JSONRPC\", \"GRPC\", \"HTTP+JSON\"",
          "type": "string"
        }
      },
      "properties": {
        "protocolBinding": {
          "default": "",
          "description": "The protocol binding supported at this URL. This is an open form string, to be\n easily extended for other protocol bindings. The core ones officially\n supported are JSONRPC, GRPC and HTTP+JSON.\n Example: \"JSONRPC\", \"GRPC\", \"HTTP+JSON\"",
          "type": "string"
        },
        "url": {
          "default": "",
          "description": "The URL where this interface is available. Must be a valid absolute HTTPS URL in production.\n Example: \"https://api.example.com/a2a/v1\", \"https://grpc.example.com/a2a\"",
          "type": "string"
        }
      },
      "title": "Agent Interface",
      "type": "object"
    },
    "Agent Provider": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Represents the service provider of an agent.",
      "properties": {
        "organization": {
          "default": "",
          "description": "The name of the agent provider's organization.\n Example: \"Google\"",
          "type": "string"
        },
        "url": {
          "default": "",
          "description": "A URL for the agent provider's website or relevant documentation.\n Example: \"https://ai.google.dev\"",
          "type": "string"
        }
      },
      "title": "Agent Provider",
      "type": "object"
    },
    "Agent Skill": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Represents a distinct capability or function that an agent can perform.",
      "patternProperties": {
        "^(input_modes)$": {
          "description": "The set of supported input media types for this skill, overriding the agent's defaults.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "^(output_modes)$": {
          "description": "The set of supported output media types for this skill, overriding the agent's defaults.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "properties": {
        "description": {
          "default": "",
          "description": "A detailed description of the skill.",
          "type": "string"
        },
        "examples": {
          "description": "Example prompts or scenarios that this skill can handle.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "id": {
          "default": "",
          "description": "A unique identifier for the agent's skill.",
          "type": "string"
        },
        "inputModes": {
          "description": "The set of supported input media types for this skill, overriding the agent's defaults.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "name": {
          "default": "",
          "description": "A human-readable name for the skill.",
          "type": "string"
        },
        "outputModes": {
          "description": "The set of supported output media types for this skill, overriding the agent's defaults.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "security": {
          "description": "Security schemes necessary for this skill.",
          "items": {
            "$ref": "a2a.v1.Security.jsonschema.json"
          },
          "type": "array"
        },
        "tags": {
          "description": "A set of keywords describing the skill's capabilities.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "Agent Skill",
      "type": "object"
    },
    "Artifact": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Artifacts represent task outputs.",
      "patternProperties": {
        "^(artifact_id)$": {
          "default": "",
          "description": "Unique identifier (e.g. UUID) for the artifact. It must be at least unique\n within a task.",
          "type": "string"
        }
      },
      "properties": {
        "artifactId": {
          "default": "",
          "description": "Unique identifier (e.g. UUID) for the artifact. It must be at least unique\n within a task.",
          "type": "string"
        },
        "description": {
          "default": "",
          "description": "A human readable description of the artifact, optional.",
          "type": "string"
        },
        "extensions": {
          "description": "The URIs of extensions that are present or contributed to this Artifact.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Optional metadata included with the artifact."
        },
        "name": {
          "default": "",
          "description": "A human readable name for the artifact.",
          "type": "string"
        },
        "parts": {
          "description": "The content of the artifact.",
          "items": {
            "$ref": "a2a.v1.Part.jsonschema.json"
          },
          "type": "array"
        }
      },
      "title": "Artifact",
      "type": "object"
    },
    "Authentication Info": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines authentication details, used for push notifications.",
      "properties": {
        "credentials": {
          "default": "",
          "description": "Optional credentials",
          "type": "string"
        },
        "schemes": {
          "description": "A list of supported authentication schemes (e.g., 'Basic', 'Bearer').",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "Authentication Info",
      "type": "object"
    },
    "Authorization CodeO Auth Flow": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines configuration details for the OAuth 2.0 Authorization Code flow.",
      "patternProperties": {
        "^(authorization_url)$": {
          "default": "",
          "description": "The authorization URL to be used for this flow.",
          "type": "string"
        },
        "^(refresh_url)$": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        },
        "^(token_url)$": {
          "default": "",
          "description": "The token URL to be used for this flow.",
          "type": "string"
        }
      },
      "properties": {
        "authorizationUrl": {
          "default": "",
          "description": "The authorization URL to be used for this flow.",
          "type": "string"
        },
        "refreshUrl": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        },
        "scopes": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The available scopes for the OAuth2 security scheme.",
          "propertyNames": {
            "type": "string"
          },
          "type": "object"
        },
        "tokenUrl": {
          "default": "",
          "description": "The token URL to be used for this flow.",
          "type": "string"
        }
      },
      "title": "Authorization CodeO Auth Flow",
      "type": "object"
    },
    "Cancel Task Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Represents a request for the `tasks/cancel` method.",
      "properties": {
        "name": {
          "default": "",
          "description": "The resource name of the task to cancel.\n Format: tasks/{task_id}",
          "type": "string"
        }
      },
      "title": "Cancel Task Request",
      "type": "object"
    },
    "Client CredentialsO Auth Flow": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines configuration details for the OAuth 2.0 Client Credentials flow.",
      "patternProperties": {
        "^(refresh_url)$": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        },
        "^(token_url)$": {
          "default": "",
          "description": "The token URL to be used for this flow.",
          "type": "string"
        }
      },
      "properties": {
        "refreshUrl": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        },
        "scopes": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The available scopes for the OAuth2 security scheme.",
          "propertyNames": {
            "type": "string"
          },
          "type": "object"
        },
        "tokenUrl": {
          "default": "",
          "description": "The token URL to be used for this flow.",
          "type": "string"
        }
      },
      "title": "Client CredentialsO Auth Flow",
      "type": "object"
    },
    "Data Part": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "DataPart represents a structured blob. This is most commonly a JSON payload.",
      "properties": {
        "data": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "The structured data content."
        }
      },
      "title": "Data Part",
      "type": "object"
    },
    "Delete Task Push Notification Config Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Represents a request for the `tasks/pushNotificationConfig/delete` method.",
      "properties": {
        "name": {
          "default": "",
          "description": "The resource name of the config to delete.\n Format: tasks/{task_id}/pushNotificationConfigs/{config_id}",
          "type": "string"
        }
      },
      "title": "Delete Task Push Notification Config Request",
      "type": "object"
    },
    "File Part": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "FilePart represents the different ways files can be provided. If files are\n small, directly feeding the bytes is supported via file_with_bytes. If the\n file is large, the agent should read the content as appropriate directly\n from the file_with_uri source.",
      "patternProperties": {
        "^(file_with_bytes)$": {
          "description": "The base64-encoded content of the file.",
          "pattern": "^[A-Za-z0-9+/]*={0,2}$",
          "type": "string"
        },
        "^(file_with_uri)$": {
          "description": "A URL pointing to the file's content.",
          "type": "string"
        },
        "^(media_type)$": {
          "default": "",
          "description": "The media type of the file (e.g., \"application/pdf\").",
          "type": "string"
        }
      },
      "properties": {
        "fileWithBytes": {
          "description": "The base64-encoded content of the file.",
          "pattern": "^[A-Za-z0-9+/]*={0,2}$",
          "type": "string"
        },
        "fileWithUri": {
          "description": "A URL pointing to the file's content.",
          "type": "string"
        },
        "mediaType": {
          "default": "",
          "description": "The media type of the file (e.g., \"application/pdf\").",
          "type": "string"
        },
        "name": {
          "default": "",
          "description": "An optional name for the file (e.g., \"document.pdf\").",
          "type": "string"
        }
      },
      "title": "File Part",
      "type": "object"
    },
    "Get Extended Agent Card Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "properties": {},
      "title": "Get Extended Agent Card Request",
      "type": "object"
    },
    "Get Task Push Notification Config Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "properties": {
        "name": {
          "default": "",
          "description": "The resource name of the config to retrieve.\n Format: tasks/{task_id}/pushNotificationConfigs/{config_id}",
          "type": "string"
        }
      },
      "title": "Get Task Push Notification Config Request",
      "type": "object"
    },
    "Get Task Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Represents a request for the `tasks/get` method.",
      "patternProperties": {
        "^(history_length)$": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "The maximum number of messages to include in the history."
        }
      },
      "properties": {
        "historyLength": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "The maximum number of messages to include in the history."
        },
        "name": {
          "default": "",
          "description": "The resource name of the task.\n Format: tasks/{task_id}",
          "type": "string"
        }
      },
      "title": "Get Task Request",
      "type": "object"
    },
    "HTTP Auth Security Scheme": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines a security scheme using HTTP authentication.",
      "patternProperties": {
        "^(bearer_format)$": {
          "default": "",
          "description": "A hint to the client to identify how the bearer token is formatted (e.g., \"JWT\").\n This is primarily for documentation purposes.",
          "type": "string"
        }
      },
      "properties": {
        "bearerFormat": {
          "default": "",
          "description": "A hint to the client to identify how the bearer token is formatted (e.g., \"JWT\").\n This is primarily for documentation purposes.",
          "type": "string"
        },
        "description": {
          "default": "",
          "description": "An optional description for the security scheme.",
          "type": "string"
        },
        "scheme": {
          "default": "",
          "description": "The name of the HTTP Authentication scheme to be used in the Authorization header,\n as defined in RFC7235 (e.g., \"Bearer\").\n This value should be registered in the IANA Authentication Scheme registry.",
          "type": "string"
        }
      },
      "title": "HTTP Auth Security Scheme",
      "type": "object"
    },
    "ImplicitO Auth Flow": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines configuration details for the OAuth 2.0 Implicit flow.",
      "patternProperties": {
        "^(authorization_url)$": {
          "default": "",
          "description": "The authorization URL to be used for this flow.",
          "type": "string"
        },
        "^(refresh_url)$": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        }
      },
      "properties": {
        "authorizationUrl": {
          "default": "",
          "description": "The authorization URL to be used for this flow.",
          "type": "string"
        },
        "refreshUrl": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        },
        "scopes": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The available scopes for the OAuth2 security scheme.",
          "propertyNames": {
            "type": "string"
          },
          "type": "object"
        }
      },
      "title": "ImplicitO Auth Flow",
      "type": "object"
    },
    "List Task Push Notification Config Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "patternProperties": {
        "^(page_size)$": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "The maximum number of configurations to return."
        },
        "^(page_token)$": {
          "default": "",
          "description": "A page token received from a previous ListTaskPushNotificationConfigRequest call.",
          "type": "string"
        }
      },
      "properties": {
        "pageSize": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "The maximum number of configurations to return."
        },
        "pageToken": {
          "default": "",
          "description": "A page token received from a previous ListTaskPushNotificationConfigRequest call.",
          "type": "string"
        },
        "parent": {
          "default": "",
          "description": "The parent task resource.\n Format: tasks/{task_id}",
          "type": "string"
        }
      },
      "title": "List Task Push Notification Config Request",
      "type": "object"
    },
    "List Task Push Notification Config Response": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Represents a successful response for the `tasks/pushNotificationConfig/list`\n method.",
      "patternProperties": {
        "^(next_page_token)$": {
          "default": "",
          "description": "A token, which can be sent as `page_token` to retrieve the next page.\n If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "properties": {
        "configs": {
          "description": "The list of push notification configurations.",
          "items": {
            "$ref": "a2a.v1.TaskPushNotificationConfig.jsonschema.json"
          },
          "type": "array"
        },
        "nextPageToken": {
          "default": "",
          "description": "A token, which can be sent as `page_token` to retrieve the next page.\n If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "title": "List Task Push Notification Config Response",
      "type": "object"
    },
    "List Tasks Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Parameters for listing tasks with optional filtering criteria.",
      "patternProperties": {
        "^(context_id)$": {
          "default": "",
          "description": "Filter tasks by context ID to get tasks from a specific conversation or session.",
          "type": "string"
        },
        "^(history_length)$": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "The maximum number of messages to include in each task's history."
        },
        "^(include_artifacts)$": {
          "description": "Whether to include artifacts in the returned tasks.\n Defaults to false to reduce payload size.",
          "type": "boolean"
        },
        "^(last_updated_after)$": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "Filter tasks updated after this timestamp (milliseconds since epoch).\n Only tasks with a last updated time greater than or equal to this value will be returned."
        },
        "^(page_size)$": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "Maximum number of tasks to return. Must be between 1 and 100.\n Defaults to 50 if not specified."
        },
        "^(page_token)$": {
          "default": "",
          "description": "Token for pagination. Use the next_page_token from a previous ListTasksResponse.",
          "type": "string"
        }
      },
      "properties": {
        "contextId": {
          "default": "",
          "description": "Filter tasks by context ID to get tasks from a specific conversation or session.",
          "type": "string"
        },
        "historyLength": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "The maximum number of messages to include in each task's history."
        },
        "includeArtifacts": {
          "description": "Whether to include artifacts in the returned tasks.\n Defaults to false to reduce payload size.",
          "type": "boolean"
        },
        "lastUpdatedAfter": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "Filter tasks updated after this timestamp (milliseconds since epoch).\n Only tasks with a last updated time greater than or equal to this value will be returned."
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Request-specific metadata."
        },
        "pageSize": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "Maximum number of tasks to return. Must be between 1 and 100.\n Defaults to 50 if not specified."
        },
        "pageToken": {
          "default": "",
          "description": "Token for pagination. Use the next_page_token from a previous ListTasksResponse.",
          "type": "string"
        },
        "status": {
          "anyOf": [
            {
              "pattern": "^TASK_STATE_UNSPECIFIED$",
              "type": "string"
            },
            {
              "enum": [
                "TASK_STATE_SUBMITTED",
                "TASK_STATE_WORKING",
                "TASK_STATE_COMPLETED",
                "TASK_STATE_FAILED",
                "TASK_STATE_CANCELLED",
                "TASK_STATE_INPUT_REQUIRED",
                "TASK_STATE_REJECTED",
                "TASK_STATE_AUTH_REQUIRED"
              ],
              "type": "string"
            },
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            }
          ],
          "default": 0,
          "description": "Filter tasks by their current status state.",
          "title": "Task State"
        }
      },
      "title": "List Tasks Request",
      "type": "object"
    },
    "List Tasks Response": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Result object for tasks/list method containing an array of tasks and pagination information.",
      "patternProperties": {
        "^(next_page_token)$": {
          "default": "",
          "description": "Token for retrieving the next page. Empty string if no more results.",
          "type": "string"
        },
        "^(page_size)$": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "The size of page requested."
        },
        "^(total_size)$": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "Total number of tasks available (before pagination)."
        }
      },
      "properties": {
        "nextPageToken": {
          "default": "",
          "description": "Token for retrieving the next page. Empty string if no more results.",
          "type": "string"
        },
        "pageSize": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "The size of page requested."
        },
        "tasks": {
          "description": "Array of tasks matching the specified criteria.",
          "items": {
            "$ref": "a2a.v1.Task.jsonschema.json"
          },
          "type": "array"
        },
        "totalSize": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "default": 0,
          "description": "Total number of tasks available (before pagination)."
        }
      },
      "title": "List Tasks Response",
      "type": "object"
    },
    "Message": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Message is one unit of communication between client and server. It is\n associated with a context and optionally a task. Since the server is\n responsible for the context definition, it must always provide a context_id\n in its messages. The client can optionally provide the context_id if it\n knows the context to associate the message to. Similarly for task_id,\n except the server decides if a task is created and whether to include the\n task_id.",
      "patternProperties": {
        "^(context_id)$": {
          "default": "",
          "description": "The context id of the message. This is optional and if set, the message\n will be associated with the given context.",
          "type": "string"
        },
        "^(message_id)$": {
          "default": "",
          "description": "The unique identifier (e.g. UUID) of the message. This is required and\n created by the message creator.",
          "type": "string"
        },
        "^(reference_task_ids)$": {
          "description": "A list of task IDs that this message references for additional context.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "^(task_id)$": {
          "default": "",
          "description": "The task id of the message. This is optional and if set, the message\n will be associated with the given task.",
          "type": "string"
        }
      },
      "properties": {
        "contextId": {
          "default": "",
          "description": "The context id of the message. This is optional and if set, the message\n will be associated with the given context.",
          "type": "string"
        },
        "extensions": {
          "description": "The URIs of extensions that are present or contributed to this Message.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "messageId": {
          "default": "",
          "description": "The unique identifier (e.g. UUID) of the message. This is required and\n created by the message creator.",
          "type": "string"
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Any optional metadata to provide along with the message."
        },
        "parts": {
          "description": "Parts is the container of the message content.",
          "items": {
            "$ref": "a2a.v1.Part.jsonschema.json"
          },
          "type": "array"
        },
        "referenceTaskIds": {
          "description": "A list of task IDs that this message references for additional context.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "role": {
          "anyOf": [
            {
              "pattern": "^ROLE_UNSPECIFIED$",
              "type": "string"
            },
            {
              "enum": [
                "ROLE_USER",
                "ROLE_AGENT"
              ],
              "type": "string"
            },
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            }
          ],
          "default": 0,
          "description": "Identifies the sender of the message.",
          "title": "Role"
        },
        "taskId": {
          "default": "",
          "description": "The task id of the message. This is optional and if set, the message\n will be associated with the given task.",
          "type": "string"
        }
      },
      "title": "Message",
      "type": "object"
    },
    "Mutual Tls Security Scheme": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines a security scheme using mTLS authentication.",
      "properties": {
        "description": {
          "default": "",
          "description": "An optional description for the security scheme.",
          "type": "string"
        }
      },
      "title": "Mutual Tls Security Scheme",
      "type": "object"
    },
    "O Auth2 Security Scheme": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines a security scheme using OAuth 2.0.",
      "patternProperties": {
        "^(oauth2_metadata_url)$": {
          "default": "",
          "description": "URL to the oauth2 authorization server metadata\n RFC8414 (https://datatracker.ietf.org/doc/html/rfc8414). TLS is required.",
          "type": "string"
        }
      },
      "properties": {
        "description": {
          "default": "",
          "description": "An optional description for the security scheme.",
          "type": "string"
        },
        "flows": {
          "$ref": "a2a.v1.OAuthFlows.jsonschema.json",
          "description": "An object containing configuration information for the supported OAuth 2.0 flows."
        },
        "oauth2MetadataUrl": {
          "default": "",
          "description": "URL to the oauth2 authorization server metadata\n RFC8414 (https://datatracker.ietf.org/doc/html/rfc8414). TLS is required.",
          "type": "string"
        }
      },
      "title": "O Auth2 Security Scheme",
      "type": "object"
    },
    "O Auth Flows": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines the configuration for the supported OAuth 2.0 flows.",
      "patternProperties": {
        "^(authorization_code)$": {
          "$ref": "a2a.v1.AuthorizationCodeOAuthFlow.jsonschema.json",
          "description": "Configuration for the OAuth Authorization Code flow."
        },
        "^(client_credentials)$": {
          "$ref": "a2a.v1.ClientCredentialsOAuthFlow.jsonschema.json",
          "description": "Configuration for the OAuth Client Credentials flow."
        }
      },
      "properties": {
        "authorizationCode": {
          "$ref": "a2a.v1.AuthorizationCodeOAuthFlow.jsonschema.json",
          "description": "Configuration for the OAuth Authorization Code flow."
        },
        "clientCredentials": {
          "$ref": "a2a.v1.ClientCredentialsOAuthFlow.jsonschema.json",
          "description": "Configuration for the OAuth Client Credentials flow."
        },
        "implicit": {
          "$ref": "a2a.v1.ImplicitOAuthFlow.jsonschema.json",
          "description": "Configuration for the OAuth Implicit flow."
        },
        "password": {
          "$ref": "a2a.v1.PasswordOAuthFlow.jsonschema.json",
          "description": "Configuration for the OAuth Resource Owner Password flow."
        }
      },
      "title": "O Auth Flows",
      "type": "object"
    },
    "Open Id Connect Security Scheme": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines a security scheme using OpenID Connect.",
      "patternProperties": {
        "^(open_id_connect_url)$": {
          "default": "",
          "description": "The OpenID Connect Discovery URL for the OIDC provider's metadata.\n See: https://openid.net/specs/openid-connect-discovery-1_0.html",
          "type": "string"
        }
      },
      "properties": {
        "description": {
          "default": "",
          "description": "An optional description for the security scheme.",
          "type": "string"
        },
        "openIdConnectUrl": {
          "default": "",
          "description": "The OpenID Connect Discovery URL for the OIDC provider's metadata.\n See: https://openid.net/specs/openid-connect-discovery-1_0.html",
          "type": "string"
        }
      },
      "title": "Open Id Connect Security Scheme",
      "type": "object"
    },
    "Part": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Part represents a container for a section of communication content.\n Parts can be purely textual, some sort of file (image, video, etc) or\n a structured data blob (i.e. JSON).",
      "properties": {
        "data": {
          "$ref": "a2a.v1.DataPart.jsonschema.json",
          "description": "The structured data content."
        },
        "file": {
          "$ref": "a2a.v1.FilePart.jsonschema.json",
          "description": "The file content, represented as either a URI or as base64-encoded bytes."
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Optional metadata associated with this part."
        },
        "text": {
          "description": "The string content of the text part.",
          "type": "string"
        }
      },
      "title": "Part",
      "type": "object"
    },
    "PasswordO Auth Flow": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines configuration details for the OAuth 2.0 Resource Owner Password flow.",
      "patternProperties": {
        "^(refresh_url)$": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        },
        "^(token_url)$": {
          "default": "",
          "description": "The token URL to be used for this flow.",
          "type": "string"
        }
      },
      "properties": {
        "refreshUrl": {
          "default": "",
          "description": "The URL to be used for obtaining refresh tokens.",
          "type": "string"
        },
        "scopes": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The available scopes for the OAuth2 security scheme.",
          "propertyNames": {
            "type": "string"
          },
          "type": "object"
        },
        "tokenUrl": {
          "default": "",
          "description": "The token URL to be used for this flow.",
          "type": "string"
        }
      },
      "title": "PasswordO Auth Flow",
      "type": "object"
    },
    "Push Notification Config": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Configuration for setting up push notifications for task updates.",
      "properties": {
        "authentication": {
          "$ref": "a2a.v1.AuthenticationInfo.jsonschema.json",
          "description": "Information about the authentication to sent with the notification"
        },
        "id": {
          "default": "",
          "description": "A unique identifier (e.g. UUID) for this push notification.",
          "type": "string"
        },
        "token": {
          "default": "",
          "description": "Token unique for this task/session",
          "type": "string"
        },
        "url": {
          "default": "",
          "description": "Url to send the notification too",
          "type": "string"
        }
      },
      "title": "Push Notification Config",
      "type": "object"
    },
    "Security": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "properties": {
        "schemes": {
          "additionalProperties": {
            "$ref": "a2a.v1.StringList.jsonschema.json"
          },
          "propertyNames": {
            "type": "string"
          },
          "type": "object"
        }
      },
      "title": "Security",
      "type": "object"
    },
    "Security Scheme": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Defines a security scheme that can be used to secure an agent's endpoints.\n This is a discriminated union type based on the OpenAPI 3.2 Security Scheme Object.\n See: https://spec.openapis.org/oas/v3.2.0.html#security-scheme-object",
      "patternProperties": {
        "^(api_key_security_scheme)$": {
          "$ref": "a2a.v1.APIKeySecurityScheme.jsonschema.json"
        },
        "^(http_auth_security_scheme)$": {
          "$ref": "a2a.v1.HTTPAuthSecurityScheme.jsonschema.json"
        },
        "^(mtls_security_scheme)$": {
          "$ref": "a2a.v1.MutualTlsSecurityScheme.jsonschema.json"
        },
        "^(oauth2_security_scheme)$": {
          "$ref": "a2a.v1.OAuth2SecurityScheme.jsonschema.json"
        },
        "^(open_id_connect_security_scheme)$": {
          "$ref": "a2a.v1.OpenIdConnectSecurityScheme.jsonschema.json"
        }
      },
      "properties": {
        "apiKeySecurityScheme": {
          "$ref": "a2a.v1.APIKeySecurityScheme.jsonschema.json"
        },
        "httpAuthSecurityScheme": {
          "$ref": "a2a.v1.HTTPAuthSecurityScheme.jsonschema.json"
        },
        "mtlsSecurityScheme": {
          "$ref": "a2a.v1.MutualTlsSecurityScheme.jsonschema.json"
        },
        "oauth2SecurityScheme": {
          "$ref": "a2a.v1.OAuth2SecurityScheme.jsonschema.json"
        },
        "openIdConnectSecurityScheme": {
          "$ref": "a2a.v1.OpenIdConnectSecurityScheme.jsonschema.json"
        }
      },
      "title": "Security Scheme",
      "type": "object"
    },
    "Send Message Configuration": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Configuration of a send message request.",
      "patternProperties": {
        "^(accepted_output_modes)$": {
          "description": "The output modes that the agent is expected to respond with.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "^(history_length)$": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "The maximum number of messages to include in the history."
        },
        "^(push_notification_config)$": {
          "$ref": "a2a.v1.PushNotificationConfig.jsonschema.json",
          "description": "A configuration of a webhook that can be used to receive updates"
        }
      },
      "properties": {
        "acceptedOutputModes": {
          "description": "The output modes that the agent is expected to respond with.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "blocking": {
          "default": false,
          "description": "If true, the message will be blocking until the task is completed.",
          "type": "boolean"
        },
        "historyLength": {
          "anyOf": [
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            },
            {
              "pattern": "^-?[0-9]+$",
              "type": "string"
            }
          ],
          "description": "The maximum number of messages to include in the history."
        },
        "pushNotificationConfig": {
          "$ref": "a2a.v1.PushNotificationConfig.jsonschema.json",
          "description": "A configuration of a webhook that can be used to receive updates"
        }
      },
      "title": "Send Message Configuration",
      "type": "object"
    },
    "Send Message Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "/////////// Request Messages ///////////\n Represents a request for the `message/send` method.",
      "patternProperties": {
        "^(request)$": {
          "$ref": "a2a.v1.Message.jsonschema.json",
          "description": "The message to send to the agent."
        }
      },
      "properties": {
        "configuration": {
          "$ref": "a2a.v1.SendMessageConfiguration.jsonschema.json",
          "description": "Configuration for the send request."
        },
        "message": {
          "$ref": "a2a.v1.Message.jsonschema.json",
          "description": "The message to send to the agent."
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Optional metadata for the request."
        }
      },
      "title": "Send Message Request",
      "type": "object"
    },
    "Send Message Response": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "////// Response Messages ///////////",
      "patternProperties": {
        "^(msg)$": {
          "$ref": "a2a.v1.Message.jsonschema.json"
        }
      },
      "properties": {
        "message": {
          "$ref": "a2a.v1.Message.jsonschema.json"
        },
        "task": {
          "$ref": "a2a.v1.Task.jsonschema.json"
        }
      },
      "title": "Send Message Response",
      "type": "object"
    },
    "Set Task Push Notification Config Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Represents a request for the `tasks/pushNotificationConfig/set` method.",
      "patternProperties": {
        "^(config_id)$": {
          "default": "",
          "description": "The ID for the new config.",
          "type": "string"
        }
      },
      "properties": {
        "config": {
          "$ref": "a2a.v1.TaskPushNotificationConfig.jsonschema.json",
          "description": "The configuration to create."
        },
        "configId": {
          "default": "",
          "description": "The ID for the new config.",
          "type": "string"
        },
        "parent": {
          "default": "",
          "description": "The parent task resource for this config.\n Format: tasks/{task_id}",
          "type": "string"
        }
      },
      "title": "Set Task Push Notification Config Request",
      "type": "object"
    },
    "Stream Response": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Response message containing task updates or messages.",
      "patternProperties": {
        "^(artifact_update)$": {
          "$ref": "a2a.v1.TaskArtifactUpdateEvent.jsonschema.json"
        },
        "^(msg)$": {
          "$ref": "a2a.v1.Message.jsonschema.json"
        },
        "^(status_update)$": {
          "$ref": "a2a.v1.TaskStatusUpdateEvent.jsonschema.json"
        }
      },
      "properties": {
        "artifactUpdate": {
          "$ref": "a2a.v1.TaskArtifactUpdateEvent.jsonschema.json"
        },
        "message": {
          "$ref": "a2a.v1.Message.jsonschema.json"
        },
        "statusUpdate": {
          "$ref": "a2a.v1.TaskStatusUpdateEvent.jsonschema.json"
        },
        "task": {
          "$ref": "a2a.v1.Task.jsonschema.json"
        }
      },
      "title": "Stream Response",
      "type": "object"
    },
    "String List": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "properties": {
        "list": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "String List",
      "type": "object"
    },
    "Subscribe To Task Request": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "properties": {
        "name": {
          "default": "",
          "description": "The resource name of the task to subscribe to.\n Format: tasks/{task_id}",
          "type": "string"
        }
      },
      "title": "Subscribe To Task Request",
      "type": "object"
    },
    "Task": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "Task is the core unit of action for A2A. It has a current status\n and when results are created for the task they are stored in the\n artifact. If there are multiple turns for a task, these are stored in\n history.",
      "patternProperties": {
        "^(context_id)$": {
          "default": "",
          "description": "Unique identifier (e.g. UUID) for the contextual collection of interactions\n (tasks and messages). Created by the A2A server.",
          "type": "string"
        }
      },
      "properties": {
        "artifacts": {
          "description": "A set of output artifacts for a Task.",
          "items": {
            "$ref": "a2a.v1.Artifact.jsonschema.json"
          },
          "type": "array"
        },
        "contextId": {
          "default": "",
          "description": "Unique identifier (e.g. UUID) for the contextual collection of interactions\n (tasks and messages). Created by the A2A server.",
          "type": "string"
        },
        "history": {
          "description": "The history of interactions from a task.",
          "items": {
            "$ref": "a2a.v1.Message.jsonschema.json"
          },
          "type": "array"
        },
        "id": {
          "default": "",
          "description": "Unique identifier (e.g. UUID) for the task, generated by the server for a\n new task.",
          "type": "string"
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "A key/value object to store custom metadata about a task.\n Optional metadata for extensions. The key is an extension-specific\n identifier."
        },
        "status": {
          "$ref": "a2a.v1.TaskStatus.jsonschema.json",
          "description": "The current status of a Task, including state and a message."
        }
      },
      "title": "Task",
      "type": "object"
    },
    "Task Artifact Update Event": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "TaskArtifactUpdateEvent represents a task delta where an artifact has\n been generated.",
      "patternProperties": {
        "^(context_id)$": {
          "default": "",
          "description": "The id of the context that this task belongs to.",
          "type": "string"
        },
        "^(last_chunk)$": {
          "default": false,
          "description": "If true, this is the final chunk of the artifact.",
          "type": "boolean"
        },
        "^(task_id)$": {
          "default": "",
          "description": "The id of the task for this artifact.",
          "type": "string"
        }
      },
      "properties": {
        "append": {
          "default": false,
          "description": "If true, the content of this artifact should be appended to a previously\n sent artifact with the same ID.",
          "type": "boolean"
        },
        "artifact": {
          "$ref": "a2a.v1.Artifact.jsonschema.json",
          "description": "The artifact that was generated or updated."
        },
        "contextId": {
          "default": "",
          "description": "The id of the context that this task belongs to.",
          "type": "string"
        },
        "lastChunk": {
          "default": false,
          "description": "If true, this is the final chunk of the artifact.",
          "type": "boolean"
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Optional metadata associated with the artifact update."
        },
        "taskId": {
          "default": "",
          "description": "The id of the task for this artifact.",
          "type": "string"
        }
      },
      "title": "Task Artifact Update Event",
      "type": "object"
    },
    "Task Push Notification Config": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "A container associating a push notification configuration with a specific\n task.",
      "patternProperties": {
        "^(push_notification_config)$": {
          "$ref": "a2a.v1.PushNotificationConfig.jsonschema.json",
          "description": "The push notification configuration details."
        }
      },
      "properties": {
        "name": {
          "default": "",
          "description": "The resource name of the config.\n Format: tasks/{task_id}/pushNotificationConfigs/{config_id}",
          "type": "string"
        },
        "pushNotificationConfig": {
          "$ref": "a2a.v1.PushNotificationConfig.jsonschema.json",
          "description": "The push notification configuration details."
        }
      },
      "title": "Task Push Notification Config",
      "type": "object"
    },
    "Task Status": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "A container for the status of a task",
      "properties": {
        "message": {
          "$ref": "a2a.v1.Message.jsonschema.json",
          "description": "A message associated with the status."
        },
        "state": {
          "anyOf": [
            {
              "pattern": "^TASK_STATE_UNSPECIFIED$",
              "type": "string"
            },
            {
              "enum": [
                "TASK_STATE_SUBMITTED",
                "TASK_STATE_WORKING",
                "TASK_STATE_COMPLETED",
                "TASK_STATE_FAILED",
                "TASK_STATE_CANCELLED",
                "TASK_STATE_INPUT_REQUIRED",
                "TASK_STATE_REJECTED",
                "TASK_STATE_AUTH_REQUIRED"
              ],
              "type": "string"
            },
            {
              "maximum": 2147483647,
              "minimum": -2147483648,
              "type": "integer"
            }
          ],
          "default": 0,
          "description": "The current state of this task.",
          "title": "Task State"
        },
        "timestamp": {
          "$ref": "google.protobuf.Timestamp.jsonschema.json",
          "description": "ISO 8601 Timestamp when the status was recorded.\n Example: \"2023-10-27T10:00:00Z\""
        }
      },
      "title": "Task Status",
      "type": "object"
    },
    "Task Status Update Event": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "description": "An event sent by the agent to notify the client of a change in a task's\n status.",
      "patternProperties": {
        "^(context_id)$": {
          "default": "",
          "description": "The id of the context that the task belongs to",
          "type": "string"
        },
        "^(task_id)$": {
          "default": "",
          "description": "The id of the task that is changed",
          "type": "string"
        }
      },
      "properties": {
        "contextId": {
          "default": "",
          "description": "The id of the context that the task belongs to",
          "type": "string"
        },
        "final": {
          "default": false,
          "description": "If true, this is the final event in the stream for this interaction.",
          "type": "boolean"
        },
        "metadata": {
          "$ref": "google.protobuf.Struct.jsonschema.json",
          "description": "Optional metadata to associate with the task update."
        },
        "status": {
          "$ref": "a2a.v1.TaskStatus.jsonschema.json",
          "description": "The new status of the task."
        },
        "taskId": {
          "default": "",
          "description": "The id of the task that is changed",
          "type": "string"
        }
      },
      "title": "Task Status Update Event",
      "type": "object"
    },
    "Struct": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "title": "Struct",
      "type": "object"
    },
    "Timestamp": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "format": "date-time",
      "title": "Timestamp",
      "type": "string"
    }
  }
}