Update an assistant
/assistants /{id}Update one or more fields of an assistant: only the fields you send change. Update the prompt, voice, first sentence, name or any other setting without touching the rest of the configuration.
Path parameters
idstringrequiredID of the assistant, as returned by
GET /assistants.
Request body
application/jsonpromptstringSystem prompt given to the LLM for the whole call: who the agent is, its goal and how to run the conversation. May contain {{variable}} placeholders, filled from the call's prompt_variables.
post_call_promptstringnullableInstructions the agent follows once the call has ended: who to email, when to text, what to post on Slack or Teams. Plain language, no template syntax. Empty or null means no post-call agent runs.
first_sentencestringThe agent's opening line, spoken word for word. Only used, and only kept, with first_sentence_mode 'static': with 'generated' or 'none' it is dropped and reads back empty. May contain {{variable}} placeholders; one without a value is left out.
first_sentence_mode"generated" | "static" | "none"How the agent opens the call. Default at creation: 'generated'.
"generated"The agent opens with a greeting it writes from the prompt. first_sentence is not used, and not kept.
"static"The agent opens with first_sentence, word for word.
"none"The agent says nothing first and waits for the other person to speak.
end_of_call_sentencestringSentence the agent says, without being interruptible, when it decides to end the call. Null or empty: the agent says a short default goodbye, only if it has not said goodbye already.
voiceobjectThe voice the agent speaks with (
GET /voiceslists them). Its language (seeGET /voices) is the language of the calls, unless voice_languages picks another one for a call. Omitted at creation: Revox's default voice, Jacqueline from Cartesia (id 9626c31c-bec5-4cca-baa8-f8ba9e84c8bc), which speaks English.voice_languagesarray of objectnullableExtra languages for a multilingual assistant, each with its own voice (any provider). A call picks one with a
languageentry in its prompt_variables (a language code such as "es", or a name such as "Spanish"); otherwise the phone number's country picks one, and failing that the call runs in the language ofvoice, which cannot be listed here. A changed voice is applied to the calls in that language that have not completed yet; a language still used by such a call cannot be removed.cartesia_dictionary_pronunciation_idstringnullableOptional Cartesia pronunciation dictionary ID to use for this assistant's calls. Set null to unlink it.
at least 1 character
llm_modelobjectThe LLM that drives the conversation. Defaults to
recommended(the model Revox currently recommends for voice agents) when omitted at creation.webhook_urlstringURL that receives a POST with the call and this assistant once the call is over, when it reaches completed or errored (not when it is cancelled). See Webhooks for the payload.
max_call_duration_secsnumberLongest a call may last, in seconds: the agent then says max_duration_end_message, if set, and hangs up. Default at creation: 300. Outbound calls are capped at 600.
max_duration_end_messagestringnullableOptional message the agent will say, without being interruptible, when the call reaches its max duration. Kept short so it fits inside the farewell buffer. If not set, the call ends silently.
at most 150 characters
structured_output_configarray of objectThe values to extract from each call (e.g. an email, a budget, a date). They land in structured_output of each call attempt, keyed by name.
structured_output_promptstringnullableCustom prompt for structured data extraction. If not provided, a default prompt is used. Available variables: {{transcript}}, {{call_direction}}, {{user_phone_number}}, {{agent_phone_number}}.
call_retry_configobjecttimezonestringIANA timezone of this assistant's calls, e.g. 'Europe/Paris' or 'America/Phoenix'. Every call runs in exactly one timezone: its calling windows and allowed days are read in it, the agent tells the date and offers calendar slots in it, and callbacks and extracted datetimes are interpreted in it. A campaign's
timezone, thenPOST /calltimezone, override it for their calls. Default when creating: 'Europe/Paris'. Replaces the deprecatedcall_retry_config.timezone.background_sound"audio/office.ogg" | "audio/waves.m4a"nullableAmbient background sound to play during the call. null/omitted disables it.
background_sound_volumenumberVolume of the ambient background sound (0 = silent, 1 = max).
0 to 1
thinking_soundenum (7 values)nullableAudio clip played while the agent prepares an answer. Null or omitted: none.
Possible values
"city-ambience.ogg""forest-ambience.ogg""office-ambience.ogg""crowded-room.ogg""keyboard-typing.ogg""keyboard-typing2.ogg""hold_music.ogg"thinking_sound_volumenumberVolume of the thinking sound (0 = silent, 1 = max).
0 to 1
thinking_sound_probabilitynumberProbability [0..1] that the thinking sound plays on any given turn; otherwise the agent is silent while thinking.
0 to 1
transfer_destinationsarray of objectnullableWhere calls can be transferred to when users ask to speak to a human. With a single entry the assistant always transfers there; with several, it picks one at transfer time by applying the routing rules written in the assistant's own prompt (which refer to the destination labels). Empty or null disables transfer.
at most 10 items
human_transfer_mode"warm" | "cold"nullableHow calls are transferred to transfer_destinations. Default: 'warm'. Ignored without transfer destinations.
"warm"The agent calls the destination first, briefs the person who answers on the call so far (see warm_transfer_summary_instructions), then puts the caller through.
"cold"The call is passed on at once, without a briefing (a SIP REFER: the phone carrier must allow it).
warm_transfer_summary_instructionsstringnullableWhen using warm transfer: extra instructions for the supervisor handoff summary. If null or empty, the API uses the product default briefing when the call is loaded for the agent.
warm_transfer_voice_speednumbernullableWhen using warm transfer: voice speed used only while the AI briefs the human colleague. Same range as voice.speed. Omit or null to brief at the assistant's voice speed.
0.6 to 1.5
voicemail_messagestringnullableIf set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. Left on the first attempt only (second dial of a double call). Takes the same {{variables}} as the prompt (e.g. "Hi {{first_name}}, this is Julie from Acme, please call us back.").
stt_contextobjectnullableAssistant-level speech-to-text context: structured
generalkey/value pairs plus a list of domainterms. Prompt-derived context is merged in without replacing existing entries.first_sentence_delay_msintegerDelay in milliseconds before speaking the first sentence. Default: 400.
≥ 0
hubspotobjectnullableHubSpot Meetings config. When set with at least one meeting link, the agent can read a rep's real availability and book the meeting natively in HubSpot during the call. Null when HubSpot is not connected.
slackobjectnullableSlack config. When set, the post-call agent can post to the listed channels after a call; whether it posts, and what it says, is decided by
post_call_prompt. Null when Slack is not connected.teamsobjectnullableMicrosoft Teams config. When set with at least one channel, the post-call agent can post to those channels when the post-call instructions ask for it. Null when Teams is not connected.
zohoobjectnullableZoho CRM config. When set, the post-call agent can upsert the prospect (keyed on phone) into the chosen module and attach a Note with the call summary. Null when Zoho is not connected.
custom_toolsarray of objectnullableCustom API tools the assistant can call during conversations. Each tool defines an HTTP endpoint with variable substitution. Null or empty when the assistant has none.
from_phone_numberstringnullableCaller ID of the calls placed with this assistant: a number of your organization (
GET /phone-numbers), in E.164 format. A French mobile number (06, 07) cannot be the caller ID of an automated call. Null: a Revox number chosen for each destination.precall_lookup_urlstringnullableInbound calls only. URL fetched over HTTP GET right before the call is answered, with
{{phone}}replaced by the caller's number in E.164 format (URL-encoded), to fill the{{variable}}placeholders the assistant declares. It answers either{"prompt_variables": {...}}or a flat JSON object whose top-level fields are the variables. The call is always answered: if the endpoint fails, takes more than 3 seconds, answers 404 or leaves a variable out, the missing variables are marked as not provided. Must be an http(s) URL containing{{phone}}. When null, no lookup is performed.at most 2000 characters
precall_lookup_headersarray of objectnullableHTTP headers sent with the pre-call lookup request, e.g. an API key. Null or empty when the endpoint needs none.
at most 10 items
namestringDisplay name of the assistant, shown in the dashboard and in call lists.
Response
200assistantAssistantunpatchedCallsNoticeobjectoptionalPresent when the update added prompt variables that some calls not yet completed have no value for: those calls keep the previous prompt. Absent otherwise.
Errors
- 400Invalid request: a field or parameter failed validation
{ "message"?: string, "error"?: string, "bodyErrors"?: {…} } - 404Not found in your organization
{ "error": string }
Error bodies carry an error (or message) string; a 400 adds bodyErrors.issues. See Errors.