V2 update assistant
PUT
https://app.sulus.ai/api/v2/assistants/{assistantId}
Update through the layered engine
Authentication
Send a bearer token created on your dashboard's Developer page:
Authorization: Bearer <YOUR_API_KEY>
Path parameters
assistantId
string
Required
The assistant's public id (UUID).
Validation:
uuid — the public assistant_idRequest body
base_config_id
integer
Optional
Nullable
The layered base configuration; may be derived from a template instead.
Validation:
required_without_all:prompt_template_id,industry_template_id|nullable|integer|exists:assistant_base_configs,idStored in
assistants.base_config_idname
string
Required
Validation:
required|string|max:40Stored in
assistants.nametype
string
Optional
Nullable
Validation:
nullable|string|in:demo,productionStored in
assistants.typelayer2_key
string
Optional
Nullable
Layer-2 preset key.
Validation:
nullable|string|max:64prompt_template_id
integer
Optional
Nullable
Validation:
nullable|integer|exists:prompt_templates,idStored in
assistants.template_idindustry_template_id
integer
Optional
Nullable
Validation:
nullable|integer|exists:industry_templates,idsystem_prompt
string
Optional
Nullable
Free-form system prompt override.
Validation:
nullable|stringStored in
assistants.modelfirst_message
string
Optional
Nullable
Validation:
nullable|string (firstMessage also accepted)Stored in
assistants.first_messageend_call_message
string
Optional
Nullable
Validation:
nullable|string (endCallMessage also accepted)Stored in
assistants.end_call_messageserver_url
string
Optional
Nullable
Webhook for call events.
Validation:
nullable|string|urlStored in
assistants.webhook_urlpersonality_id
integer
Optional
Nullable
Validation:
nullable|integer|exists:personalities,idStored in
assistants.personality_idmetadata
object
Optional
Nullable
Validation:
nullable|arrayStored in
assistants.metadatavariable_values
object
Optional
Nullable
Template variable values.
Validation:
nullable|arrayStored in
assistants.metadataErrors
| Status | Meaning | Body |
|---|---|---|
404 |
Assistant not found | {"success":false,"message":"Assistant not found"} |
422 |
Not a v2 assistant | {"success":false,"message":"Cannot update: no base_config_id (assistant was not created via v2)."} |
500 |
Live platform write failed | |
422 |
Validation failed | |
401 |
Missing or invalid bearer token | |
403 |
Feature assistants not enabled for the account |
Notes
- name is sometimes|string|max:40 on update (optional; never empty when present).
- The response `coreData` mirrors the live platform configuration; its `voice`/`model`/`transcriber` provider-selection sub-keys and internal bookkeeping are platform-managed and excluded from this example.
curl --request PUT \
--url https://app.sulus.ai/api/v2/assistants/{assistantId} \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"base_config_id": 3,
"name": "Reception",
"type": "production",
"layer2_key": "concise-efficient",
"first_message": "Thank you for calling {{companyName}}, this is {{personalityName}}. How can I help you today?",
"end_call_message": "Thank you for calling {{companyName}}, have a great day!",
"server_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"personality_id": 12,
"metadata": {
"company_name": "Acme Dental",
"industry": "Dental"
},
"variable_values": {
"companyName": "Acme Dental",
"industry": "Dental",
"personalityName": "Sarah"
}
}'
import requests
url = "https://app.sulus.ai/api/v2/assistants/{assistantId}"
headers = {"Authorization": "Bearer <YOUR_API_KEY>"}
payload = {
"base_config_id": 3,
"name": "Reception",
"type": "production",
"layer2_key": "concise-efficient",
"first_message": "Thank you for calling {{companyName}}, this is {{personalityName}}. How can I help you today?",
"end_call_message": "Thank you for calling {{companyName}}, have a great day!",
"server_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"personality_id": 12,
"metadata": {
"company_name": "Acme Dental",
"industry": "Dental"
},
"variable_values": {
"companyName": "Acme Dental",
"industry": "Dental",
"personalityName": "Sarah"
}
}
response = requests.put(url, json=payload, headers=headers)
print(response.json())
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
url := "https://app.sulus.ai/api/v2/assistants/{assistantId}"
payload := strings.NewReader(`{
"base_config_id": 3,
"name": "Reception",
"type": "production",
"layer2_key": "concise-efficient",
"first_message": "Thank you for calling {{companyName}}, this is {{personalityName}}. How can I help you today?",
"end_call_message": "Thank you for calling {{companyName}}, have a great day!",
"server_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"personality_id": 12,
"metadata": {
"company_name": "Acme Dental",
"industry": "Dental"
},
"variable_values": {
"companyName": "Acme Dental",
"industry": "Dental",
"personalityName": "Sarah"
}
}`)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <YOUR_API_KEY>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
Response
200
{
"success": true,
"message": "Assistant updated successfully",
"data": {
"id": 42,
"name": "Reception",
"user_id": 17,
"created_by": 5,
"reseller_id": "3",
"workspace_id": 9,
"template_id": 5,
"personality_id": 12,
"base_config_id": 3,
"type": "production",
"phone_number": "+14155550142",
"phone_number_id": "b2c3d4e5-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
"webhook_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"metadata": {
"company_name": "Acme Dental",
"industry": "Dental",
"location": "Austin, TX",
"services_products": "General and cosmetic dentistry, teeth whitening, emergency dental care",
"country": "United States",
"assistant_phone_number": "+14155550142",
"webhook_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"personality": "Sarah",
"personality_id": 12,
"user_id": 17,
"user": "Jordan Lee",
"type": "production",
"available24_7": false,
"standard_hours": "Mon-Fri 9:00 AM - 5:00 PM",
"business_hours": {
"monday": "9:00 AM - 5:00 PM",
"tuesday": "9:00 AM - 5:00 PM",
"wednesday": "9:00 AM - 5:00 PM",
"thursday": "9:00 AM - 5:00 PM",
"friday": "9:00 AM - 5:00 PM",
"saturday": "Closed",
"sunday": "Closed"
},
"always_say": [
"We look forward to seeing you!"
],
"never_say": [
"I don't know, let me transfer you"
],
"pronunciation": [
{
"word": "Sulus",
"soundsLike": "SOO-luss"
}
],
"spam_handling": "end_call",
"variable_values": {
"companyName": "Acme Dental",
"industry": "Dental",
"personalityName": "Sarah"
},
"sms_notifications": [
"+14155550199"
],
"email_notifications": [
"[email protected]"
],
"created_at": "2026-01-15T10:22:03.000000Z",
"updated_at": "2026-07-28T14:05:41.000000Z"
},
"widget_embed_config": null,
"transcriber": {
"language": "en",
"confidenceThreshold": 0.4,
"formatTurns": true
},
"model": {
"messages": [
{
"role": "system",
"content": "You are Sarah, the AI voice receptionist for Acme Dental. Greet callers warmly, answer questions about services and hours, and offer to book an appointment or transfer to the front desk as needed."
}
],
"maxTokens": 300,
"toolIds": [
"c3d4e5f6-7a8b-49c0-8d1e-2f3a4b5c6d7e"
],
"functionCall": "auto"
},
"voice": {
"voiceId": "sarah-professional-01",
"speed": 1
},
"first_message": "Thank you for calling Acme Dental, this is Sarah. How can I help you today?",
"first_message_raw": "Thank you for calling {{companyName}}, this is {{personalityName}}. How can I help you today?",
"first_message_interruptions_enabled": true,
"first_message_mode": "assistant-speaks-first",
"voicemail_detection": {
"enabled": true,
"beepDetection": true,
"silenceDuration": 10,
"greetingDuration": 15
},
"client_messages": [
"transcript",
"status-update"
],
"server_messages": [
"end-of-call-report",
"status-update"
],
"max_duration_seconds": 1800,
"background_sound": "office",
"background_denoising_enabled": true,
"model_output_in_messages_enabled": false,
"transport_configurations": [],
"observability_plan": null,
"credential_ids": [],
"credentials": [],
"hooks": [],
"voicemail_message": "Please leave a message after the tone and we'll call you back.",
"end_call_message": "Thank you for calling Acme Dental, have a great day!",
"end_call_message_raw": "Thank you for calling {{companyName}}, have a great day!",
"end_call_phrases": [
"goodbye",
"that's all, thank you"
],
"compliance_plan": {
"recordingEnabled": true,
"transcriptionEnabled": true,
"dataRetentionDays": 365
},
"background_speech_denoising_plan": {
"smartDenoising": true,
"fourierDenoising": false
},
"analysis_plan": null,
"artifact_plan": {
"recording": true,
"transcript": true,
"summary": true,
"analysis": false
},
"start_speaking_plan": {
"initialDelayMs": 400,
"backgroundSoundVolume": 0.2
},
"stop_speaking_plan": {
"initialDelayMs": 0,
"backgroundSoundVolume": 0.1
},
"monitor_plan": {
"listenEnabled": false,
"controlEnabled": false,
"websocketUrl": null
},
"keypad_input_plan": {
"enabled": false,
"maxDigits": 4,
"terminateOnHash": true
},
"created_at": "2026-01-15T10:22:03.000000Z",
"updated_at": "2026-07-28T14:05:41.000000Z",
"vapi_assistant_id": "9f8e7d6c-5b4a-4c3d-8e2f-1a2b3c4d5e6f",
"assistant_id": "9f8e7d6c-5b4a-4c3d-8e2f-1a2b3c4d5e6f",
"coreData": {
"id": "9f8e7d6c-5b4a-4c3d-8e2f-1a2b3c4d5e6f",
"name": "Reception",
"firstMessage": "Thank you for calling Acme Dental, this is Sarah. How can I help you today?",
"voicemailMessage": "Please leave a message after the tone and we'll call you back.",
"endCallMessage": "Thank you for calling Acme Dental, have a great day!",
"endCallPhrases": [
"goodbye",
"that's all, thank you"
],
"maxDurationSeconds": 1800,
"backgroundSound": "office",
"voice": {
"voiceId": "sarah-professional-01",
"speed": 1
},
"model": {
"messages": [
{
"role": "system",
"content": "You are Sarah, the AI voice receptionist for Acme Dental. Greet callers warmly, answer questions about services and hours, and offer to book an appointment or transfer to the front desk as needed."
}
],
"maxTokens": 300,
"toolIds": [
"c3d4e5f6-7a8b-49c0-8d1e-2f3a4b5c6d7e"
]
},
"transcriber": {
"language": "en",
"confidenceThreshold": 0.4,
"formatTurns": true
},
"server": {
"url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents"
},
"metadata": {
"company_name": "Acme Dental",
"industry": "Dental",
"location": "Austin, TX",
"services_products": "General and cosmetic dentistry, teeth whitening, emergency dental care",
"country": "United States",
"assistant_phone_number": "+14155550142",
"webhook_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"personality": "Sarah",
"personality_id": 12,
"user_id": 17,
"user": "Jordan Lee",
"type": "production",
"available24_7": false,
"standard_hours": "Mon-Fri 9:00 AM - 5:00 PM",
"business_hours": {
"monday": "9:00 AM - 5:00 PM",
"tuesday": "9:00 AM - 5:00 PM",
"wednesday": "9:00 AM - 5:00 PM",
"thursday": "9:00 AM - 5:00 PM",
"friday": "9:00 AM - 5:00 PM",
"saturday": "Closed",
"sunday": "Closed"
},
"always_say": [
"We look forward to seeing you!"
],
"never_say": [
"I don't know, let me transfer you"
],
"pronunciation": [
{
"word": "Sulus",
"soundsLike": "SOO-luss"
}
],
"spam_handling": "end_call",
"variable_values": {
"companyName": "Acme Dental",
"industry": "Dental",
"personalityName": "Sarah"
},
"sms_notifications": [
"+14155550199"
],
"email_notifications": [
"[email protected]"
],
"created_at": "2026-01-15T10:22:03.000000Z",
"updated_at": "2026-07-28T14:05:41.000000Z"
}
},
"base_config_name": "Standard Receptionist Base"
}
}
Response — PUT
/v2/assistants/{assistantId}
200
{
"success": true,
"message": "Assistant updated successfully",
"data": {
"id": 42,
"name": "Reception",
"user_id": 17,
"created_by": 5,
"reseller_id": "3",
"workspace_id": 9,
"template_id": 5,
"personality_id": 12,
"base_config_id": 3,
"type": "production",
"phone_number": "+14155550142",
"phone_number_id": "b2c3d4e5-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
"webhook_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"metadata": {
"company_name": "Acme Dental",
"industry": "Dental",
"location": "Austin, TX",
"services_products": "General and cosmetic dentistry, teeth whitening, emergency dental care",
"country": "United States",
"assistant_phone_number": "+14155550142",
"webhook_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"personality": "Sarah",
"personality_id": 12,
"user_id": 17,
"user": "Jordan Lee",
"type": "production",
"available24_7": false,
"standard_hours": "Mon-Fri 9:00 AM - 5:00 PM",
"business_hours": {
"monday": "9:00 AM - 5:00 PM",
"tuesday": "9:00 AM - 5:00 PM",
"wednesday": "9:00 AM - 5:00 PM",
"thursday": "9:00 AM - 5:00 PM",
"friday": "9:00 AM - 5:00 PM",
"saturday": "Closed",
"sunday": "Closed"
},
"always_say": [
"We look forward to seeing you!"
],
"never_say": [
"I don't know, let me transfer you"
],
"pronunciation": [
{
"word": "Sulus",
"soundsLike": "SOO-luss"
}
],
"spam_handling": "end_call",
"variable_values": {
"companyName": "Acme Dental",
"industry": "Dental",
"personalityName": "Sarah"
},
"sms_notifications": [
"+14155550199"
],
"email_notifications": [
"[email protected]"
],
"created_at": "2026-01-15T10:22:03.000000Z",
"updated_at": "2026-07-28T14:05:41.000000Z"
},
"widget_embed_config": null,
"transcriber": {
"language": "en",
"confidenceThreshold": 0.4,
"formatTurns": true
},
"model": {
"messages": [
{
"role": "system",
"content": "You are Sarah, the AI voice receptionist for Acme Dental. Greet callers warmly, answer questions about services and hours, and offer to book an appointment or transfer to the front desk as needed."
}
],
"maxTokens": 300,
"toolIds": [
"c3d4e5f6-7a8b-49c0-8d1e-2f3a4b5c6d7e"
],
"functionCall": "auto"
},
"voice": {
"voiceId": "sarah-professional-01",
"speed": 1
},
"first_message": "Thank you for calling Acme Dental, this is Sarah. How can I help you today?",
"first_message_raw": "Thank you for calling {{companyName}}, this is {{personalityName}}. How can I help you today?",
"first_message_interruptions_enabled": true,
"first_message_mode": "assistant-speaks-first",
"voicemail_detection": {
"enabled": true,
"beepDetection": true,
"silenceDuration": 10,
"greetingDuration": 15
},
"client_messages": [
"transcript",
"status-update"
],
"server_messages": [
"end-of-call-report",
"status-update"
],
"max_duration_seconds": 1800,
"background_sound": "office",
"background_denoising_enabled": true,
"model_output_in_messages_enabled": false,
"transport_configurations": [],
"observability_plan": null,
"credential_ids": [],
"credentials": [],
"hooks": [],
"voicemail_message": "Please leave a message after the tone and we'll call you back.",
"end_call_message": "Thank you for calling Acme Dental, have a great day!",
"end_call_message_raw": "Thank you for calling {{companyName}}, have a great day!",
"end_call_phrases": [
"goodbye",
"that's all, thank you"
],
"compliance_plan": {
"recordingEnabled": true,
"transcriptionEnabled": true,
"dataRetentionDays": 365
},
"background_speech_denoising_plan": {
"smartDenoising": true,
"fourierDenoising": false
},
"analysis_plan": null,
"artifact_plan": {
"recording": true,
"transcript": true,
"summary": true,
"analysis": false
},
"start_speaking_plan": {
"initialDelayMs": 400,
"backgroundSoundVolume": 0.2
},
"stop_speaking_plan": {
"initialDelayMs": 0,
"backgroundSoundVolume": 0.1
},
"monitor_plan": {
"listenEnabled": false,
"controlEnabled": false,
"websocketUrl": null
},
"keypad_input_plan": {
"enabled": false,
"maxDigits": 4,
"terminateOnHash": true
},
"created_at": "2026-01-15T10:22:03.000000Z",
"updated_at": "2026-07-28T14:05:41.000000Z",
"vapi_assistant_id": "9f8e7d6c-5b4a-4c3d-8e2f-1a2b3c4d5e6f",
"assistant_id": "9f8e7d6c-5b4a-4c3d-8e2f-1a2b3c4d5e6f",
"coreData": {
"id": "9f8e7d6c-5b4a-4c3d-8e2f-1a2b3c4d5e6f",
"name": "Reception",
"firstMessage": "Thank you for calling Acme Dental, this is Sarah. How can I help you today?",
"voicemailMessage": "Please leave a message after the tone and we'll call you back.",
"endCallMessage": "Thank you for calling Acme Dental, have a great day!",
"endCallPhrases": [
"goodbye",
"that's all, thank you"
],
"maxDurationSeconds": 1800,
"backgroundSound": "office",
"voice": {
"voiceId": "sarah-professional-01",
"speed": 1
},
"model": {
"messages": [
{
"role": "system",
"content": "You are Sarah, the AI voice receptionist for Acme Dental. Greet callers warmly, answer questions about services and hours, and offer to book an appointment or transfer to the front desk as needed."
}
],
"maxTokens": 300,
"toolIds": [
"c3d4e5f6-7a8b-49c0-8d1e-2f3a4b5c6d7e"
]
},
"transcriber": {
"language": "en",
"confidenceThreshold": 0.4,
"formatTurns": true
},
"server": {
"url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents"
},
"metadata": {
"company_name": "Acme Dental",
"industry": "Dental",
"location": "Austin, TX",
"services_products": "General and cosmetic dentistry, teeth whitening, emergency dental care",
"country": "United States",
"assistant_phone_number": "+14155550142",
"webhook_url": "https://automations.sulus.ai/webhook/lhg-live-demo-agents",
"personality": "Sarah",
"personality_id": 12,
"user_id": 17,
"user": "Jordan Lee",
"type": "production",
"available24_7": false,
"standard_hours": "Mon-Fri 9:00 AM - 5:00 PM",
"business_hours": {
"monday": "9:00 AM - 5:00 PM",
"tuesday": "9:00 AM - 5:00 PM",
"wednesday": "9:00 AM - 5:00 PM",
"thursday": "9:00 AM - 5:00 PM",
"friday": "9:00 AM - 5:00 PM",
"saturday": "Closed",
"sunday": "Closed"
},
"always_say": [
"We look forward to seeing you!"
],
"never_say": [
"I don't know, let me transfer you"
],
"pronunciation": [
{
"word": "Sulus",
"soundsLike": "SOO-luss"
}
],
"spam_handling": "end_call",
"variable_values": {
"companyName": "Acme Dental",
"industry": "Dental",
"personalityName": "Sarah"
},
"sms_notifications": [
"+14155550199"
],
"email_notifications": [
"[email protected]"
],
"created_at": "2026-01-15T10:22:03.000000Z",
"updated_at": "2026-07-28T14:05:41.000000Z"
}
},
"base_config_name": "Standard Receptionist Base"
}
}