Skip to content
Assistants

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 field

Update assistant

Try it in the API Explorer

Example request

Terminal
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.

Authorizationstringrequired

API 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)optional

Required when authenticating with an organization key — selects the tenant the request acts on. Omit with tenant keys.

Request

Path parameters

idstringrequired

The resource's UUID.

Body application/json · required

namestringoptional

Display name of the assistant (e.g., Sadie, Alex)

voiceIdstring (uuid)optional

The voice the assistant will use to speak to callers

transcriberIdstring (uuid)optional

The transcriber engine used to convert speech to text

modelIdstring (uuid)optional

The LLM model that powers the assistant's reasoning (e.g., GPT-4)

developerPromptstringoptional

Custom prompt section developers can inject into the default assistant prompt

parametersanyoptional

JSON object with dynamic values injected into developerPrompt (e.g., {{opening_hours}})

recordingEnabledbooleanoptional

Whether call recordings are enabled for this assistant

failoverNumberstringoptional

The phone number to transfer calls to if the assistant fails to respond (E.164 format)

failoverModebooleanoptional

Turn on or off the failover mode (in case it's enabled, the call will be forwarded to the failover number)

phoneNumberIdstring (uuid)optional

The phone number this assistant is assigned to

firstMessagestringoptional

The first message the assistant says when answering the call

toolIdsstring (uuid)[]optional

List of tool IDs the assistant can use

timezonestringoptional

Timezone of the business the assistant is handling calls for (e.g., Australia/Sydney)

addressstringoptional

Address of the business (used in prompt reasoning)

endOfCallMessagestringoptional

Final message before the call ends

phoneNumberPassThroughbooleanoptional

Whether the assistant can read and reference the caller's phone number if not anonymous

summaryPromptstringoptional

Prompt used to control how the assistant summarizes the call transcript

structuredDataPromptstringoptional

Prompt that helps classify calls based on the categories field

categoriesstring[]optional

List of categories the assistant can classify the call into (e.g., booking, edit)

promptIdstring (uuid)optional

The ID of the prompt associated with the assistant

chatPromptIdstring (uuid) | nulloptional

Optional chat/messaging prompt ID (type 'chat'); null clears it

whisperSummaryPromptIdstring (uuid) | nulloptional

Optional whisper-summary prompt ID (type 'whisper_summary'); null clears it

backgroundSoundbooleanoptional

Whether the assistant has a background sound

serverUrlstring | nulloptional

The webhook URL override for the assistant; null clears it

notificationsstring[]optional

Array of notification webhook URLs for the assistant

csatFeedbackbooleanoptional

Whether CSAT (Customer Satisfaction) feedback is enabled for this assistant

idleMessagesstring[]optional

Array of messages to send when the assistant detects the caller is idle

transferModestringoptional

Transfer mode behavior for escalations. Defaults to 'cold-transfer' if not provided.

callTimeLimitSecondsstring (integer) | integeroptional

Maximum call duration in seconds. Must be between 10 and 43200 (12 hours). Null means no limit.

idleTimeoutSecondsstring (integer) | integeroptional

Number of seconds to wait before considering the caller idle. Min 0 - Max 60.

idleMessageMaxSpokenCountstring (integer) | integeroptional

Maximum number of times idle messages can be spoken before ending the call. Min 0 - Max 10.

settingsanyoptional

Per-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) | integeroptional

Dial timeout in seconds for transfer attempts. Integer between 1 and 60. Merged into settings.transferDialTimeout; other settings keys are preserved.

warmWhisperDelaySecondsstring (integer) | integeroptional

Pause 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.

warmReturnMessagestringoptional

What 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.

taskDrivenModebooleanoptional

When 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> | nulloptional

IVR (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

200
successbooleanrequired
dataobjectoptional
Show 38 child properties
idstringrequired
namestringrequired
firstMessagestringrequired
voiceIdstring | nullrequired
transcriberIdstring | nullrequired
modelIdstring | nullrequired
developerPromptstring | nullrequired
parametersanyrequired
recordingEnabledbooleanrequired
failoverNumberstring | nullrequired
failoverModebooleanrequired
phoneNumberIdstring | nullrequired
createdAtstring (date-time) | string (date) | number | nullrequired
updatedAtstring (date-time) | string (date) | number | nullrequired
toolIdsstring[] | nullrequired
timezonestringrequired
addressstring | nullrequired
endOfCallMessagestring | nullrequired
phoneNumberPassThroughbooleanrequired
summaryPromptstring | nullrequired
structuredDataPromptstring | nullrequired
categoriesstring[] | nullrequired
promptIdstring | nullrequired
chatPromptIdstring | nulloptional
whisperSummaryPromptIdstring | nulloptional
backgroundSoundbooleanrequired
serverUrlstring | nullrequired
csatFeedbackbooleanrequired
notificationsanyrequired
idleMessagesanyrequired
transferModeanyrequired
callTimeLimitSecondsnumber | nullrequired
idleTimeoutSecondsnumber | nullrequired
idleMessageMaxSpokenCountnumber | nullrequired
settingsany | nullrequired
taskDrivenModeboolean | nulloptional
featureFlagsmap<string, boolean>optional
ivrSettingsany | nulloptional
metadataobjectoptional
Show 3 child properties
timestampstringrequired
versionstringrequired
pathstringoptional
400
successbooleanrequired
errorobjectoptional
Show 3 child properties
codeenumrequired
Allowed values:"VALIDATION_ERROR"
messagestringrequired
detailsobject[]optional
Show 2 item properties
fieldstringrequired
messagestringrequired
metadataobjectoptional
Show 3 child properties
timestampstringrequired
versionstringrequired
pathstringoptional
401
successbooleanrequired
errorobjectoptional
Show 2 child properties
codeenumrequired
Allowed values:"UNAUTHORIZED"
messagestringrequired
metadataobjectoptional
Show 3 child properties
timestampstringrequired
versionstringrequired
pathstringoptional
403
successbooleanrequired
errorobjectoptional
Show 2 child properties
codeenumrequired
Allowed values:"FORBIDDEN"
messagestringrequired
metadataobjectoptional
Show 3 child properties
timestampstringrequired
versionstringrequired
pathstringoptional
404
successbooleanrequired
errorobjectoptional
Show 2 child properties
codeenumrequired
Allowed values:"RESOURCE_NOT_FOUND"
messagestringrequired
metadataobjectoptional
Show 3 child properties
timestampstringrequired
versionstringrequired
pathstringoptional
500
successbooleanrequired
errorobjectoptional
Show 2 child properties
codeenumrequired
Allowed values:"INTERNAL_SERVER_ERROR"
messagestringrequired
metadataobjectoptional
Show 3 child properties
timestampstringrequired
versionstringrequired
pathstringoptional