Security
You're trusting us with powerful keys. Here is exactly what we do with them, and what we don't.
Last reviewed 27 Oct 2026
How keys are stored
- Keys are validated with the provider, then encrypted with AES-256-GCM (random 96-bit IV per key, authenticated with the record ID) before they are written to storage.
- The encryption key is a server-side secret (a Cloudflare Worker secret). It is never sent to browsers and is not in our source code repository.
- Data is kept in a private database (a Cloudflare Durable Object with SQLite storage) that only the KeyBark server can reach; it has no public endpoint.
- After you add a key we only ever display its last 4 characters.
- Removing a key deletes its encrypted copy.
How keys are used
- Read-only by default. We call the providers' cost/usage endpoints: OpenAI
/v1/organization/costs, Anthropic/v1/organizations/cost_report, OpenRouter/api/v1/keyor/api/v1/keys/{hash}. - Kill switch (beta) is opt-in per key. Only if you enable it, confirm it, and name the target key do we call the provider's key-management API (OpenAI: delete a project API key; Anthropic: set a key to inactive; OpenRouter: disable a key). It fires once per arming.
- We never proxy your production traffic and never use your keys to make model requests.
Accounts and the web app
- Passwords are hashed with scrypt. Sessions are signed, HTTP-only, Secure, SameSite cookies.
- All traffic is HTTPS with HSTS. State-changing requests require a same-origin check.
- Sign-up, login and contact forms are rate limited, and accounts lock temporarily after repeated failed logins.
- Payments are handled by Stripe; we never see card numbers.
Use the narrowest key you can
OpenAI and Anthropic cost reports require organization admin keys. Create a dedicated admin key for KeyBark so you can revoke it independently, and remove it from KeyBark if you stop using us.
Report a vulnerability
Please use the contact form with the subject “security”. Don't include live keys.