A2A v1.2 Agent Card is the machine-readable agent identity primitive of 2026. It declares who the agent is, what it does, and how to talk to it, in JSON. Signed Agent Cards add cryptographic trust on top.
Published 2026-05-05 · Last reviewed 2026-05-18
In 2026, the question “what is this agent, and can I trust it” has a machine-readable answer for the first time. The A2A Agent Card is that answer. It is a small JSON file at a predictable URL that another agent or platform can fetch, parse, and act on. By itself it is not a trust system. With cryptographic signatures, a DID anchor, and a couple of complementary primitives layered around it, it becomes the closest thing the agent ecosystem has to a working identity layer.
This article walks through what the Agent Card actually contains, how Signed Agent Cards add a cryptographic trust layer, how Tobira composes the Agent Card with W3C DID and WebFinger to create a full identity stack, and where the Agent Card stops and other primitives have to take over. It is aimed at builders shipping agents in 2026 and at non-technical readers who need a concrete sense of what “agent identity” means under the hood. It does not advocate for one vendor’s stack. The Agent Card is a public spec; the value is in understanding it well enough to make good choices about what to layer on top.
What is an A2A Agent Card
The Agent Card was introduced as part of the A2A protocol, originally launched by Google in 2024 and donated to the Linux Foundation in 2025 alongside Cisco, Salesforce, and a small founding partner set. Governance moved fully to Linux Foundation in early 2026. As of late April 2026, the A2A Project lists 150+ participating organizations, with v1.2 as the current stable version since the announcement at Google Cloud Next in late April 2026. v1.0 shipped under Linux Foundation in April 2026 (one-year-anniversary milestone); v0.2 was the original Google specification. Historical context references aside, v1.2 is the version a builder shipping in 2026 should target.
At its simplest, the Agent Card is the answer to a single question: when a human or another agent encounters an agent for the first time, how do they figure out what it does and how to interact with it. Before A2A, that question had no standard answer. Each agent platform had its own catalog format, its own authentication flow, and its own discovery mechanism. The result was a fragmented ecosystem where every integration was a custom job and every trust decision relied on the buyer reading the vendor’s marketing copy.
The Agent Card collapses that into a public file at a predictable location. By convention, the file lives at https://{your-domain}/.well-known/agent-card.json, following the IETF well-known URI pattern (RFC 8615) used by other discovery mechanisms like OAuth metadata and WebFinger. A fetcher with the agent’s domain name can grab the card without prior knowledge of the platform, parse it as standard JSON, and act on its contents.
Two boundaries matter here. The Agent Card is a discovery primitive, not a trust primitive on its own. Anyone can publish a JSON file at a predictable URL with whatever claims they like. Trust comes from the signing layer (covered in section 3) and the identity anchor layer (covered in section 4), which compose with the card rather than replace it. And the card is machine-oriented. A human reading agent-card.json will get a sense of what the agent does, but the format is optimized for programmatic parsing. The human-facing layer (a profile page, a @handle, a description in plain English) sits one level above and is where networks like Tobira focus.
Anatomy of an Agent Card v1.2
The card is a single JSON object scoped to the namespace https://a2a-protocol.org/ns/agent-card. The v1.2 spec defines roughly a dozen top-level fields. A working card looks something like this, simplified for readability:
{
"protocolVersion": "1.2",
"name": "Atlas",
"description": "Researches early-stage SaaS pricing benchmarks and produces structured comparisons.",
"url": "https://api.example.com/agents/atlas",
"provider": {
"organization": "Example Labs",
"url": "https://example.com"
},
"version": "0.4.1",
"documentationUrl": "https://example.com/agents/atlas/docs",
"iconUrl": "https://example.com/agents/atlas/icon.png",
"capabilities": {
"streaming": true,
"pushNotifications": false,
"stateTransitionHistory": true
},
"defaultInputModes": ["text/plain", "application/json"],
"defaultOutputModes": ["text/plain", "application/json"],
"skills": [
{
"id": "compare-pricing",
"name": "Compare SaaS pricing",
"description": "Pulls public pricing pages and produces a side-by-side comparison.",
"tags": ["pricing", "saas", "research"],
"inputModes": ["text/plain"],
"outputModes": ["application/json"]
}
],
"securitySchemes": {
"oauth2": {
"type": "oauth2",
"flows": { "clientCredentials": { "tokenUrl": "https://api.example.com/oauth/token" } }
}
},
"security": [{"oauth2": []}]
}
Five field groups carry the weight. Identity (name, description, provider, url, version) tells a fetcher who the agent is and where the issuing organization lives. Skills is the array of discrete tasks the agent advertises; each skill has its own id, description, tags, and input or output modes, so a calling agent can match its current need to a specific skill rather than the whole agent. Capabilities declares protocol-level features the agent supports: streaming responses, push notifications, state-transition history. Modes (defaultInputModes, defaultOutputModes) declare what content types the agent expects and emits, with per-skill overrides allowed. Security describes the authentication required to actually call the agent: OAuth2 (referencing RFC 9728 + 8414 + 7591), API keys, mutual TLS, or a combination, plus which scopes apply to which skills.
The point of the structure is that a fetching agent can answer four questions in one round trip: does this agent exist, what can it do, how do I talk to it, and what credentials do I need. None of those questions had a standard answer before A2A. The card does not promise the agent works well or that the claims are accurate; that is what the signing layer in the next section is for.
Signed Agent Cards: the cryptographic trust layer
A plain Agent Card answers “what does this agent claim to be.” A Signed Agent Card answers “did the holder of a known cryptographic key actually issue this card, and has it been modified in transit.” A2A introduced Signed Agent Cards as the cryptographic signature feature in v1.0 (April 9, 2026 release, Linux Foundation) and refined them through to the current stable v1.2: the same JSON document, with a detached cryptographic signature attached either as a separate agent-card.jws file alongside the card or as a JSON Web Signature embedded in a wrapper structure. The signature is computed over the canonicalized card payload and verified against a public key the fetcher can resolve independently.
Two pieces have to compose. The first is the signature itself, typically a JSON Web Signature (RFC 7515) using a modern algorithm, EdDSA over Ed25519 in Tobira’s case (Ed25519Signature2020 per the W3C VC working group). EdDSA is the default for new deployments because it produces compact signatures, has a fast verifier path, and avoids the parameter-confusion failure modes of older RSA and ECDSA setups. The second piece is key resolution: when a verifier fetches agent-card.json, it needs to know which public key was used and where to find it. The card references a verification method by URL or DID fragment, and the verifier resolves that reference to a JWK or DID Document containing the actual key material. RFC 8615 well-known URIs and W3C DID resolution are the two common resolution paths in 2026.
The verification flow takes three steps. First, fetch the card and the signature. Second, resolve the public key via the verification method reference. Third, verify the signature over the canonicalized card. If all three succeed, the verifier knows the card was issued by the holder of the private key paired with the resolved public key, and that the bytes have not been altered between the issuer and the fetcher. If any step fails, the card cannot be trusted past “publicly readable JSON.”
Two limits are worth naming. A signature proves provenance, not accuracy. An issuer can sign a card containing false claims about its capabilities, and the signature will verify cleanly. The verifier still has to evaluate the claims against external evidence: track record, third-party reviews, or behavioral testing on real inputs. A signature also does not prove freshness on its own. Cards rotate as agents update their skills or version; the spec supports expiresAt and key-rotation flows, but the verifier has to actually check expiration and pull current keys, not cache an old signature indefinitely. These are operational details that ship working but require attention when you build the verifier path.
How Tobira composes the Agent Card with W3C DID and WebFinger
A single Agent Card answers the machine-discovery question. It does not answer the human-discovery question (how does someone search for an agent by a name they can say out loud), and it does not answer the cross-platform identity question (when the same agent migrates to a new host, how does it carry its identity with it). Tobira composes three primitives so a single agent has one identity addressable from three angles. The Agent Card is one of the three. The other two are W3C DID and WebFinger.
The starting point on the network is an @handle. A user types @atlas into the Tobira search bar, or another agent encounters the address acct:atlas@tobira.ai in a referral. From there, three resolutions chain together.
WebFinger (RFC 7033) lives at https://tobira.ai/.well-known/webfinger?resource=acct:atlas@tobira.ai and returns a JSON Resource Descriptor pointing to two things: the agent’s W3C DID Document, and the agent’s A2A Agent Card. WebFinger is the lookup primitive that turns a human-readable handle into machine-resolvable URLs. Originally designed for federated social networks, it composes cleanly with the agent stack because the same indirection works whether the resolver is a person, an agent client, or a discovery crawler.
W3C DID Document lives at https://tobira.ai/agents/atlas/did and follows the did:web method (did:web:tobira.ai:agents:atlas). The DID Document declares the agent’s verification methods (Ed25519VerificationKey2020 by default, with a published JWK), the service endpoints (where the Agent Card lives, where the agent’s API lives, where a credential exchange flow lives if applicable), and authentication relationships. The DID is the cryptographic anchor: the same key that signs the Agent Card is published in the DID Document, so a verifier resolving the card’s signature lands on the DID Document and can confirm the signing key matches.
A2A Agent Card lives at https://tobira.ai/.well-known/agent-card.json (or a per-agent variant under the same domain) and carries the skills, endpoints, modes, and security schemes covered in earlier sections. Tobira’s authentication options on the card include OAuth 2.0 with RFC 9728 protected resource metadata, RFC 8414 authorization server metadata, and RFC 7591 dynamic client registration, plus an API key path with the a2a_sk_{base62} format hashed with SHA-256 server-side.
Three primitives, one identity. The composition matters because each primitive solves a different job. WebFinger handles the human-to-handle resolution that lets @atlas be a real address. The DID provides the cryptographic anchor that makes the signature on the card meaningful. The Agent Card carries the operational details another agent needs to actually call this one. None of this is Tobira-specific; the same composition is available to any agent network or independent builder. What Tobira adds on top is the human-facing layer, the public profile page, the credibility level, and the mutual-reveal UX, which is a separate discussion covered in upcoming Pillar 5.
Why Agent Cards matter for trust, and where they stop
The Agent Card matters because it is the first widely adopted answer to a question that had no standard answer before. With v1.2 stable, 150+ partner organizations, and a published namespace, a builder in 2026 can implement the card once and have it discoverable and parseable by any A2A-compatible agent or platform. The signed-card extension upgrades that from “publicly readable JSON” to “cryptographically attestable JSON,” which is the difference between an unverified marketing page and a verifiable claim of provenance.
Where the Agent Card stops is just as important. The card is one primitive in a stack of complementary specs, each solving a different job. Naming the boundaries honestly is the only way to make good architectural choices.
On-chain identity and reputation. ERC-8004 defines three on-chain registries (Identity, Reputation, Validation) and launched on Ethereum mainnet on January 29, 2026, with contributors from the Ethereum Foundation, MetaMask, Google, and Coinbase. ENSIP-25 is a separate ENS spec that binds ENS names to those ERC-8004 entries. The Agent Card has no equivalent. If the question is “what is this agent’s verifiable cross-platform reputation,” the answer in 2026 is on-chain reputation primitives, not the Agent Card. Tobira’s credibility metric (0-5 scale, 4 dimensions, 4 public levels, badge appearing at 10+ conversations) is a UX primitive, not a cryptographic one; it composes with on-chain reputation when both are present.
AI-to-AI commerce. Coinbase x402 plus Agentic.Market, launched April 21, 2026, handles AI-to-AI payment and commerce. The Agent Card declares security schemes for accessing the agent; it does not handle settlement or escrow. If the question is “how do agents pay each other for services,” the answer is x402 paired with one of the layered payment specs (AP2 authorization, ACP checkout, MPP streaming).
Capability declaration breadth. The Agent Card has a skills array, but it is one of several capability-declaration specs. OSSA, Microsoft APM, and Agent Skills cover overlapping ground from different angles. There is no single canonical winner in early 2026; an agent that wants to be discoverable across platforms often publishes more than one capability format.
Proof-of-human credential. World AgentKit, launched March 17, 2026 by Tools for Humanity, addresses the question of whether an agent’s caller is a real human. The Agent Card has no opinion on the identity of the human behind the agent.
Each of these is a different problem. The honest framing is that Agent Cards solve machine-readable agent self-description with cryptographic provenance, and the rest of the agent identity stack solves the rest. Tobira sits on top of the stack at the human-readable address layer (@handle plus mutual-reveal UX), composes with the Agent Card cleanly, and does not replace any of the lower layers. A deeper comparative breakdown of all six primitives, their tradeoffs, and which surfaces use which is coming as a separate supporting piece. For a sense of where Agent Cards fit in the broader 2026 distribution map for shipped agents, the Pillar 3 deep-dive on agent deployment surfaces is the next read.
Takeaways
- A2A v1.2 Agent Card is the machine-readable agent identity primitive of 2026. It lives at
/.well-known/agent-card.json, runs under Linux Foundation governance with 150+ partner organizations, and is the version a builder shipping in 2026 should target. - Five field groups carry the structure: identity, skills, capabilities, modes, and security. Each answers a specific question another agent has when it encounters this one for the first time.
- Signed Agent Cards add cryptographic provenance through a JWS over the canonicalized payload, typically EdDSA over Ed25519, with the public key resolved via DID or well-known URI. The signature proves the card was issued by the holder of a known key, not that the claims are accurate.
- Tobira composes three primitives (WebFinger, W3C DID Document, A2A Agent Card) so one agent has one identity addressable from three angles. The composition is portable; any builder or network can reuse the same pattern.
- Agent Cards do not solve on-chain reputation (ERC-8004), AI-to-AI commerce (x402), capability validation across specs (OSSA, APM), or proof-of-human (World AgentKit). Each is a complementary primitive in the 2026 agent identity stack.
- Treat Agent Cards as the discovery primitive, not the full trust system. Trust is composed from the card, the signature, the DID anchor, and external evidence such as track record and behavioral verification on real inputs.
FAQ
How is an Agent Card different from a regular OpenAPI spec?
OpenAPI describes the surface of an HTTP API: endpoints, parameters, response shapes. The Agent Card sits one layer up and describes the agent itself: name, identity, skills, capabilities, plus how to authenticate. An agent can also publish an OpenAPI spec for its own API, but the Agent Card is what lets another agent figure out whether to talk to this one in the first place. Discovery primitive on top, not a replacement for the API spec underneath.
Do I need to sign my Agent Card?
Not strictly required by the spec, but recommended once you ship to production. A plain card is publicly readable JSON and can be impersonated. A signed card adds cryptographic provenance: a verifier can confirm the card was issued by the holder of a known key. Set up signing once, ship the verification method in your DID Document, and any A2A-aware client can verify the card without trusting the host.
What is the relationship between A2A v1.0 and v1.2?
v1.0 shipped under Linux Foundation governance on April 9, 2026 at the one-year-anniversary milestone, was the first stable spec, and introduced Signed Agent Cards as the cryptographic signature feature. v1.2 was announced at Google Cloud Next in late April 2026 and is the current default for new deployments; its additions over v1.0 are expanded capability declarations and tighter alignment with the OAuth 2.0 metadata RFCs. v0.2 was the original Google specification and should only appear in historical context.
Can a single agent publish multiple Agent Cards?
Yes, in two patterns. A single domain can host one Agent Card per agent at a per-agent path, useful when one organization runs many agents. And an agent can be reachable through multiple compositions: an A2A Agent Card for machine discovery, a Tobira @handle entry that points back to the same DID, and a per-marketplace listing that references the same agent. The DID Document is the canonical anchor; multiple cards can reference the same DID.
What is the cheapest way to verify a Signed Agent Card?
A few dozen lines of code with a JOSE library. Fetch the card and the JWS. Parse the verification method reference from the card to get the public key URL or DID. Resolve the public key. Verify the signature over the canonicalized card payload. Reject the card if any step fails. The hard part is not the cryptography but the operational details: handle key rotation, check expiration, do not silently cache stale signatures.
Sources
- A2A Project, Linux Foundation. “Agent2Agent (A2A) Protocol Specification.” 2026. https://a2a-project.org/
- A2A Protocol. “Agent Card namespace and discovery.” https://a2a-protocol.org/latest/topics/agent-discovery/
- W3C. “Decentralized Identifiers (DIDs) v1.0.” Recommendation, July 19, 2022. https://www.w3.org/TR/did-core/
- W3C Credentials Community Group. “did:web Method Specification.” https://w3c-ccg.github.io/did-method-web/
- IETF RFC 7033. “WebFinger.” https://datatracker.ietf.org/doc/html/rfc7033
- IETF RFC 9728. “OAuth 2.0 Protected Resource Metadata.”
- IETF RFC 8414. “OAuth 2.0 Authorization Server Metadata.”
- IETF RFC 7591. “OAuth 2.0 Dynamic Client Registration.”
- IETF RFC 7515. “JSON Web Signature (JWS).”
- W3C. “Ed25519 Signature 2020.” Verifiable Credentials Working Group.
- ENS Domains. “ENSIP-25: Verifiable AI Agent Identity with ENS.” March 4, 2026. https://ens.domains/blog/post/ensip-25
- Tobira protocol documentation. https://tobira.ai/docs/protocol
- Google Developers Blog. “A2A: A new era of agent interoperability.” 2025. https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/