Servers, browsers, services and devices each get the right kind of credential. Keys are hashed at rest, shown once, scoped, and rotated with overlap. Identity changes reach your systems as signed webhooks.
Scopes, domain and address limits, and per-environment applications keep one key from reaching everything.
Keys and webhook secrets appear once. Echoes in responses are redacted.
Signed webhooks tell you when a member is removed or an account is locked.
| Control | How it works | Status |
|---|---|---|
| Credential types | Backend, browser and service keys, plus OAuth machine clients. Key format {app_key}.<random>; only the hash is stored. | Live |
| Scopes | auth, sso, user, org, rbac, billing, metering, notify, governance and more. Unknown scopes are refused. Machine clients carry up to 50 scopes your API defines. | Live |
| Environments | Development, staging and production are separate applications with separate keys, JWKS and issuer, so a test key cannot reach production. | Live |
| Browser keys bound to domains | allowed_domains checked against the Origin (exact host or *.domain), plus an optional IP range allow-list per key. | Live |
| Rotation and revocation | Rotate with 0 to 7 days of overlap; constant-time comparison; the last public key cannot be revoked by mistake. | Live |
| Rate limits | Per-address limits on every sign-in door, plan windows per customer (429 with Retry-After), and 60 a minute per machine client. | Live |
| Per-key budgets | Sign-in budgets per SDK credential (600 a minute), counted today and enforced on request. | Early access |
| Signed webhooks | HMAC-SHA256 over the timestamp and body; 10 identity events plus notification triggers. | Live |
| Durable event outbox | Identity events written in the same transaction as the change and swept until delivered. | Early access |
| CORS | Allowed origins come from your keys' domains. Narrowing each app path to its own domains is in early access. | Live |
| Security headers | HSTS for two years, nosniff, frame and referrer policy, permissions policy on the web tier; a full nonce CSP on hosted pages is in early access. | Live |
| Audit | Every key created, rotated, revoked or restricted is a critical audit row, written in the same commit or not at all. | Live |
| Option | Values | Default |
|---|---|---|
| credential_type | be_sdk, fe_sdk, service | required |
| scopes | From the SDK scope list | by type |
| allowed_domains · allowed_ip_cidrs | Hosts and address ranges | no limit |
| expires_in_days | Days until the key stops working | never |
| Rotation overlap | 0 to 604,800 seconds | 0 |
| Webhook events | Event names, or all | all |
| Webhook retries | max_attempts up to 5 · timeout up to 10 s · backoff up to 30 s | 3 · 5 s · 30 s |
Create scoped keys per environment and subscribe to signed identity events.