Skip to content
Assistants

Update an assistant

PATCH/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

Request body

  • promptstring

    System 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_promptstringnullable

    Instructions 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_sentencestring

    The 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_sentencestring

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

  • voiceobject

    The voice the agent speaks with (GET /voices lists them). Its language (see GET /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 objectnullable

    Extra languages for a multilingual assistant, each with its own voice (any provider). A call picks one with a language entry 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 of voice, 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_idstringnullable

    Optional Cartesia pronunciation dictionary ID to use for this assistant's calls. Set null to unlink it.

    at least 1 character

  • llm_modelobject

    The LLM that drives the conversation. Defaults to recommended (the model Revox currently recommends for voice agents) when omitted at creation.

  • webhook_urlstring

    URL 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_secsnumber

    Longest 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_messagestringnullable

    Optional 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 object

    The 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_promptstringnullable

    Custom 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_configobject
  • timezonestring

    IANA 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, then POST /call timezone, override it for their calls. Default when creating: 'Europe/Paris'. Replaces the deprecated call_retry_config.timezone.

  • background_sound"audio/office.ogg" | "audio/waves.m4a"nullable

    Ambient background sound to play during the call. null/omitted disables it.

  • background_sound_volumenumber

    Volume of the ambient background sound (0 = silent, 1 = max).

    0 to 1

  • thinking_soundenum (7 values)nullable

    Audio 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_volumenumber

    Volume of the thinking sound (0 = silent, 1 = max).

    0 to 1

  • thinking_sound_probabilitynumber

    Probability [0..1] that the thinking sound plays on any given turn; otherwise the agent is silent while thinking.

    0 to 1

  • transfer_destinationsarray of objectnullable

    Where 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"nullable

    How 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_instructionsstringnullable

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

    When 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

  • ivr_navigation_enabledboolean

    Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus.

  • voicemail_messagestringnullable

    If 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_contextobjectnullable

    Assistant-level speech-to-text context: structured general key/value pairs plus a list of domain terms. Prompt-derived context is merged in without replacing existing entries.

  • first_sentence_delay_msinteger

    Delay in milliseconds before speaking the first sentence. Default: 400.

    ≥ 0

  • hubspotobjectnullable

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

  • slackobjectnullable

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

  • teamsobjectnullable

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

  • zohoobjectnullable

    Zoho 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 objectnullable

    Custom 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_numberstringnullable

    Caller 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_urlstringnullable

    Inbound 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 objectnullable

    HTTP 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

  • namestring

    Display name of the assistant, shown in the dashboard and in call lists.

Response

200
  • assistantAssistant
  • unpatchedCallsNoticeobjectoptional

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