Endpoints
Every assistants endpoint with exact parameters, validation rules, and error responses.
Managing assistants
Standard listing and CRUD. Creating writes the assistant to the live voice platform first, then mirrors it locally; the optional selected_phone_number purchases and attaches a number in the same request. Updating re-renders the prompt from the stored template, metadata and variables.
Advanced editor
The advanced endpoints expose the full configuration surface (analysis, artifacts, notifications, personality switching) on top of the regular fields. The GET returns the merged live configuration; the PUT accepts everything the regular update accepts plus the extra fields listed on the Fields page.
Embed widget
Each assistant can be embedded as a website chat/voice widget. These endpoints read and write the widget configuration and return ready-to-paste embed HTML.
Statistics and version history
Call statistics power the dashboard graphs. The version history journal records configuration changes; any entry can be restored, which re-applies that configuration to the live assistant.
GET/assistants
List assistants you can access
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
search |
query | string | no | yes | string (name contains-filter) |
assistants.name |
Filter by name. |
phone_search |
query | string | no | yes | string (phone contains-filter) |
assistants.phone_number |
Filter by phone number. |
sort_by |
query | string | no | no | in: name, created_at, user_id (fallback name) |
Sort field. | |
sort_order |
query | string | no | no | asc|desc |
||
per_page |
query | integer | no | no | integer |
Items per page. | |
lite |
query | boolean | no | no | boolean |
Returns a lightweight projection (id, assistant_id, name, type, model, voice, transcriber, first_message, voicemail_message, end_call_message) for pickers. |
Response example 200
{
"success": true,
"data": [{"id": 12, "assistant_id": "a1b2c3d4-…", "name": "Reception", "type": "production", "phone_number": "+15551230000", "first_message": "…"}],
"pagination": {"current_page": 1, "last_page": 1, "per_page": 9, "total": 3, "from": 1, "to": 3}
}
Errors
| Status | Meaning | Body |
|---|---|---|
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
POST/assistants
Create an assistant (writes to the live voice platform)
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
selected_phone_number |
body | string | no | yes | nullable|string|max:20|regex:/^\+[1-9]\d{1,14}$/ |
assistants.phone_number |
E.164 number to purchase and attach in the same request. |
name |
body | string | yes | no | required|string|max:40 |
assistants.name |
Assistant display name (max 40 characters). |
type |
body | string | no | yes | nullable|string|in:demo,production |
assistants.type |
Assistant type. |
user_id |
body | integer | no | yes | nullable|integer|exists:users,id |
assistants.user_id |
Owner assignment — honoured only for admin roles. |
template_id |
body | integer | no | yes | nullable|integer |
assistants.template_id |
Prompt template the assistant is built from. |
firstMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.first_message |
What the assistant says when answering. |
firstMessageMode |
body | string | no | yes | nullable|string|in:assistant-speaks-first,assistant-speaks-first-with-model-generated-message,assistant-waits-for-user |
assistants.first_message_mode |
Who speaks first on a call. |
firstMessageInterruptionsEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.first_message_interruptions_enabled |
Whether callers may interrupt the greeting. |
voicemailMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.voicemail_message |
Message left when voicemail is detected. |
endCallMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.end_call_message |
What the assistant says before hanging up. |
endCallPhrases |
body | array | no | yes | nullable|array |
assistants.end_call_phrases |
Caller phrases that end the call. |
voicemailDetection |
body | object | no | yes | nullable|array |
assistants.voicemail_detection |
Voicemail detection settings. |
voicemailDetection.enabled |
body | boolean | no | yes | nullable|boolean |
assistants.voicemail_detection |
|
voicemailDetection.beepDetection |
body | boolean | no | yes | nullable|boolean |
assistants.voicemail_detection |
|
voicemailDetection.silenceDuration |
body | integer | no | yes | nullable|integer|min:0 |
assistants.voicemail_detection |
|
voicemailDetection.greetingDuration |
body | integer | no | yes | nullable|integer|min:0 |
assistants.voicemail_detection |
|
maxDurationSeconds |
body | integer | no | yes | nullable|integer|min:10|max:43200 |
assistants.max_duration_seconds |
Hard cap on call length (10 s – 12 h). |
backgroundSound |
body | string | no | yes | nullable|string|in:office,coffee-shop,convention-hall,summit,traffic,rain,storm,wind,fire,crackling-fire,rain-on-roof,coastal-storm,howling-wind,seagulls,night-insects,fan,white-noise,off |
assistants.background_sound |
Ambience played behind the call ("none" is normalised to "off"). |
modelOutputInMessagesEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.model_output_in_messages_enabled |
|
clientMessages |
body | array | no | yes | nullable|array |
assistants.client_messages |
Message types forwarded to the browser widget. |
serverMessages |
body | array | no | yes | nullable|array |
assistants.server_messages |
Message types forwarded to the webhook. |
transportConfigurations |
body | array | no | yes | nullable|array |
assistants.transport_configurations |
Telephony transport settings (platform-managed keys). |
transcriber |
body | object | no | yes | nullable|array |
assistants.transcriber |
Speech-to-text settings. Engine selection is platform-managed. |
transcriber.language |
body | string | no | yes | nullable|string|size:2 |
assistants.transcriber |
Two-letter language code. |
transcriber.confidenceThreshold |
body | number | no | yes | nullable|numeric|min:0|max:1 |
assistants.transcriber |
|
transcriber.formatTurns |
body | boolean | no | yes | nullable|boolean |
assistants.transcriber |
|
model |
body | object | no | yes | nullable|array |
assistants.model |
Language-model settings. Model selection is platform-managed. |
model.messages |
body | array | no | yes | nullable|array |
assistants.model |
System prompt messages. |
model.maxTokens |
body | integer | no | yes | nullable|integer|min:1 |
assistants.model |
|
model.functionCall |
body | string | no | yes | nullable|string|in:none,auto |
assistants.model |
|
model.functionCallBehavior |
body | string | no | yes | nullable|string|in:auto,required |
assistants.model |
|
model.tools |
body | array | no | yes | nullable|array |
assistants.model |
Attached tools (managed via the tools picker). |
voice |
body | object | no | yes | nullable|array |
assistants.voice |
Voice settings. The voice itself comes from the chosen personality. |
voice.voiceId |
body | string | no | yes | nullable|string |
assistants.voice |
Set by the personality selection. |
voice.speed |
body | number | no | yes | nullable|numeric|min:0.25|max:4 |
assistants.voice |
Speaking speed multiplier. |
compliancePlan |
body | object | no | yes | nullable|array |
assistants.compliance_plan |
|
compliancePlan.recordingEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.compliance_plan |
|
compliancePlan.transcriptionEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.compliance_plan |
|
compliancePlan.dataRetentionDays |
body | integer | no | yes | nullable|integer|min:1 |
assistants.compliance_plan |
|
backgroundSpeechDenoisingPlan |
body | object | no | yes | nullable|array |
assistants.background_speech_denoising_plan |
|
backgroundSpeechDenoisingPlan.smartDenoising |
body | boolean | no | yes | nullable|boolean |
assistants.background_speech_denoising_plan |
|
backgroundSpeechDenoisingPlan.fourierDenoising |
body | boolean | no | yes | nullable|boolean |
assistants.background_speech_denoising_plan |
|
startSpeakingPlan |
body | object | no | yes | nullable|array |
assistants.start_speaking_plan |
Turn-taking behaviour before the assistant speaks. |
stopSpeakingPlan |
body | object | no | yes | nullable|array |
assistants.stop_speaking_plan |
Turn-taking behaviour when the caller interrupts. |
monitorPlan |
body | object | no | yes | nullable|array |
assistants.monitor_plan |
|
monitorPlan.listenEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.monitor_plan |
|
monitorPlan.controlEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.monitor_plan |
|
monitorPlan.websocketUrl |
body | string | no | yes | nullable|url |
assistants.monitor_plan |
|
keypadInputPlan |
body | object | no | yes | nullable|array |
assistants.keypad_input_plan |
|
keypadInputPlan.enabled |
body | boolean | no | yes | nullable|boolean |
assistants.keypad_input_plan |
|
keypadInputPlan.maxDigits |
body | integer | no | yes | nullable|integer|min:1|max:10 |
assistants.keypad_input_plan |
|
keypadInputPlan.terminateOnHash |
body | boolean | no | yes | nullable|boolean |
assistants.keypad_input_plan |
|
metadata |
body | object | no | yes | nullable|array |
assistants.metadata |
Business metadata injected into the prompt. |
metadata.company_name |
body | string | no | yes | nullable|string|max:255 |
assistants.metadata |
|
metadata.industry |
body | string | no | yes | nullable|string|max:255 |
assistants.metadata |
|
metadata.location |
body | string | no | yes | nullable|string|max:500 |
assistants.metadata |
|
metadata.services_products |
body | string | no | yes | nullable|string|max:1000 |
assistants.metadata |
|
metadata.sms_phone_number |
body | string | no | yes | nullable|string|max:20 |
assistants.metadata |
|
metadata.assistant_phone_number |
body | string | no | yes | nullable|string|max:20|regex:/^\+[1-9]\d{1,14}$/ |
assistants.metadata |
E.164 format. |
metadata.webhook_url |
body | string | no | yes | nullable|url|max:500 |
assistants.webhook_url |
Where call events are delivered. |
variableValues |
body | object | no | yes | nullable|array |
assistants.metadata |
Values for the template's custom variables. |
Request example
{
"name": "Reception",
"type": "production",
"template_id": 5,
"firstMessage": "Thank you for calling, how can I help?",
"metadata": {"company_name": "Acme Dental", "industry": "Dental"}
}
Response example 201
{"success": true, "data": {"id": 12, "assistant_id": "a1b2c3d4-…", "name": "Reception", …}, "message": "Assistant created successfully"}
Errors
| Status | Meaning | Body |
|---|---|---|
403 |
Creation quota reached — message is account-specific | |
500 |
Phone purchase failed | {"success":false,"message":"Failed to purchase phone number: <detail>"} |
500 |
Live platform write failed | {"success":false,"message":"Failed to create assistant in Cloud. Please try again."} |
422 |
Validation failed | {"message":"…","errors":{"field":["…"]}} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
Notes
- Validation messages include: "Assistant name is required.", "Assistant name cannot exceed 40 characters.", "Type must be either demo or production.", "Phone number must be in international format (e.g., +1234567890)."
- user_id is honoured only when the caller is an admin.
GET/assistants/{assistantId}
Retrieve one assistant
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). |
Response example 200
{"success": true, "data": {"id": 12, "assistant_id": "a1b2c3d4-…", "name": "Reception", "type": "production", "first_message": "…", "metadata": { … }, …}}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
PUT/assistants/{assistantId}
Update an assistant (re-renders the prompt, syncs live)
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). | |
name |
body | string | yes | no | required|string|max:40 |
assistants.name |
Assistant display name (max 40 characters). |
type |
body | string | no | yes | nullable|string|in:demo,production |
assistants.type |
Assistant type. |
user_id |
body | integer | no | yes | nullable|integer|exists:users,id |
assistants.user_id |
Owner assignment — honoured only for admin roles. |
template_id |
body | integer | no | yes | nullable|integer |
assistants.template_id |
Prompt template the assistant is built from. |
firstMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.first_message |
What the assistant says when answering. |
firstMessageMode |
body | string | no | yes | nullable|string|in:assistant-speaks-first,assistant-speaks-first-with-model-generated-message,assistant-waits-for-user |
assistants.first_message_mode |
Who speaks first on a call. |
firstMessageInterruptionsEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.first_message_interruptions_enabled |
Whether callers may interrupt the greeting. |
voicemailMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.voicemail_message |
Message left when voicemail is detected. |
endCallMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.end_call_message |
What the assistant says before hanging up. |
endCallPhrases |
body | array | no | yes | nullable|array |
assistants.end_call_phrases |
Caller phrases that end the call. |
voicemailDetection |
body | object | no | yes | nullable|array |
assistants.voicemail_detection |
Voicemail detection settings. |
voicemailDetection.enabled |
body | boolean | no | yes | nullable|boolean |
assistants.voicemail_detection |
|
voicemailDetection.beepDetection |
body | boolean | no | yes | nullable|boolean |
assistants.voicemail_detection |
|
voicemailDetection.silenceDuration |
body | integer | no | yes | nullable|integer|min:0 |
assistants.voicemail_detection |
|
voicemailDetection.greetingDuration |
body | integer | no | yes | nullable|integer|min:0 |
assistants.voicemail_detection |
|
maxDurationSeconds |
body | integer | no | yes | nullable|integer|min:10|max:43200 |
assistants.max_duration_seconds |
Hard cap on call length (10 s – 12 h). |
backgroundSound |
body | string | no | yes | nullable|string|in:office,coffee-shop,convention-hall,summit,traffic,rain,storm,wind,fire,crackling-fire,rain-on-roof,coastal-storm,howling-wind,seagulls,night-insects,fan,white-noise,off |
assistants.background_sound |
Ambience played behind the call ("none" is normalised to "off"). |
modelOutputInMessagesEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.model_output_in_messages_enabled |
|
clientMessages |
body | array | no | yes | nullable|array |
assistants.client_messages |
Message types forwarded to the browser widget. |
serverMessages |
body | array | no | yes | nullable|array |
assistants.server_messages |
Message types forwarded to the webhook. |
transportConfigurations |
body | array | no | yes | nullable|array |
assistants.transport_configurations |
Telephony transport settings (platform-managed keys). |
transcriber |
body | object | no | yes | nullable|array |
assistants.transcriber |
Speech-to-text settings. Engine selection is platform-managed. |
transcriber.language |
body | string | no | yes | nullable|string|size:2 |
assistants.transcriber |
Two-letter language code. |
transcriber.confidenceThreshold |
body | number | no | yes | nullable|numeric|min:0|max:1 |
assistants.transcriber |
|
transcriber.formatTurns |
body | boolean | no | yes | nullable|boolean |
assistants.transcriber |
|
model |
body | object | no | yes | nullable|array |
assistants.model |
Language-model settings. Model selection is platform-managed. |
model.messages |
body | array | no | yes | nullable|array |
assistants.model |
System prompt messages. |
model.maxTokens |
body | integer | no | yes | nullable|integer|min:1 |
assistants.model |
|
model.functionCall |
body | string | no | yes | nullable|string|in:none,auto |
assistants.model |
|
model.functionCallBehavior |
body | string | no | yes | nullable|string|in:auto,required |
assistants.model |
|
model.tools |
body | array | no | yes | nullable|array |
assistants.model |
Attached tools (managed via the tools picker). |
voice |
body | object | no | yes | nullable|array |
assistants.voice |
Voice settings. The voice itself comes from the chosen personality. |
voice.voiceId |
body | string | no | yes | nullable|string |
assistants.voice |
Set by the personality selection. |
voice.speed |
body | number | no | yes | nullable|numeric|min:0.25|max:4 |
assistants.voice |
Speaking speed multiplier. |
compliancePlan |
body | object | no | yes | nullable|array |
assistants.compliance_plan |
|
compliancePlan.recordingEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.compliance_plan |
|
compliancePlan.transcriptionEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.compliance_plan |
|
compliancePlan.dataRetentionDays |
body | integer | no | yes | nullable|integer|min:1 |
assistants.compliance_plan |
|
backgroundSpeechDenoisingPlan |
body | object | no | yes | nullable|array |
assistants.background_speech_denoising_plan |
|
backgroundSpeechDenoisingPlan.smartDenoising |
body | boolean | no | yes | nullable|boolean |
assistants.background_speech_denoising_plan |
|
backgroundSpeechDenoisingPlan.fourierDenoising |
body | boolean | no | yes | nullable|boolean |
assistants.background_speech_denoising_plan |
|
startSpeakingPlan |
body | object | no | yes | nullable|array |
assistants.start_speaking_plan |
Turn-taking behaviour before the assistant speaks. |
stopSpeakingPlan |
body | object | no | yes | nullable|array |
assistants.stop_speaking_plan |
Turn-taking behaviour when the caller interrupts. |
monitorPlan |
body | object | no | yes | nullable|array |
assistants.monitor_plan |
|
monitorPlan.listenEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.monitor_plan |
|
monitorPlan.controlEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.monitor_plan |
|
monitorPlan.websocketUrl |
body | string | no | yes | nullable|url |
assistants.monitor_plan |
|
keypadInputPlan |
body | object | no | yes | nullable|array |
assistants.keypad_input_plan |
|
keypadInputPlan.enabled |
body | boolean | no | yes | nullable|boolean |
assistants.keypad_input_plan |
|
keypadInputPlan.maxDigits |
body | integer | no | yes | nullable|integer|min:1|max:10 |
assistants.keypad_input_plan |
|
keypadInputPlan.terminateOnHash |
body | boolean | no | yes | nullable|boolean |
assistants.keypad_input_plan |
|
metadata |
body | object | no | yes | nullable|array |
assistants.metadata |
Business metadata injected into the prompt. |
metadata.company_name |
body | string | no | yes | nullable|string|max:255 |
assistants.metadata |
|
metadata.industry |
body | string | no | yes | nullable|string|max:255 |
assistants.metadata |
|
metadata.location |
body | string | no | yes | nullable|string|max:500 |
assistants.metadata |
|
metadata.services_products |
body | string | no | yes | nullable|string|max:1000 |
assistants.metadata |
|
metadata.sms_phone_number |
body | string | no | yes | nullable|string|max:20 |
assistants.metadata |
|
metadata.assistant_phone_number |
body | string | no | yes | nullable|string|max:20|regex:/^\+[1-9]\d{1,14}$/ |
assistants.metadata |
E.164 format. |
metadata.webhook_url |
body | string | no | yes | nullable|url|max:500 |
assistants.webhook_url |
Where call events are delivered. |
variableValues |
body | object | no | yes | nullable|array |
assistants.metadata |
Values for the template's custom variables. |
Request example
{"firstMessage": "Hello! You have reached Acme Dental.", "metadata": {"business_hours": "Mon–Fri 9–5"}}
Response example 200
{"success": true, "data": { … }, "message": "Assistant updated successfully"}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
422 |
Validation failed | {"message":"…","errors":{"field":["…"]}} |
403 |
Workspace permission denied | |
500 |
Live platform write failed | |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
DELETE/assistants/{assistantId}
Delete an assistant from the system and the live platform
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). |
Response example 200
{"success": true, "message": "Assistant deleted successfully"}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
500 |
Live platform delete failed | {"success":false,"message":"Failed to delete the assistant from the voice platform. Please try again."} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
GET/assistants/{assistantId}/stats
Call statistics for the dashboard
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). |
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
500 |
Statistics unavailable | {"success":false,"message":"Failed to get assistant statistics"} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
Notes
- Returns an aggregate statistics object for dashboard graphs; its exact shape is internal and may evolve.
GET/assistants/tools
Tools available to attach to an assistant
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
include |
query | array | no | yes | array or comma-separated tool ids |
Already-attached tool ids so their labels resolve even outside your scope. | |
owner_id |
query | integer | no | yes | integer — honoured for admin roles only |
List tools of the assistant's owner instead of the caller. |
Response example 200
{
"success": true,
"data": [{"value": "c3d4e5f6-…", "label": "Book appointment", "description": "…", "type": "function", "scope": "own", "locked": false}],
"locked_tool_ids": ["…"]
}
Errors
| Status | Meaning | Body |
|---|---|---|
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
Notes
- Global (platform) tools sort first with scope "global". locked entries cannot be detached.
GET/assistants/{assistantId}/advanced
Full merged configuration for the advanced editor
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). |
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
Notes
- Returns the assistant row plus the merged live configuration; the raw greeting/end-call text is preferred over rendered versions.
PUT/assistants/{assistantId}/advanced
Update everything — regular fields plus the advanced set
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). | |
name |
body | string | yes | no | required|string|max:40 |
assistants.name |
Assistant display name (max 40 characters). |
type |
body | string | no | yes | nullable|string|in:demo,production |
assistants.type |
Assistant type. |
user_id |
body | integer | no | yes | nullable|integer|exists:users,id |
assistants.user_id |
Owner assignment — honoured only for admin roles. |
template_id |
body | integer | no | yes | nullable|integer |
assistants.template_id |
Prompt template the assistant is built from. |
firstMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.first_message |
What the assistant says when answering. |
firstMessageMode |
body | string | no | yes | nullable|string|in:assistant-speaks-first,assistant-speaks-first-with-model-generated-message,assistant-waits-for-user |
assistants.first_message_mode |
Who speaks first on a call. |
firstMessageInterruptionsEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.first_message_interruptions_enabled |
Whether callers may interrupt the greeting. |
voicemailMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.voicemail_message |
Message left when voicemail is detected. |
endCallMessage |
body | string | no | yes | nullable|string|max:1000 |
assistants.end_call_message |
What the assistant says before hanging up. |
endCallPhrases |
body | array | no | yes | nullable|array |
assistants.end_call_phrases |
Caller phrases that end the call. |
voicemailDetection |
body | object | no | yes | nullable|array |
assistants.voicemail_detection |
Voicemail detection settings. |
voicemailDetection.enabled |
body | boolean | no | yes | nullable|boolean |
assistants.voicemail_detection |
|
voicemailDetection.beepDetection |
body | boolean | no | yes | nullable|boolean |
assistants.voicemail_detection |
|
voicemailDetection.silenceDuration |
body | integer | no | yes | nullable|integer|min:0 |
assistants.voicemail_detection |
|
voicemailDetection.greetingDuration |
body | integer | no | yes | nullable|integer|min:0 |
assistants.voicemail_detection |
|
maxDurationSeconds |
body | integer | no | yes | nullable|integer|min:10|max:43200 |
assistants.max_duration_seconds |
Hard cap on call length (10 s – 12 h). |
backgroundSound |
body | string | no | yes | nullable|string|in:office,coffee-shop,convention-hall,summit,traffic,rain,storm,wind,fire,crackling-fire,rain-on-roof,coastal-storm,howling-wind,seagulls,night-insects,fan,white-noise,off |
assistants.background_sound |
Ambience played behind the call ("none" is normalised to "off"). |
modelOutputInMessagesEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.model_output_in_messages_enabled |
|
clientMessages |
body | array | no | yes | nullable|array |
assistants.client_messages |
Message types forwarded to the browser widget. |
serverMessages |
body | array | no | yes | nullable|array |
assistants.server_messages |
Message types forwarded to the webhook. |
transportConfigurations |
body | array | no | yes | nullable|array |
assistants.transport_configurations |
Telephony transport settings (platform-managed keys). |
transcriber |
body | object | no | yes | nullable|array |
assistants.transcriber |
Speech-to-text settings. Engine selection is platform-managed. |
transcriber.language |
body | string | no | yes | nullable|string|size:2 |
assistants.transcriber |
Two-letter language code. |
transcriber.confidenceThreshold |
body | number | no | yes | nullable|numeric|min:0|max:1 |
assistants.transcriber |
|
transcriber.formatTurns |
body | boolean | no | yes | nullable|boolean |
assistants.transcriber |
|
model |
body | object | no | yes | nullable|array |
assistants.model |
Language-model settings. Model selection is platform-managed. |
model.messages |
body | array | no | yes | nullable|array |
assistants.model |
System prompt messages. |
model.maxTokens |
body | integer | no | yes | nullable|integer|min:1 |
assistants.model |
|
model.functionCall |
body | string | no | yes | nullable|string|in:none,auto |
assistants.model |
|
model.functionCallBehavior |
body | string | no | yes | nullable|string|in:auto,required |
assistants.model |
|
model.tools |
body | array | no | yes | nullable|array |
assistants.model |
Attached tools (managed via the tools picker). |
voice |
body | object | no | yes | nullable|array |
assistants.voice |
Voice settings. The voice itself comes from the chosen personality. |
voice.voiceId |
body | string | no | yes | nullable|string |
assistants.voice |
Set by the personality selection. |
voice.speed |
body | number | no | yes | nullable|numeric|min:0.25|max:4 |
assistants.voice |
Speaking speed multiplier. |
compliancePlan |
body | object | no | yes | nullable|array |
assistants.compliance_plan |
|
compliancePlan.recordingEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.compliance_plan |
|
compliancePlan.transcriptionEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.compliance_plan |
|
compliancePlan.dataRetentionDays |
body | integer | no | yes | nullable|integer|min:1 |
assistants.compliance_plan |
|
backgroundSpeechDenoisingPlan |
body | object | no | yes | nullable|array |
assistants.background_speech_denoising_plan |
|
backgroundSpeechDenoisingPlan.smartDenoising |
body | boolean | no | yes | nullable|boolean |
assistants.background_speech_denoising_plan |
|
backgroundSpeechDenoisingPlan.fourierDenoising |
body | boolean | no | yes | nullable|boolean |
assistants.background_speech_denoising_plan |
|
startSpeakingPlan |
body | object | no | yes | nullable|array |
assistants.start_speaking_plan |
Turn-taking behaviour before the assistant speaks. |
stopSpeakingPlan |
body | object | no | yes | nullable|array |
assistants.stop_speaking_plan |
Turn-taking behaviour when the caller interrupts. |
monitorPlan |
body | object | no | yes | nullable|array |
assistants.monitor_plan |
|
monitorPlan.listenEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.monitor_plan |
|
monitorPlan.controlEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.monitor_plan |
|
monitorPlan.websocketUrl |
body | string | no | yes | nullable|url |
assistants.monitor_plan |
|
keypadInputPlan |
body | object | no | yes | nullable|array |
assistants.keypad_input_plan |
|
keypadInputPlan.enabled |
body | boolean | no | yes | nullable|boolean |
assistants.keypad_input_plan |
|
keypadInputPlan.maxDigits |
body | integer | no | yes | nullable|integer|min:1|max:10 |
assistants.keypad_input_plan |
|
keypadInputPlan.terminateOnHash |
body | boolean | no | yes | nullable|boolean |
assistants.keypad_input_plan |
|
metadata |
body | object | no | yes | nullable|array |
assistants.metadata |
Business metadata injected into the prompt. |
metadata.company_name |
body | string | no | yes | nullable|string|max:255 |
assistants.metadata |
|
metadata.industry |
body | string | no | yes | nullable|string|max:255 |
assistants.metadata |
|
metadata.location |
body | string | no | yes | nullable|string|max:500 |
assistants.metadata |
|
metadata.services_products |
body | string | no | yes | nullable|string|max:1000 |
assistants.metadata |
|
metadata.sms_phone_number |
body | string | no | yes | nullable|string|max:20 |
assistants.metadata |
|
metadata.assistant_phone_number |
body | string | no | yes | nullable|string|max:20|regex:/^\+[1-9]\d{1,14}$/ |
assistants.metadata |
E.164 format. |
metadata.webhook_url |
body | string | no | yes | nullable|url|max:500 |
assistants.webhook_url |
Where call events are delivered. |
variableValues |
body | object | no | yes | nullable|array |
assistants.metadata |
Values for the template's custom variables. |
analysisPlan |
body | object | no | yes | nullable|array |
assistants.analysis_plan |
Post-call analysis settings. |
artifactPlan |
body | object | no | yes | nullable|array |
assistants.artifact_plan |
What the platform stores per call. |
artifactPlan.recording |
body | boolean | no | yes | nullable|boolean |
assistants.artifact_plan |
|
artifactPlan.transcript |
body | boolean | no | yes | nullable|boolean |
assistants.artifact_plan |
|
artifactPlan.summary |
body | boolean | no | yes | nullable|boolean |
assistants.artifact_plan |
|
artifactPlan.analysis |
body | boolean | no | yes | nullable|boolean |
assistants.artifact_plan |
|
backgroundDenoisingEnabled |
body | boolean | no | yes | nullable|boolean |
assistants.background_denoising_enabled |
|
personality_id |
body | integer | no | yes | nullable|integer|exists:personalities,id |
assistants.personality_id |
Switch the assistant's personality (name + voice bundle). |
reseller_id |
body | integer | no | yes | nullable|integer|exists:resellers,id |
assistants.reseller_id |
Admin-only reassignment. |
metadata.sms_notifications |
body | array | no | yes | nullable|array (items: nullable|string|max:30) |
assistants.metadata |
Phone numbers notified by SMS after calls. |
metadata.email_notifications |
body | array | no | yes | nullable|array (items: nullable|email|max:255) |
assistants.metadata |
Email addresses notified after calls. |
Response example 200
{"success": true, "message": "Assistant updated successfully", "data": { … }}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
422 |
Validation failed | {"message":"…","errors":{"field":["…"]}} |
500 |
Live platform write failed | {"success":false,"message":"Failed to update assistant in Cloud: <detail>"} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
Notes
- The live platform is updated first; the local mirror only saves when that succeeds — the two can never diverge silently.
GET/assistants/{assistantId}/embed
Embed widget configuration + ready-to-paste HTML
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). |
Response example 200
{"success": true, "data": {"assistant_id": "a1b2c3d4-…", "embed_config": { … }, "public_key": "…", "widget_script_url": "…", "api_url": "…", "embed_html": "<script …>"}}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
PUT/assistants/{assistantId}/embed
Save the widget configuration
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). | |
embed_config |
body | object | yes | no | required|array |
assistants.widget_embed_config |
Widget appearance/behaviour settings. |
embed_config.mode |
body | string | no | no | sometimes|in:chat |
assistants.widget_embed_config |
Response example 200
{"success": true, "data": {"assistant_id": "a1b2c3d4-…", "embed_config": { … }, "public_key": "…", "embed_html": "…"}}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
422 |
Validation failed | {"message":"…","errors":{"field":["…"]}} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
GET/assistants/prompt-templates/by-industry
Active prompt templates, optionally filtered by industry
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
industry |
query | string | no | yes | string — empty returns all active templates |
prompt_templates.industry |
Industry filter. |
Response example 200
{"success": true, "data": [{"id": 5, "name": "General Receptionist", "description": "…", "custom_fields": [], "is_default": true, "assistant_roles": [{"id": 1, "name": "Receptionist", "slug": "receptionist"}]}]}
Errors
| Status | Meaning | Body |
|---|---|---|
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
GET/assistants/{assistantId}/update-log
Configuration version history
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). | |
limit |
query | integer | no | no | integer, clamped 1–100 |
||
offset |
query | integer | no | no | integer, min 0 |
Response example 200
{"success": true, "data": [ …history entries… ], "meta": {"limit": 20, "offset": 0, "returned": 8}}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
502 |
History store unavailable | {"success":false,"message":"Could not load update log. Please try again later."} |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
Notes
- meta also carries an availability flag; when history storage is not configured the endpoint returns an empty data list.
POST/assistants/{assistantId}/update-log/{entryId}/restore
Restore a configuration from the version history
Parameters
| Name | In | Type | Required | Nullable | Rules | DB column | Description |
|---|---|---|---|---|---|---|---|
assistantId |
path | string | yes | no | uuid — the public assistant_id |
The assistant's public id (UUID). | |
entryId |
path | string | yes | no | history entry id |
The entry to restore, from the update-log listing. |
Response example 200
{"success": true, "message": "Assistant restored successfully", "data": { … }}
Errors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found, or outside your account scope | {"success":false,"message":"Assistant not found"} |
422 |
Entry cannot be restored — message carries the reason | |
502 |
History store unavailable | |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |