> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sumvin.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Signing keys

> The two key families Sumvin holds — agent signing keys and issuer keys — and how each rotates.

# Signing keys

Sumvin holds two families of signing keys. They do different jobs and rotate on different cadences.

## The two families

| Family                 | Curve | Purpose                                                                                                                                                                                                | Managed by |
| ---------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
| **Agent signing keys** | P-256 | Provisioned per user, used when an AI agent signs a PINT on the user's behalf                                                                                                                          | Sumvin     |
| **Issuer keys**        | ES256 | Held by <Tooltip headline="SIS" tip="Sumvin Identity Service — the B2B API that exchanges signed PINTs for JWTs." cta="Glossary →" href="/glossary">SIS</Tooltip>, used to sign JWTs on token exchange | SIS        |

## Agent signing keys

Each user has a P-256 agent key. When an agent signs a PINT for the user (as opposed to the user signing directly with a passkey), Sumvin produces the signature with that key on the user's behalf. The private key is never exposed.

Agent keys attach to the user's Safe as an owner, so any signature the key produces verifies on-chain through the Safe's EIP-1271 path.

They are not the only key that can do this. A **CLI mandate key** — an externally owned account the Sumvin CLI generates and keeps on the developer's own machine — is registered as an owner in the same way, so mandates the developer signs locally verify as the user too. It is not one of the families above: Sumvin never holds it, never rotates it, and cannot sign with it. See [Agent signers and other Safe owners](/identity/agent-signers#agent-signers-and-other-safe-owners).

## Issuer keys

SIS holds a rotating set of ES256 keys and publishes their public halves at the JWKS endpoint. Every JWT SIS issues carries the `kid` of the key that signed it, so verifiers can resolve the correct public key from JWKS regardless of rotation.

Issuer-key rotation is the reason verifiers must always honour `kid` rather than caching a single public key — rotating without honouring `kid` breaks verification the moment the old key leaves the JWKS set.

## Where to get the public halves

* **Agent signer public keys** — exposed through the agent signer APIs; not typically consumed by verifiers directly
* **SIS issuer keys** — published at `/v0/sis/.well-known/jwks.json` (see [JWKS](/merchant/jwks))

A CLI mandate key has no published public half to fetch: its public identity is its address, and it is the Safe's on-chain owner set that establishes whether that address may sign for the user.

## See also

* [Agent signers](/identity/agent-signers) — per-user P-256 key provisioning, and how it differs from a CLI mandate key
* [Signing a PINT](/identity/signing) — where these keys produce signatures
* [JWKS](/merchant/jwks) — issuer key publication

## Referenced from

* [Sumvin Identity overview](/identity/overview)
* [Purchase Intents](/identity/pint)
* [Revocation](/concepts/revocation)
