Create Agent
Create a new AI voice agent on the v1 API.
When to use this
Use this endpoint to create agents programmatically as part of an onboarding flow, template system, or multi-tenant setup. The request is scoped to the authenticated organization automatically.Before you begin
Fetch alanguage_id from List Languages and a voice_id from List Voices. Creating an agent does not publish its first version.
For an IVR Agent, set agent_type to IVR_Agent and provide ivr_menu. IVR is available to every workspace and is marked Beta in the dashboard. See Build IVR Agents before constructing the graph.
Minimal request
Onlyprompt_text is required. Send title, language_id, and voice_id as well so the agent is created the way you intend: when title is omitted the agent is named “Nexa Agent N”, when voice_id is omitted DialNexa uses its default voice, and when language_id is omitted the language comes from the voice (or the platform default, Hinglish). An omitted or unknown, non-retired llm_id is replaced by the default model rather than rejected, so read the saved values from the response. Add advanced speech, model, fallback, analysis, routing, and function settings only when the basic agent works:
Fallback STT, Boosted Keywords, And Post-Call Analysis
Usefallback_stt_enabled and stt_fallback_transcriber_id to configure fallback transcription on the first draft version. Fallback transcription is on by default: when you omit stt_fallback_transcriber_id, DialNexa picks a fallback suited to the agent’s languages, or leaves fallback off when none fits. If you send fallback_stt_enabled: true and none fits, the request returns 400. To choose one yourself, pick the ID from List Fallback Transcribers. The fallback transcriber ID must differ from transcriber_id. A requested fallback that cannot serve the agent’s languages is replaced with a compatible one; if none fits, fallback is turned off. Read stt_fallback_transcriber_id and fallback_stt_enabled from the response to see what was saved.
Use boosted_keywords when a cascaded agent uses Deepgram, Soniox or Sarvam (for Sarvam the terms are a best-effort hint) and important names or product terms are being misheard. Send a comma-separated string. Each term can contain letters, numbers, and spaces only, with up to 100 normalized terms, 50 characters per term, and 2,000 total characters.
Set boost_dynamic_variables to true when values from the test-call form or batch recipient row should also become recognition hints for that call. It defaults to false. DialNexa sanitizes those values, keeps the configured boosted_keywords first, and appends dynamic terms only while the combined limits permit them.
Pass post_call_analysis to define post-call fields at creation time and post_call_analysis_llm_id to choose the LLM that extracts them. The LLM is stored on those fields, so it has no effect when no post-call fields are sent. Both can be changed later with Update Agent.
Phone Numbers And Predictive Preprocessing
Create Agent does not take phone numbers. Numbers are linked to the agent, not to a version, and an agent needs a published version before a number can be attached. Publish the draft with Update Agent, then use Attach Agent Phone Number. Predictive preprocessing is on by default: the agent pre-generates likely next replies between turns, which suits cascaded agents with repeated, predictable scripts. Only DialNexa can turn it off, so sendingpredictive_preprocessing_enabled: false returns 403 Forbidden, except when DialNexa has already switched it off itself because the agent has functions configured or is a Conversational Flow agent. audio_cache_enabled follows the same rule: on by default, and false returns 403 Forbidden.
Validation Rules
The create request validates several fields before the draft is created.Workspace Model Availability
Choose the primary model from List LLMs and an enabled fallback from List Fallback LLMs using the same workspace key.Check Prompt Health
Create and update responses includeprompt_health for Single Prompt and Speech to Speech agents: status, prompt_tokens, limit_tokens, system_prompt_reserved_tokens, limited_by, and comment. Other types report not_applicable. Counts are estimates, with known dynamic defaults expanded and system instructions reserved. Read prompt size limits before changing models or adding large defaults.
The size limit is enforced only when publishing: creating an agent or updating a draft with an oversized prompt succeeds and reports over_ceiling, and publishing that version returns 400. Reduce the prompt or select a suitable model before publishing.
Enabled fallback LLM and STT choices must differ from their primary model or transcriber. An invalid pair returns 400. When functions are configured, the primary and fallback LLM must both support tool calling; a model that does not returns 400. The automatically provided End Call behavior does not count as a callable tool for predictive preprocessing or model tool-compatibility checks.
Create And Update Agent Field Validation
Both operations validate each item inagent_functions and post_call_analysis before saving. Invalid items return 400 Bad Request.
agent_functionsmust be an array. Each item requires a supportedtype. OptionaldisplayName(ordisplay_name) anddescriptionmust be strings;configmust be an object.- Post-call fields require a non-blank, unique
field_nameand one ofTEXT,SELECTOR,BOOLEAN,NUMBER, orDATETIME. UseTEXTinstead ofSTRINGandSELECTORinstead ofENUM. - A
SELECTORrequires at least one non-blank string choice inadditional_fields, normally an array such as["Resolved", "Escalated"].display_order, when supplied, must be a non-negative integer. llm_fallback_delay_msandreminder_message_intervalcannot be negative. A reminder interval of0disables reminders.ring_duration_secdefaults to30seconds and applies to outbound Plivo calls in every workspace. Numeric input is rounded and clamped to10through30:5saves as10,90as30, and22.6as23. Non-numeric input returns400. Read the saved value to verify it.end_call_on_hold_secaccepts10to60seconds. New agents use20when omitted or null. On update, null is ignored and the stored value is kept. Read End Call on Hold for behavior and testing.
Configure Primary And Secondary Languages
Uselanguage_id for the primary language and secondary_language_ids for up to three additional language IDs. Their order controls language hint priority. On update, send an empty secondary array to clear it.
Choose a voice that supports every selected language. Unsupported secondary choices can be dropped on save, so review the saved draft before publishing. For cascaded agents, publishing also requires a primary transcriber compatible with the complete language set. Speech to Speech agents do not use a separate transcriber. Use List Voice Language Options and List Voices to find compatible choices.
A Speech-to-Speech agent with secondary languages runs on Gemini Live, so its LLM must be a model whose provider is gemini in List LLMs. When llm_id is omitted, Create Agent picks a Gemini Speech-to-Speech model for it. A model from another provider returns 400. Update Agent applies the same rule. speech_to_speech_english_accent sets the accent of the agent’s English on Speech-to-Speech calls: indian (default), british or american.
The optional language_default_message accepts up to 500 characters for a response to an unsupported caller language, spoken with the primary-language voice. On update, null and an empty string are ignored and the stored message is kept. This API field is not an extra visible input in the dashboard language dialog.
Pronunciations
Sendpronunciations to control how the voice says specific words. It is an optional list; each item has original_word (the word as written), pronunciation_format (how the voice should say it) and an optional phonetic_pronunciation. Each value is a string of up to 128 characters. Pronunciations are applied by ElevenLabs and Cartesia voices, and only items with phonetic_pronunciation are applied; other voice providers ignore them.
Retired Language Models
GPT-4.1 Nano is retired. Choose current primary, fallback, and post-call extraction models when creating an agent or changing its model selection. A new retired-model selection returns400 with code LLM_RETIRED; publishing and dialing with a retired primary or enabled fallback are also refused. Read the saved model choices before testing.
Configure Emotion Tags
Setemotion_tags_enabled to true for emotional delivery on Cartesia Sonic 3/3.5 or Soniox TTS v2 voices. It defaults to false on create. Explicitly enabling it for an unsupported voice model returns 400; changing to an unsupported voice turns it off. On update, omission leaves the value unchanged unless that voice change disables it. See Emotion tags for testing guidance.
Configure Contact Memory
Contact memory lets your agents remember earlier calls with the same phone number. Each workspace keeps one memory per contact phone number, and every agent in the workspace shares it. Two fields control it, and both default tofalse:
Verify the result
Store the returnedid, confirm current_version.version_number is "0" (version numbers are returned as strings), then publish the draft with version_number: 0 (a JSON number) and is_published: true before placing a call. Responses can include additional fields not listed here; you can ignore them.
If the create request times out, list agents and search for the title before retrying. The contract does not currently publish an idempotency key.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Main instructions for the agent. Supports Handlebars template syntax ({{variable}}) for dynamic content. Must be valid Handlebars: malformed syntax causes errors at call time.
"Hello, how can I assist you today?"
Indicates whether voicemail detection is enabled
true
Hang up immediately when voicemail is detected instead of leaving a message
true
Show the lead's earlier successful calls in this workspace to the agent at the start of its next call with them
false
Save what was said on this agent's successful calls to lead memory, so agents in this workspace can use it on later calls with the same lead
false
Message spoken when voicemail is detected (only used when hangup_on_voicemail is false). Supports Handlebars template syntax ({{variable}}). Must be valid Handlebars.
"Hi, please call us back at your convenience."
Seconds of silence after which the call is automatically ended. Accepted range: 15 to 30 seconds. Must be at least 5 seconds above reminder_message_interval when reminders are configured.
15 <= x <= 3020
Seconds to wait during a sustained detected hold before ending a non-IVR call, 10 to 60. On create, omitted or null uses the default of 20.
10 <= x <= 6020
Maximum call duration in seconds before the call is forcibly ended. Maximum accepted: 3600 seconds for speech-to-speech agents, 5400 seconds for cascaded agents.
60 <= x <= 5400900
Ring timeout for outbound Plivo calls in every workspace, default 30 seconds. Numeric input is rounded to a whole second and clamped to 10 through 30: 5 saves as 10, 90 as 30, and 22.6 as 23. Non-numeric input is rejected. Read the saved value after updating. Has no effect on inbound or web calls.
30
Background sound identifier. When ambient_noise is on, calls play the built-in background track whatever value is set; set it to a value other than none for background_sound_volume to apply.
Volume of the background sound (0 to 2). Applied only when ambient_noise is true and background_sound is set to a value other than none.
0 <= x <= 2Ambient noise playback on the call. On by default when omitted.
Seconds to wait after the caller stops speaking, 0 to 1. Stored on the agent version; not applied to calls.
0 <= x <= 1Interruption sensitivity level (0 to 1). Stored on the agent version; not applied to calls.
0 <= x <= 1How eagerly the agent responds (0 to 1). Applied when the transcriber is Sarvam or Deepgram (Nova-2, Nova-3, Flux); Soniox agents ignore it. Defaults to 0.9 on create.
0 <= x <= 1When true, the agent plays short listening sounds ("uh-huh", "right") while the caller is still talking, so a long explanation is not met with silence. Independent of backchanneling (acknowledgements after the caller stops). Defaults to false.
How often a listening sound plays when one is possible, 0 (never) to 1 (every opportunity). Only used when listening_backchannel is true. Defaults to 0.8.
0 <= x <= 1Denoising mode. Only remove_noise turns denoising on; remove_noise_and_speech leaves it off. Web calls run without denoising.
remove_noise, remove_noise_and_speech Noise suppression strength 0 to 4 (higher is stronger). Defaults to 1 on create.
0 <= x <= 4Comma-separated list of words or phrases (e.g. "DialNexa, NexaFlow, customer success") used to bias the speech-to-text provider toward recognizing them correctly. This is a recognition bias, not a guarantee: it increases the likelihood of correctly transcribing uncommon names, brands, products, and domain vocabulary. Supported for Deepgram and Soniox transcribers (primary or fallback). Normalized to at most 100 unique terms (case-insensitive, duplicates removed, empty entries dropped) at the configuration boundary; empty/null means no boosted keywords.
2000When true, each call's dynamic-variable VALUES (from the test-call form or a batch-call CSV lead: names, cities, order IDs) are appended to boosted_keywords for that call, so per-call uncommon words get the same recognition bias. Values are sanitized first (punctuation stripped, over-long entries dropped) and never evict the agent's own configured terms, which always come first. Applies to Deepgram and Soniox only; defaults to false.
Seconds of silence before a reminder. Zero disables reminders. Keep at least five seconds below end_call_on_silence_sec when enabled.
x >= 010
Reminder text spoken after reminder_message_interval seconds of silence, up to 150 characters. When unset, a language-appropriate default is spoken.
150ID of the transcriber catalog entry
Run a fallback transcriber in parallel with the primary one. On create it defaults to on whenever DialNexa can pick a fallback transcriber for the agent's languages.
Fallback transcriber. When omitted on create, DialNexa picks one suited to the agent's languages; it must differ from transcriber_id.
Milliseconds to wait for primary STT after fallback finalizes first
x >= 0TTS audio caching for this agent. On by default; only DialNexa can turn it off, so sending false returns 403.
When true, the agent may write inline emotion tags (e.g. [sad], [excited]) that the voice performs. Supported only on Cartesia Sonic 3 and Soniox TTS v2 voices: turning it on for any other voice returns 400, and switching the voice to an unsupported one turns it off. Defaults to false.
ID of the folder this agent belongs to
"f5k2m8x1q9w3zp"
Type of the agent
Single_Prompt_Agent, Conversational_Flow_Agent, IVR_Agent "Single_Prompt_Agent"
Pipeline subtype for Single_Prompt_Agent. Cascaded = ASR→LLM→TTS pipeline. Speech_To_Speech = direct speech model. Null for Conversational_Flow_Agent.
Cascaded, Speech_To_Speech "Cascaded"
Title of the agent, 1 to 70 characters. When omitted, DialNexa names it "Nexa Agent N", where N is one more than the number of agents ever created in the workspace, deleted ones included.
1 - 70"Customer Support Agent"
Version title, 1 to 150 characters. If omitted on create, the first version is titled "Version 0".
1 - 150null
Description of the agent
"This agent handles customer support inquiries"
Timezone for the agent
"Asia/Kolkata"
ID of the primary LLM. When omitted, unknown, or a text model on a Speech to Speech agent, DialNexa uses its default model instead of returning an error; read the saved llm_id from the response.
"llm_A1B2C3D4E5F6G7"
ID of the primary language. When omitted, DialNexa uses the language of the voice's model, or the platform default (Hinglish) when the voice has no single language.
"lang_en_in"
Up to three additional language IDs in priority order. The chosen voice must support them. Send an empty array on update to clear.
3Optional message for an unsupported caller language, up to 500 characters, spoken in the primary language voice.
500ID of the voice the agent speaks with. Use GET /v1/voices to browse available voices. When omitted, DialNexa uses its default voice. Speech to Speech agents always get a voice compatible with their model.
"voice_abc123"
Static system instructions. Template variables such as {{customer_name}} are rejected with 400; use prompt_text for dynamic content.
"You are a helpful customer support agent named Sarah."
IVR menu tree for IVR_Agent type: {entry_node, nodes{...}} with per-node prompt text + digit->node edges. Prompt audio is rendered + cached at publish.
Opening message spoken by the agent at the start of the call. Supports Handlebars template syntax ({{variable}}). Must be valid Handlebars: malformed syntax causes errors at call time.
"Welcome to our service!"
IDs of the knowledge bases attached to this agent version
Maximum number of RAG chunks to fetch (1 to 10)
1 <= x <= 105
Minimum similarity score threshold for RAG results (0 to 1)
0 <= x <= 10.5
Default values for dynamic variables used in Handlebars templates. For call-transfer flows, the reserved key agent_transfer_destinations accepts a pipe-separated list of phone numbers (maximum 7). Each number must use a supported country code: US (+1) or India (+91), followed by exactly 10 digits (e.g. +11234567890|+919876543210).
Speech synthesis model for the selected voice. Each voice is tied to a specific provider, and only that provider's models are valid: submitting a model from a different provider will return 400. In most cases this field can be omitted; the recommended model for the chosen voice is applied automatically. For ElevenLabs voices, the supported model is eleven_flash_v2_5. To find supported models for a specific voice, call GET /v1/voices/{voice_id}/voice-models.
"vm4k2p9x7q1z3r"
Voice speed from 0.25 to 4. Values outside this range return 400. Soniox voices clamp it to 0.7 to 1.3. Speech-to-Speech agents apply it on OpenAI Realtime models only; Gemini Live ignores it.
0.25 <= x <= 41
Accent of the agent's English on Speech-to-Speech calls, for the whole call: indian (default), british or american.
indian, british, american Voice temperature from 0 to 2. Values outside this range return 400. Applied by ElevenLabs and Smallest voices only.
0 <= x <= 21
Voice volume from -10 to 10. Values outside this range return 400. Applied by Cartesia voices (a negative value plays as 1, maximum 2), Sarvam voices (below 0.1 plays as 1, maximum 3) and Speech-to-Speech agents; other providers ignore it. New agents default to -0.363.
-10 <= x <= 100
Voice pitch from -20 to 20. Values outside this range return 400. Applied by Sarvam voices only.
-20 <= x <= 200
LLM temperature from 0 to 2. Values outside this range return 400. Not applied to Speech-to-Speech agents.
0 <= x <= 21
Enable fallback LLM for this agent
false
Enable predictive preprocessing for this agent version. Not applied to Conversational Flow or Speech-to-Speech agents, or to web calls.
false
Milliseconds to wait before triggering the fallback LLM, a whole number of 0 or more.
x >= 0200
ID of the LLM to use as fallback.
"llm_A1B2C3D4E5F6G7"
Functions the agent can invoke during a call (e.g. end call, transfer, booking). Passed at create time; use PATCH to replace later.
Fields to extract after a call. Names must be unique and SELECTOR fields need choices. On update, replaces the full list for the draft version.
Agent identity (required for Conversational_Flow_Agent type on update)
"You are a helpful customer support agent named Sarah."
Agent background (required for Conversational_Flow_Agent type on update)
"You have 5 years of experience in customer support and specialize in helping customers with technical issues."
LLM used for post-call field extraction. Accepts a prefixed ID (for example llm_A1B2C3D4E5F6G7) or a raw ID; null clears it so the default extraction model (gpt-4o-mini) is used. It is stored on the version's existing post-call fields, so it has no effect when the version has none, and a replaced post_call_analysis list creates new fields without it, so they use the default extraction model. On create it is applied to the fields sent in the same request.
"llm_A1B2C3D4E5F6G7"
Pronunciation overrides. Applied by ElevenLabs and Cartesia voices; other providers ignore them. Only items with phonetic_pronunciation are applied.