Agent Card Reader / Migrating from 0.3 to 1.0
Migrating an agent card from A2A 0.3 to 1.0
A2A 1.0 moves interfaces into supportedInterfaces, wraps each security scheme in a named object instead of an OpenAPI type field, and renames security to securityRequirements. Compared from the 0.3.0 and 1.0 specifications.
Field by field
| 0.3 | 1.0 | Notes |
|---|---|---|
protocolVersion (top level) | supportedInterfaces[].protocolVersion | One version per interface. |
url + preferredTransport | supportedInterfaces[0] with url, protocolBinding, protocolVersion | The first entry is the preferred interface. 0.3 defaulted an empty transport to JSONRPC. |
additionalInterfaces[] with url, transport | Further supportedInterfaces entries | transport becomes protocolBinding. |
| — | supportedInterfaces[].tenant | New, optional: routes requests when several agents share an endpoint. |
{"type": "apiKey", "in", "name"} | {"apiKeySecurityScheme": {"location", "name"}} | in becomes location. |
{"type": "http", "scheme", "bearerFormat"} | {"httpAuthSecurityScheme": {"scheme", "bearerFormat"}} | |
{"type": "oauth2", "flows", "oauth2MetadataUrl"} | {"oauth2SecurityScheme": {"flows", "oauth2MetadataUrl"}} | 1.0 adds the deviceCode flow and pkceRequired; implicit and password are deprecated; flows holds exactly one flow. |
{"type": "openIdConnect", "openIdConnectUrl"} | {"openIdConnectSecurityScheme": {"openIdConnectUrl"}} | |
{"type": "mutualTLS"} | {"mtlsSecurityScheme": {}} | |
security: [{"name": ["scope"]}] | securityRequirements: [{"schemes": {"name": {"list": ["scope"]}}}] | Same meaning: a list of alternatives, each a set of schemes. |
skills[].security | skills[].securityRequirements | Same new shape. |
supportsAuthenticatedExtendedCard | capabilities.extendedAgentCard | |
capabilities.stateTransitionHistory | — | Not in the 1.0 AgentCapabilities table. |
Before and after
The route-planner sample that both specifications use, trimmed to the parts that change.
0.3
{
"protocolVersion": "0.3.0",
"name": "GeoSpatial Route Planner Agent",
"url": "https://georoute-agent.example.com/a2a/v1",
"preferredTransport": "JSONRPC",
"additionalInterfaces": [
{
"url": "https://georoute-agent.example.com/a2a/grpc",
"transport": "GRPC"
}
],
"securitySchemes": {
"google": {
"type": "openIdConnect",
"openIdConnectUrl": "https://accounts.google.com/.well-known/openid-configuration"
}
},
"security": [
{
"google": [
"openid",
"profile",
"email"
]
}
]
}1.0
{
"name": "GeoSpatial Route Planner Agent",
"supportedInterfaces": [
{
"url": "https://georoute-agent.example.com/a2a/v1",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
},
{
"url": "https://georoute-agent.example.com/a2a/grpc",
"protocolBinding": "GRPC",
"protocolVersion": "1.0"
}
],
"securitySchemes": {
"google": {
"openIdConnectSecurityScheme": {
"openIdConnectUrl": "https://accounts.google.com/.well-known/openid-configuration"
}
}
},
"securityRequirements": [
{
"schemes": {
"google": {
"list": [
"openid",
"profile",
"email"
]
}
}
}
]
}Check your card
Paste the old or the new card into the reader: it reads both, explains each 0.3 field it finds, and validates the 1.0 shape against the spec.
Based on the A2A specification (latest, 1.0). Updated 2026-10-14. Check a card now: open the reader.