Publish keys at the manifest root
Agents have nothing to verify your responses against.
Why it matters
Signing keys let agents cryptographically verify checkout responses came from you, not a man-in-the-middle. Tokenized payment flows in v2026-04-08+ require them. Since 2026-07-12 the spec's canonical field is a root-level RFC 7517 "keys" array (the legacy "signing_keys" field was removed from the profile schema; we accept both during the migration). Stores using checkout-link redirects (e.g. WooCommerce) often skip this safely.
Show fix
Generate an Ed25519 keypair, publish the public key as a JWK in a root-level "keys" array (the canonical field since spec PR #566; "signing_keys" is legacy). Rotate annually; keep "kid" stable across rotations of the same key.
{
"keys": [
{
"kty": "OKP",
"crv": "Ed25519",
"x": "<base64url-encoded-public-key>",
"kid": "key-2026-04",
"alg": "EdDSA"
}
],
"ucp": { ... }
}
