401 with code unauthenticated. The API never tells you which part was wrong, so a guessed key learns nothing.
Two kinds of key
A personal key is logged under its owner’s name in the audit log, and can never do more than its owner’s current role allows: demote the person and their key shrinks with them. It stops working the moment they leave the workspace or are suspended (
401, or 403 key_owner_inactive).
Some operations act as a person and need a personal key. They’re marked x-requires-personal-key in the spec and “Needs a personal key” in the API reference. A workspace key gets 403 personal_key_required:
- Whispering to the agent, listening in and taking over (
/whisper,/operator) - Call notes
- Asking for a number we don’t stock (
POST /v1/numbers/requests) and asking for minutes (POST /v1/minutes/requests) - Transferring a call to a typed number (
to). Workspace keys may transfer only to the agent’s configured destinations (destination_id).
Key format
- Kallabot stores only a peppered SHA-256 hash of the key. Nobody at Kallabot can read it back, and there is no “show key” button. If you lose a key, make a new one.
- The dashboard shows the first characters (
kb_live_7k2m) and the last four, so you can tell keys apart. - Old
sk_andbn-keys from the previous platform no longer work.
Create a key
Keys are created in the dashboard, by a person, never through the API. A leaked key that could mint new keys would be impossible to contain, so the key endpoints accept only a signed-in session. Calling them with an API key returns403 wrong_auth_plane.
1
Open the keys page
Settings → For developers → API keys. Workspace keys need the owner, admin or developer role. Anyone can make personal keys for themselves under Your personal keys; owners and admins can also see their teammates’ personal keys.
2
Name it after what uses it
For example
Website lead form or CRM sync. One key per integration makes revoking one painless.3
Choose its access
Pick a preset (below). A key can never hold a scope the person creating it doesn’t have.
4
Choose its lifetime
30 days, 90 days or 1 year. Every key expires; the longest a key can live is one year.
5
Copy it once
The full key is shown in this one response and never again.
Access presets
Scopes
A scope answers “may this key do this kind of thing at all?”. Each operation in the API reference lists the scopes it needs, and the OpenAPI spec carries them asx-required-scopes. A key missing one gets 403 insufficient_scope, and the detail names what’s missing.
Scopes decide what a key may do. Which rows it can see is decided separately. An API key sees the whole workspace, unless its access was narrowed to specific agents, in which case it can only use and see those agents.
Agents
Calls
Chat
Knowledge and tools
Numbers
Webhooks and minutes
Dashboard-only scopes
These exist for people signed in to the app. They are not part of the public API and API keys don’t use them:apikey:read, apikey:write, audit:read, audit:export, analytics:report, provider:read, call:listen, whatsapp:read, whatsapp:content, whatsapp:write, whatsapp:reply.
Actions only a person can take
Some actions need a person behind them, even withcall:control. Use a personal key for them: whispering, listening in, taking over, transferring to a typed number, and call notes. Saved call views also belong to a person.
IP allowlist
Limit where your keys can be used from in Settings → API keys → Allowed IP addresses. Add up to 20 addresses or ranges (CIDR, like203.0.113.0/24). A request from anywhere else gets 403 ip_not_allowed, even with a valid key. An empty list means any address.
Rotate a key
Click Roll on a key to rotate it without downtime:1
Roll the key
Kallabot issues a new key with the same name, scopes, environment and lifetime as the old one. The new key is shown once.
2
Deploy it within 24 hours
The old key keeps working for 24 hours, so you have time to switch every place that uses it.
3
Watch the old key go quiet
The keys list shows each key’s last used time. After 24 hours the old key stops on its own.
grace_hours, default 24), where 0 retires the old key immediately. The dashboard always uses 24 hours.
If a key may have leaked, don’t roll it. Revoke it: it stops within seconds, everywhere. Then create a new key. Give a short reason when you revoke; it’s kept in the audit log.