{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/google-cloud-platform/json-schema/google-cloud-platform-agent-card-schema.json",
  "title": "AgentCard",
  "description": "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: 19",
  "x-generated": "2026-11-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/google-cloud-platform-cloudbilling-v1-api-openapi.yml#/components/schemas/AgentCard",
  "type": "object",
  "properties": {
    "defaultInputModes": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "description": "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 mime types."
    },
    "signatures": {
      "items": {
        "$ref": "#/$defs/AgentCardSignature"
      },
      "type": "array",
      "description": "JSON Web Signatures computed for this AgentCard."
    },
    "iconUrl": {
      "description": "An optional URL to an icon for the agent.",
      "type": "string"
    },
    "documentationUrl": {
      "type": "string",
      "description": "A url to provide additional documentation about the agent."
    },
    "securitySchemes": {
      "type": "object",
      "description": "The security scheme details used for authenticating with this agent.",
      "additionalProperties": {
        "$ref": "#/$defs/SecurityScheme"
      }
    },
    "capabilities": {
      "$ref": "#/$defs/AgentCapabilities",
      "description": "A2A Capability set supported by the agent."
    },
    "name": {
      "description": "A human readable name for the agent. Example: \"Recipe Agent\"",
      "type": "string"
    },
    "preferredTransport": {
      "description": "The transport of the preferred endpoint. If empty, defaults to JSONRPC.",
      "type": "string"
    },
    "version": {
      "type": "string",
      "description": "The version of the agent. Example: \"1.0.0\""
    },
    "supportsAuthenticatedExtendedCard": {
      "description": "Whether the agent supports providing an extended agent card when the user is authenticated, i.e. is the card from .well-known different than the card from GetAgentCard.",
      "type": "boolean"
    },
    "provider": {
      "$ref": "#/$defs/AgentProvider",
      "description": "The service provider of the agent."
    },
    "protocolVersion": {
      "description": "The version of the A2A protocol this agent supports.",
      "type": "string"
    },
    "security": {
      "items": {
        "$ref": "#/$defs/Security"
      },
      "type": "array",
      "description": "protolint:disable REPEATED_FIELD_NAMES_PLURALIZED Security requirements for contacting the agent. This list can be seen as an OR of ANDs. Each object in the list describes one possible set of security requirements that must be present on a request. This allows specifying, for example, \"callers must either use OAuth OR an API Key AND mTLS.\" Example: security { schemes { key: \"oauth\" value { list: [\"read\"] } } } security { schemes { key: \"api-key\" } schemes { key: \"mtls\" } }"
    },
    "url": {
      "type": "string",
      "description": "A URL to the address the agent is hosted at. This represents the preferred endpoint as declared by the agent."
    },
    "description": {
      "description": "A description of the agent's domain of action/solution space. Example: \"Agent that helps users with recipes and cooking.\"",
      "type": "string"
    },
    "skills": {
      "description": "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.",
      "items": {
        "$ref": "#/$defs/AgentSkill"
      },
      "type": "array"
    },
    "defaultOutputModes": {
      "description": "The mime types supported as outputs from this agent.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "additionalInterfaces": {
      "description": "Announcement of additional supported transports. Client can use any of the supported transports.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/AgentInterface"
      }
    }
  },
  "$defs": {
    "APIKeySecurityScheme": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string",
          "description": "Description of this security scheme."
        },
        "name": {
          "type": "string",
          "description": "Name of the header, query or cookie parameter to be used."
        },
        "location": {
          "type": "string",
          "description": "Location of the API key, valid values are \"query\", \"header\", or \"cookie\""
        }
      }
    },
    "AgentCapabilities": {
      "type": "object",
      "properties": {
        "pushNotifications": {
          "description": "If the agent can send push notifications to the clients webhook",
          "type": "boolean"
        },
        "extensions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AgentExtension"
          },
          "description": "Extensions supported by this agent."
        },
        "streaming": {
          "description": "If the agent will support streaming responses",
          "type": "boolean"
        }
      },
      "description": "Defines the A2A feature set supported by the agent"
    },
    "AgentCardSignature": {
      "description": "AgentCardSignature represents a JWS signature of an AgentCard. This follows the JSON format of an RFC 7515 JSON Web Signature (JWS).",
      "properties": {
        "header": {
          "type": "object",
          "description": "The unprotected JWS header values.",
          "additionalProperties": {
            "description": "Properties of the object."
          }
        },
        "protected": {
          "type": "string",
          "description": "Required. The protected JWS header for the signature. This is always a base64url-encoded JSON object. Required."
        },
        "signature": {
          "type": "string",
          "description": "Required. The computed signature, base64url-encoded. Required."
        }
      },
      "type": "object"
    },
    "AgentExtension": {
      "type": "object",
      "description": "A declaration of an extension supported by an Agent.",
      "properties": {
        "description": {
          "description": "A description of how this agent uses this extension. Example: \"Google OAuth 2.0 authentication\"",
          "type": "string"
        },
        "required": {
          "type": "boolean",
          "description": "Whether the client must follow specific requirements of the extension. Example: false"
        },
        "params": {
          "description": "Optional configuration for the extension.",
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object."
          }
        },
        "uri": {
          "description": "The URI of the extension. Example: \"https://developers.google.com/identity/protocols/oauth2\"",
          "type": "string"
        }
      }
    },
    "AgentInterface": {
      "properties": {
        "url": {
          "type": "string",
          "description": "The url this interface is found at."
        },
        "transport": {
          "description": "The transport supported this url. This is an open form string, to be easily extended for many transport protocols. The core ones officially supported are JSONRPC, GRPC and HTTP+JSON.",
          "type": "string"
        },
        "tenant": {
          "type": "string",
          "description": "Tenant to be set in the request when calling the agent. Experimental, might still change for 1.0 release."
        }
      },
      "description": "Defines additional transport information for the agent.",
      "type": "object"
    },
    "AgentProvider": {
      "type": "object",
      "description": "Represents information about the service provider of an agent.",
      "properties": {
        "organization": {
          "description": "The providers organization name Example: \"Google\"",
          "type": "string"
        },
        "url": {
          "type": "string",
          "description": "The providers reference url Example: \"https://ai.google.dev\""
        }
      }
    },
    "AgentSkill": {
      "properties": {
        "inputModes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Possible input modalities supported."
        },
        "name": {
          "description": "A human readable name for the skill.",
          "type": "string"
        },
        "id": {
          "type": "string",
          "description": "Unique identifier of the skill within this agent."
        },
        "outputModes": {
          "description": "Possible output modalities produced",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "description": "A set of tags for the skill to enhance categorization/utilization. Example: [\"cooking\", \"customer support\", \"billing\"]",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "description": {
          "type": "string",
          "description": "A human (or llm) readable description of the skill details and behaviors."
        },
        "security": {
          "items": {
            "$ref": "#/$defs/Security"
          },
          "description": "protolint:disable REPEATED_FIELD_NAMES_PLURALIZED Security schemes necessary for the agent to leverage this skill. As in the overall AgentCard.security, this list represents a logical OR of security requirement objects. Each object is a set of security schemes that must be used together (a logical AND). protolint:enable REPEATED_FIELD_NAMES_PLURALIZED",
          "type": "array"
        }
      },
      "description": "AgentSkill represents a unit of action/solution that the agent can perform. One can think of this as a type of highly reliable solution that an agent can be tasked to provide. Agents have the autonomy to choose how and when to use specific skills, but clients should have confidence that if the skill is defined that unit of action can be reliably performed.",
      "type": "object"
    },
    "AuthorizationCodeOAuthFlow": {
      "type": "object",
      "properties": {
        "tokenUrl": {
          "type": "string",
          "description": "The token URL to be used for this flow. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS."
        },
        "refreshUrl": {
          "description": "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.",
          "type": "string"
        },
        "scopes": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object",
          "description": "The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it. The map MAY be empty."
        },
        "authorizationUrl": {
          "type": "string",
          "description": "The authorization URL to be used for this flow. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS"
        }
      }
    },
    "ClientCredentialsOAuthFlow": {
      "type": "object",
      "properties": {
        "scopes": {
          "type": "object",
          "description": "The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it. The map MAY be empty.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "tokenUrl": {
          "type": "string",
          "description": "The token URL to be used for this flow. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS."
        },
        "refreshUrl": {
          "type": "string",
          "description": "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS."
        }
      }
    },
    "HTTPAuthSecurityScheme": {
      "type": "object",
      "properties": {
        "description": {
          "description": "Description of this security scheme.",
          "type": "string"
        },
        "bearerFormat": {
          "description": "A hint to the client to identify how the bearer token is formatted. Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes.",
          "type": "string"
        },
        "scheme": {
          "description": "The name of the HTTP Authentication scheme to be used in the Authorization header as defined in RFC7235. The values used SHOULD be registered in the IANA Authentication Scheme registry. The value is case-insensitive, as defined in RFC7235.",
          "type": "string"
        }
      }
    },
    "ImplicitOAuthFlow": {
      "properties": {
        "scopes": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it. The map MAY be empty.",
          "type": "object"
        },
        "authorizationUrl": {
          "description": "The authorization URL to be used for this flow. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS",
          "type": "string"
        },
        "refreshUrl": {
          "type": "string",
          "description": "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS."
        }
      },
      "type": "object"
    },
    "MutualTlsSecurityScheme": {
      "properties": {
        "description": {
          "description": "Description of this security scheme.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OAuth2SecurityScheme": {
      "type": "object",
      "properties": {
        "description": {
          "description": "Description of this security scheme.",
          "type": "string"
        },
        "oauth2MetadataUrl": {
          "description": "URL to the oauth2 authorization server metadata [RFC8414](https://datatracker.ietf.org/doc/html/rfc8414). TLS is required.",
          "type": "string"
        },
        "flows": {
          "$ref": "#/$defs/OAuthFlows",
          "description": "An object containing configuration information for the flow types supported"
        }
      }
    },
    "OAuthFlows": {
      "properties": {
        "password": {
          "$ref": "#/$defs/PasswordOAuthFlow"
        },
        "authorizationCode": {
          "$ref": "#/$defs/AuthorizationCodeOAuthFlow"
        },
        "clientCredentials": {
          "$ref": "#/$defs/ClientCredentialsOAuthFlow"
        },
        "implicit": {
          "$ref": "#/$defs/ImplicitOAuthFlow"
        }
      },
      "type": "object"
    },
    "OpenIdConnectSecurityScheme": {
      "type": "object",
      "properties": {
        "description": {
          "description": "Description of this security scheme.",
          "type": "string"
        },
        "openIdConnectUrl": {
          "description": "Well-known URL to discover the [[OpenID-Connect-Discovery]] provider metadata.",
          "type": "string"
        }
      }
    },
    "PasswordOAuthFlow": {
      "type": "object",
      "properties": {
        "scopes": {
          "type": "object",
          "description": "The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it. The map MAY be empty.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "tokenUrl": {
          "description": "The token URL to be used for this flow. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.",
          "type": "string"
        },
        "refreshUrl": {
          "description": "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.",
          "type": "string"
        }
      }
    },
    "Security": {
      "properties": {
        "schemes": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/StringList"
          }
        }
      },
      "type": "object"
    },
    "SecurityScheme": {
      "properties": {
        "apiKeySecurityScheme": {
          "$ref": "#/$defs/APIKeySecurityScheme"
        },
        "mtlsSecurityScheme": {
          "$ref": "#/$defs/MutualTlsSecurityScheme"
        },
        "openIdConnectSecurityScheme": {
          "$ref": "#/$defs/OpenIdConnectSecurityScheme"
        },
        "oauth2SecurityScheme": {
          "$ref": "#/$defs/OAuth2SecurityScheme"
        },
        "httpAuthSecurityScheme": {
          "$ref": "#/$defs/HTTPAuthSecurityScheme"
        }
      },
      "type": "object"
    },
    "StringList": {
      "type": "object",
      "description": "protolint:disable REPEATED_FIELD_NAMES_PLURALIZED",
      "properties": {
        "list": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  }
}