Tous les documents juridiques sont disponibles uniquement en anglais, et seule la version anglaise fait foi.
Traduire avec Google Traductions’ouvre dans un nouvel onglet ; à titre indicatif uniquementWhich keys sign Agined receipts, where they are held, who can use them, how their public halves are published and pinned, how rotation works, and what happens if a key is compromised.
Last updated November 6, 2026.
| Algorithm | Ed25519 (RFC 8032), pure Ed25519 over the raw canonical bytes |
| Number of keys | Seven, one per data region, shared by all workspaces in that region |
| Custody | Encrypted Cloudflare Worker secrets, one per data region |
| Who can sign | Only the receipt service, which holds the key as a secret |
| Private key material | Stays in the encrypted secret. No Agined API route returns it |
| Expiry | None. Keys have no expiry date |
| Dedicated keys per customer | Not provisioned today |
In plain language: each region has one signing key, kept as an encrypted secret that only our receipt service uses. No part of the API hands it out.
A workspace's receipts are signed by the key of the data region chosen when the workspace was created:
| Region | Name |
|---|---|
enam | US East |
wnam | US West |
weur-1 | Europe Central |
weur-2 | Europe West |
neur | Europe North |
apac | Asia-Pacific |
oc | Oceania |
There is no fallback between regions. If a region's key is not configured, calls fail with 503 signing_unprovisioned; if the key cannot be used, with 503 signer_unavailable. No receipt is ever signed by another region's key or returned unsigned.
A key id (kid) is derived from the public key itself: the first 16 bytes of the SHA-256 hash of the raw 32-byte public key, encoded as base64url without padding, 22 characters. You can recompute it from the published key, so nobody can attach a different id to a key without it showing.
Every receipt names its key in signatureKeyId, inside the signed bytes.
| Address | Content |
|---|---|
https://agined.com/.well-known/tools-keys.json | Redirects (308) to the key set below |
https://api.agined.com/api/v1/tools/keys | The JWK set itself, as application/jwk-set+json, cacheable for one hour, open to any origin |
https://api.agined.com/api/v1/tools/signing-key/list | Every published key with an active flag |
https://api.agined.com/api/v1/tools/signing-key/<kid>/public | One public key by its key id |
Each key in the set has kty: "OKP", crv: "Ed25519", alg: "EdDSA", use: "sig", its kid, the public key x in base64url, its jurisdiction (the region) and the signer's DID, did:web:agined.com:agents:tools-signer.
A signature proves who holds a key, not whose key it is. For the strongest position, fetch the key set once through a channel you trust, store the kid and x of the key you rely on in your own repository or records, and verify against that copy. Keep the key set you verified against next to any receipt you keep as evidence: the two together verify on their own, years later and without us.
A key changes only through a manual key ceremony run by Agined. There is no automatic rotation and no schedule. No production signing key has been rotated so far.
When a key is retired, its public half stays in the published key set for as long as receipts it signed can be relied on, and a key change never changes the receipt format. This is our policy; the key endpoint does not enforce it on its own, which is one more reason to pin the keys you rely on.
Workspace owners and admins can ask for a rotation with POST /api/v1/tools/signing-key/rotate-request and follow it with GET /api/v1/tools/signing-key/rotation-status. A request records the wish; it does not rotate anything by itself. See Signing keys and rotation.
There is no automated compromise response, no revocation list and no revocation of single receipts. A leaked key would let its holder create receipts that verify, and a signature check alone could not tell them from genuine ones.
We would handle a suspected compromise as a security incident. Where a key has been, or may have been, misused, we would:
unknown_key, genuine ones included, so we would weigh that against the risk of forgeries.Your best protection does not depend on us: pin the key set you verified against, and record each receipt in a system you control, with its own clock, when you receive it. A receipt you stored before a compromise keeps its value, because you can show you held it before the forgery became possible.
Report a suspected compromise to security@agined.com.
Keeping keys as encrypted secrets limits who can read them. It does not stop whoever can deploy the receipt service from causing it to sign. That is why the Receipt Practice Statement keeps observed and reported facts apart, and why the trust you place in us is limited to the short list in its section 9.
No key has been rotated or compromised. Notices of rotations and compromises will be added here, with their dates. Questions: security@agined.com.