Skip to main content
An assistant is one AI voice agent: a system prompt, a voice, the tools it may call, and the settings that govern a call. Everything a phone number or a campaign dials is an assistant.

Endpoints

The workspace comes from your API key, so no endpoint asks you for a workspace id.
Listing is a POST because a list query is a document — page, size and a search term, typed as themselves rather than coerced from a query string. It reads, and changes nothing.

The assistant object

string
required
UUID of the assistant.
string
required
Display name, 1–255 characters.
string
required
Prompt style. "Single Prompt" is the only supported value today.
object
required
The configuration document — see below.
string
The assistant’s own inbound SIP URI, when SIP is provisioned. Point a carrier at it to route calls here.
string
required
ISO 8601 timestamp.
string
required
ISO 8601 timestamp of the last change.

The configuration document

config is where the assistant’s behaviour lives. Send only the parts you care about — anything you leave out is filled in with the same defaults the dashboard gives a new assistant, and the completed document is what comes back. To change it later, PATCH merges what you send into it, and PUT replaces it.
string
The instructions the assistant follows. Supports {{variable}} placeholders filled in per call.
string
default:"gemini-3.8-live"
Every assistant runs on Gemini 3.8 Live, so this is always stored as gemini-3.8-live, whatever a request sends.
string
default:"Charon"
One of: Zephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat. Anything else is rejected with VALIDATION_FAILED rather than quietly substituted — a voice you did not choose is an assistant that does not sound like the one you asked for.
string[]
Tools the assistant may call. Ids that do not belong to your workspace are dropped, and when two ids resolve to the same tool name only one is kept — a duplicate declaration is refused by the model at connect time, which would leave the call live and silent. The Tools endpoints add a tool’s id here when they create it and take it out when they delete it.
string[]
Knowledge bases the assistant may search. Each must belong to your workspace.
number
default:"10"
Hard ceiling on a call, in minutes: at most 30. A larger value is saved as 30.
number
default:"2"
How long a caller may stay silent before the assistant ends the call, in minutes. Only applies when endCallOnSilence is true.
object | boolean
default:"{ enabled: true, action: 'hangup' }"
Accepts true/false or { "enabled": true, "action": "hangup" }.
string
default:"medium"
Kept for compatibility, with no effect: every assistant runs on Gemini 3.8 Live, which always runs at minimal, whatever is stored here.
string
Where call events for this assistant are delivered. See Webhook events.
object
Structured fields to extract from each transcript. See Post-call analysis.

Native tools

nativeTools switches on the behaviour Verbeo implements for you. Each entry is three-state:
object
Lets the assistant hang up when the conversation is over. On by default for a new assistant — without it the assistant stays on the line, billing, after the caller has said goodbye.
object
Hands the call to a human. mode: "static" always dials staticDestination; mode: "dynamic" lets the assistant choose a number, guided by dynamicPrompt. Also takes transferType (cold or warm).
object
Sends a text message during the call. smsContentType: "static" sends smsStaticMessage verbatim; "prompt" lets the assistant compose it.
Fields you do not send are left unchanged on a tool that already exists, so you can retarget a transfer without restating the rest of it. The native tool endpoints change the same tools, under the tool’s own field names (transfer_call_destination for staticDestination), and also set what nativeTools cannot: a send_sms tool’s Twilio account and its timeout.

Authentication

Every endpoint takes a private workspace API key (vbr_…) as a Bearer token. Public widget keys (vbr_pub_…) are rejected with 403 FORBIDDEN — they ship inside web pages, where anyone can read them. See Authentication.