Skip to content

Public JWKS: Sill's agent-card signing key

Sill publishes the public key that signs every agent card and every ARD ai-catalog.json as a standard JSON Web Key Set (JWKS). Anyone can fetch it and verify those signatures with ordinary ed25519 tools, with no Sill account, API key or SDK.

Audit bundles are signed with a different key, published at https://sill.so/.well-known/sill-audit-envelope-v1.pub. See Audit envelope.

GET https://edge.sill.so/.well-known/jwks.json
HeaderValue
Content-Typeapplication/jwk-set+json; charset=utf-8
Cache-Controlpublic, max-age=300, s-maxage=300
Access-Control-Allow-Origin*
{
"keys": [
{
"kty": "OKP",
"crv": "Ed25519",
"x": "1SpjFHX9W8VJlq8trB85MnsOTU8uwC3vWOzooQlB9Kw",
"kid": "sill-card-ed25519-v1-5f03060ef5f77675",
"alg": "EdDSA",
"use": "sig"
},
{
"kty": "OKP",
"crv": "Ed25519",
"x": "1SpjFHX9W8VJlq8trB85MnsOTU8uwC3vWOzooQlB9Kw",
"kid": "foyer/edge/card-signing-v1",
"alg": "EdDSA",
"use": "sig"
}
]
}
FieldMeaning
kty, crv, alg, useAn Ed25519 signing key, per RFC 8037.
xThe raw 32-byte public key, base64url-encoded.
kidThe key ID. An agent card names it in signing.signing_key_id; an ARD trust manifest names it in the kid of its signature header. It is derived from the public key itself, so a new key gets a new ID.

Until October 2026 this key was published only under the ID foyer/edge/card-signing-v1. During a transition the key set lists the same key under both sill-card-ed25519-v1-5f03060ef5f77675 and foyer/edge/card-signing-v1, with identical x, so cards and catalogs signed before the change keep verifying. The previous entry stays until at least 2026-11-05. If a card or catalog names a kid your cached key set does not contain, fetch the key set again.

Always select the key by kid from the document you fetch rather than hard-coding x, so your verifier keeps working if a key is added.

Verify a signature has tested scripts for both surfaces this key signs: