Logo
Search
Docs

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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
assistantId path string yes no uuid — the public assistant_id The assistant's public id (UUID).

Errors

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
assistantId path string yes no uuid — the public assistant_id The assistant's public id (UUID).

Errors

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
401 Missing or invalid bearer token
403 Feature assistants not enabled for the account

GET/assistants/{assistantId}/update-log

Configuration version history

Parameters

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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

NameInTypeRequiredNullableRulesDB columnDescription
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

StatusMeaningBody
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