The lifecycle
- Draft. Every save writes a draft version. Callers never hear a draft.
- Publish. Makes the current draft the live version. From then on, new calls and chats use it. Calls already in progress keep the version they started with.
- Versions. Every published version is kept.
GET /v1/agents/{agent_id}/versionslists them, andPOST …/versions/{version_id}/revertturns an old one into a new draft. - Archive.
DELETEarchives the agent, with a requiredreason. It’s never a hard delete, because calls and audit records still point at it. Archived agents stop taking calls and drop out of the default list.
A complete config
Every field is optional and has a server default. The smallest valid agent is{"config": {"prompt": "…"}}. A realistic one:
Config reference
The full schema, with every field and its limits, is in the API reference under Agents. The blocks you’ll use most:Identity: name, prompt, greeting, language, timezone
Identity: name, prompt, greeting, language, timezone
Listening: stt
Listening: stt
Speech recognition. The defaults are tuned for Gulf callers who switch between English, Arabic, Urdu and Hindi mid-sentence.
Speaking: tts
Speaking: tts
The voice. Voices come from Cartesia (model
sonic-3.6). The easiest way to pick one is in the dashboard’s voice picker, where you can hear each voice and clone your own; then copy its id into tts.voice.Turn-taking: turn and style
Turn-taking: turn and style
When the agent decides the caller has finished, and how human it sounds.
The call: call
The call: call
What it knows and can do: knowledge, tools, builtins, web_search
What it knows and can do: knowledge, tools, builtins, web_search
Google connections are made in the dashboard; their ids come from there.
After the conversation: analysis
After the conversation: analysis
What the summary step looks for once a call or chat ends. Results arrive on the call (
disposition, summary, extracted) and in the call.analyzed webhook.Your own data: metadata
Your own data: metadata
Any JSON you like. It’s echoed back on every call record, so you can tie calls to your own systems.
Transfers
call.transfer lists the people the agent may hand a phone call to. The agent picks by id and never dials a number a caller gives it.
Transfers need Kallabot’s call bridge on your phone line. It’s rolling out workspace by workspace; where it isn’t on yet, the agent tells callers it can’t transfer them and offers a call back instead.
Fields that are refused
A config that asks for something the runtime doesn’t do yet is refused with422 unsupported_capability, never silently ignored. Today that’s memory (cross-call memory) and a webhooks block (webhooks are set up with POST /v1/webhooks instead). Unknown fields are refused with invalid_request.
Validate before you save
POST /v1/agents/validate compiles a config exactly as a save would, without saving it. It returns every finding and the config with all defaults filled in.
path is a JSON Pointer into your config, so an editor can show each finding on its field. Errors block publishing; warnings don’t.
Common tasks
- Edit and publish
- Roll back
- Archive
- List and search
Webhooks for agents
agent.created, agent.updated, agent.published and agent.archived fire on every change, from the API or the dashboard. See Events.