PATCHhttps://core-api.heysadie.ai/assistants/{id}
id name voiceId transcriberId modelId developerPrompt parameters recordingEnabled failoverNumber failoverMode phoneNumberId firstMessage toolIds timezone address endOfCallMessage phoneNumberPassThrough summaryPrompt structuredDataPrompt categories promptId chatPromptId whisperSummaryPromptId backgroundSound serverUrl notifications csatFeedback idleMessages transferMode callTimeLimitSeconds idleTimeoutSeconds idleMessageMaxSpokenCount settings transferDialTimeout warmWhisperDelaySeconds warmReturnMessage taskDrivenMode ivrSettings success data createdAt updatedAt featureFlags metadata timestamp version path error code message details fieldUpdate assistant
Try it in the API ExplorerExample request
curl -X PATCH "https://core-api.heysadie.ai/assistants/ASSISTANT_ID" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"voiceId": "0195f1e2-0000-7000-8000-000000000000",
"transcriberId": "0195f1e2-0000-7000-8000-000000000000"
}'Authentication
Authenticate with an API key in the Authorization header using the ApiKey scheme — see Authentication for how keys work and where to get them.
AuthorizationstringrequiredAPI key in the ApiKey scheme: ApiKey YOUR_API_KEY. Tenant keys authorize their own tenant; organization keys can act on any tenant in the organization.
X-Tenant-Idstring (uuid)optionalRequired when authenticating with an organization key — selects the tenant the request acts on. Omit with tenant keys.
Request
Path parameters
idstringrequiredThe resource's UUID.
Body application/json · required
namestringoptionalDisplay name of the assistant (e.g., Sadie, Alex)
voiceIdstring (uuid)optionalThe voice the assistant will use to speak to callers
transcriberIdstring (uuid)optionalThe transcriber engine used to convert speech to text
modelIdstring (uuid)optionalThe LLM model that powers the assistant's reasoning (e.g., GPT-4)
developerPromptstringoptionalCustom prompt section developers can inject into the default assistant prompt
parametersanyoptionalJSON object with dynamic values injected into developerPrompt (e.g., {{opening_hours}})
recordingEnabledbooleanoptionalWhether call recordings are enabled for this assistant
failoverNumberstringoptionalThe phone number to transfer calls to if the assistant fails to respond (E.164 format)
failoverModebooleanoptionalTurn on or off the failover mode (in case it's enabled, the call will be forwarded to the failover number)
phoneNumberIdstring (uuid)optionalThe phone number this assistant is assigned to
firstMessagestringoptionalThe first message the assistant says when answering the call
toolIdsstring (uuid)[]optionalList of tool IDs the assistant can use
timezonestringoptionalTimezone of the business the assistant is handling calls for (e.g., Australia/Sydney)
addressstringoptionalAddress of the business (used in prompt reasoning)
endOfCallMessagestringoptionalFinal message before the call ends
phoneNumberPassThroughbooleanoptionalWhether the assistant can read and reference the caller's phone number if not anonymous
summaryPromptstringoptionalPrompt used to control how the assistant summarizes the call transcript
structuredDataPromptstringoptionalPrompt that helps classify calls based on the categories field
categoriesstring[]optionalList of categories the assistant can classify the call into (e.g., booking, edit)
promptIdstring (uuid)optionalThe ID of the prompt associated with the assistant
chatPromptIdstring (uuid) | nulloptionalOptional chat/messaging prompt ID (type 'chat'); null clears it
whisperSummaryPromptIdstring (uuid) | nulloptionalOptional whisper-summary prompt ID (type 'whisper_summary'); null clears it
backgroundSoundbooleanoptionalWhether the assistant has a background sound
serverUrlstring | nulloptionalThe webhook URL override for the assistant; null clears it
notificationsstring[]optionalArray of notification webhook URLs for the assistant
csatFeedbackbooleanoptionalWhether CSAT (Customer Satisfaction) feedback is enabled for this assistant
idleMessagesstring[]optionalArray of messages to send when the assistant detects the caller is idle
transferModestringoptionalTransfer mode behavior for escalations. Defaults to 'cold-transfer' if not provided.
callTimeLimitSecondsstring (integer) | integeroptionalMaximum call duration in seconds. Must be between 10 and 43200 (12 hours). Null means no limit.
idleTimeoutSecondsstring (integer) | integeroptionalNumber of seconds to wait before considering the caller idle. Min 0 - Max 60.
idleMessageMaxSpokenCountstring (integer) | integeroptionalMaximum number of times idle messages can be spoken before ending the call. Min 0 - Max 10.
settingsanyoptionalPer-assistant settings container. Currently holds conversationConfig; additional setting categories will be added here in the future. Structure: { conversationConfig: { endpointingPlan?: { mode?: "fixed"|"dynamic", minDelay?, maxDelay? }, turnDetectionPlan?: { timeout?, unlikelyThreshold? }, vadPlan?: { minSpeechDuration?, minSilenceDuration?, prefixPaddingDuration? }, interruptionPlan?: { minDuration? (0-5), minWords? (0-10) }, deliveryMode?: "none"|"emotion_tagging"|"expressive", expressiveOptions?: { disfluencies?: boolean, nonverbalSounds?: boolean | { laughing?, breathing?, sighing?, crying?, vocalizing?, mouthSounds?, reflexSounds? }, pace?: "slow"|"normal"|"fast", instructionsAppend?: string (max 2000) } | null, emotionTaggingEnabled?: boolean (legacy; superseded by deliveryMode) } }
transferDialTimeoutstring (integer) | integeroptionalDial timeout in seconds for transfer attempts. Integer between 1 and 60. Merged into settings.transferDialTimeout; other settings keys are preserved.
warmWhisperDelaySecondsstring (integer) | integeroptionalPause in seconds before the warm-transfer whisper plays to the supervisor. Integer between 0 and 30. Defaults to 0 when omitted. Merged into settings.warmWhisperDelaySeconds; other settings keys are preserved.
warmReturnMessagestringoptionalWhat the assistant says when a warm-return transfer goes unanswered and the caller comes back. Max 2000 characters. Merged into settings.warmReturnMessage; other settings keys are preserved. Send "" to restore the built-in wording. Set this to match whatever your server does when it receives supervisor_answered: false on the end-of-call report.
taskDrivenModebooleanoptionalWhen true, CoreProxy leaves {tool_instructions} empty and sends linked taskgroups/tasks as structured data to AgentSpawn. When false (default), the existing prompt pipeline runs unchanged.
ivrSettingsmap<string, any> | nulloptionalIVR (phone-menu) configuration for this assistant. Free-form JSON object; no inner structure is validated yet while the feature is in progress. IMPORTANT: this does NOT merge the way `settings` does — the object you send REPLACES the stored one entirely, so read the current value from GET /assistants/{id}, modify it, and send it back whole. Send null to clear it (null = no IVR configured). Omit the field to leave it unchanged.
Responses
successbooleanrequireddataobjectoptionalShow 38 child properties
idstringrequirednamestringrequiredfirstMessagestringrequiredvoiceIdstring | nullrequiredtranscriberIdstring | nullrequiredmodelIdstring | nullrequireddeveloperPromptstring | nullrequiredparametersanyrequiredrecordingEnabledbooleanrequiredfailoverNumberstring | nullrequiredfailoverModebooleanrequiredphoneNumberIdstring | nullrequiredcreatedAtstring (date-time) | string (date) | number | nullrequiredupdatedAtstring (date-time) | string (date) | number | nullrequiredtoolIdsstring[] | nullrequiredtimezonestringrequiredaddressstring | nullrequiredendOfCallMessagestring | nullrequiredphoneNumberPassThroughbooleanrequiredsummaryPromptstring | nullrequiredstructuredDataPromptstring | nullrequiredcategoriesstring[] | nullrequiredpromptIdstring | nullrequiredchatPromptIdstring | nulloptionalwhisperSummaryPromptIdstring | nulloptionalbackgroundSoundbooleanrequiredserverUrlstring | nullrequiredcsatFeedbackbooleanrequirednotificationsanyrequiredidleMessagesanyrequiredtransferModeanyrequiredcallTimeLimitSecondsnumber | nullrequiredidleTimeoutSecondsnumber | nullrequiredidleMessageMaxSpokenCountnumber | nullrequiredsettingsany | nullrequiredtaskDrivenModeboolean | nulloptionalfeatureFlagsmap<string, boolean>optionalivrSettingsany | nulloptionalmetadataobjectoptionalShow 3 child properties
timestampstringrequiredversionstringrequiredpathstringoptional400
successbooleanrequirederrorobjectoptionalShow 3 child properties
codeenumrequired"VALIDATION_ERROR"messagestringrequireddetailsobject[]optionalShow 2 item properties
fieldstringrequiredmessagestringrequiredmetadataobjectoptionalShow 3 child properties
timestampstringrequiredversionstringrequiredpathstringoptional401
successbooleanrequirederrorobjectoptionalShow 2 child properties
codeenumrequired"UNAUTHORIZED"messagestringrequiredmetadataobjectoptionalShow 3 child properties
timestampstringrequiredversionstringrequiredpathstringoptional403
successbooleanrequirederrorobjectoptionalShow 2 child properties
codeenumrequired"FORBIDDEN"messagestringrequiredmetadataobjectoptionalShow 3 child properties
timestampstringrequiredversionstringrequiredpathstringoptional404
successbooleanrequirederrorobjectoptionalShow 2 child properties
codeenumrequired"RESOURCE_NOT_FOUND"messagestringrequiredmetadataobjectoptionalShow 3 child properties
timestampstringrequiredversionstringrequiredpathstringoptional500
successbooleanrequirederrorobjectoptionalShow 2 child properties
codeenumrequired"INTERNAL_SERVER_ERROR"messagestringrequiredmetadataobjectoptionalShow 3 child properties
timestampstringrequiredversionstringrequiredpathstringoptional