(agent_id, content_hash, version, composed_at, card_kind). Any consumer holding the public key from <api>/v1/.well-known/jwks.json can verify it offline, without ever holding a Mnemom credential.
The attestation is the cryptographic glue between three Phase 5 surfaces:
- The A2A AgentCard export attaches a fresh attestation as an extension on every public read.
- The transparency log stores the attestation alongside the canonical identity for durable historic verification.
- The
mnemom verify-cardCLI consumes the JWKS + log to verify offline.
Wire format
JWS Compact Serialization (RFC 7515):What it commits to
The payload binds the identity. A change to any of these fields produces a different attestation:
The token doesn’t carry the card body — consumers fetch the body separately (via
/v1/agents/{id}/a2a-agent-card or GET /v1/agents/{id}/state) and check the body’s content_hash matches the attestation’s content_hash.
Verification
The full verification flow (mnemom verify-card executes this for you):
- Fetch
https://api.mnemom.ai/v1/.well-known/jwks.json(the API host — not theissclaim’s host; see note below). - Locate the key with
kidmatching the token’s header. - Verify the Ed25519 signature.
- Check
issmatches the expected issuer (https://mnemom.aifor production — this is a domain-identity check, not a fetchable location). - Check
now() < exp(the verifier may apply a small clock-skew grace; default 60 seconds). - Check the canonical card body’s
content_hashmatches the attestation’scontent_hash.
The token’s
iss claim (https://mnemom.ai) and the JWKS host (api.mnemom.ai) are deliberately different: iss names Mnemom as the issuing identity, while the JWKS is served from the API host that also serves everything else in this section. Don’t construct the JWKS URL from iss — always use https://api.mnemom.ai/v1/.well-known/jwks.json (or the jwks_uri given alongside the token, e.g. in the A2A export).mnemom-platform/cli/src/commands/verify-card.ts (the API’s own verifier is internal, but any JOSE/EdDSA library implements the same six steps above).
Key rotation + JWKS lifetime
The JWKS includes the active key plus recently-retired keys still inside their verification window. Once the retirement window plus the token-TTL plus a small grace has elapsed, the retired key drops out of the JWKS.
AAP signing-key rotation is a Mnemom-platform operation, performed by Mnemom staff on a scheduled cadence (and on demand for incident response) — it is not a customer- or operator-callable endpoint. You don’t rotate the platform’s AAP signing keys yourself; the rotation, retirement window, and key publication are managed for you.
What you can rely on: the retired key remains verifiable for any token signed before its
retired_at timestamp, and the current public keys are always discoverable from the published JWKS. (To rotate your own agent’s API key — a different operation — see Agent key rotation.)
Relationship to the transparency log
Tokens are short-lived (1-hour TTL by default). The durable record is the transparency log: every canonical card identity ever composed has a row incard_attestations with the full signed token + a Merkle inclusion proof. Beyond the token’s expiry, consumers query the log — not the token.
See also
- Schema reference — canonical wire format
mnemom verify-card— operator CLI for offline verification- Transparency log — durable record beyond the TTL window
- A2A AgentCard export — where the attestation surfaces on the public discovery API