namestringrequired
Display name for the agent.
system_promptstringrequired
LLM system prompt that defines the agent's persona and behavior.
voice_idstringrequired
Voice to use for TTS. Must be a valid voice ID from GET /voices.
messaging_system_promptstringoptional
Optional prompt for text conversations. WhatsApp messages, SMS and the chat API use it in place of system_prompt. Calls, WhatsApp calls included, always use system_prompt. Leave it out to use system_prompt everywhere.
first_messagestringoptional
Greeting the agent says when a call connects. If omitted the agent waits for the user to speak first.
languagestringoptional
Language for STT and TTS (e.g. english, french). Default: english.
dialect_stylestringoptional
Dialect style override (e.g. formal, local). Provider-specific.
metadataobjectoptional
Arbitrary key-value pairs stored with the agent.
llm_modelstringoptional
LLM model ID — a public catalog name from GET /api/v1/models (for example claude-sonnet-4-6, gpt-4o, or aethex-default). Omit it or send an empty string to use the platform default. Responses always echo the public catalog name; the internal provider routing behind it is never exposed.
temperaturenumberoptional
Sampling temperature (0.0–2.0). Lower values produce more deterministic responses. Ignored for OpenAI's reasoning models (the o-series and the gpt-5 family), which take no temperature.
max_tokensintegeroptional
Maximum tokens per LLM response, an integer from 1 to 8192. Omit or send null for the platform default (configurable via AETHEX_LLM_MAX_COMPLETION_TOKENS, 512 unless the deployment overrides it).
max_context_tokensintegeroptional
Maximum LLM context window for this agent (1024–262144 tokens). Null uses the platform default.
frequency_penaltynumberoptional
LLM frequency penalty between -2.0 and 2.0. Omitting or sending null falls back to the Aethex platform default of 0.4 (not a provider-native default).
presence_penaltynumberoptional
LLM presence penalty between -2.0 and 2.0. Omitting or sending null falls back to the Aethex platform default of 0.9 (not a provider-native default).
max_duration_secondsintegeroptional
Hard cap on call duration in seconds (30–3,600). Call ends automatically when reached.
silence_timeout_secondsintegeroptional
End the call if the user is silent for this many seconds. Null disables.
max_turnsintegeroptional
Hang up when the caller begins their Nth user turn, where N is this value (1–1000); that turn is not answered. Null inherits the platform default (no turn cap).
history_truncation_enabledbooleanoptional
Drop older turns once the conversation grows long. Null inherits the platform default; the platform overrides false on models it serves itself.
history_max_turnsintegeroptional
Turn count that triggers truncation (1–200) — not the number of turns retained. Null inherits the platform default.
sms_message_idsstring[]optional
Which of your text messages this agent may send, by id. Omit or send [] for every active message. Past about 8 choices an agent picks between them less reliably — advice, not a limit.
sms_max_sends_per_messageintegeroptional
How many times one call may send the same message (1–30). Null inherits the default of 2. The call's own ceiling still bounds the total.
interruption_enabledbooleanoptional
Allow the caller to interrupt the agent mid-response (default: true).
barge_in_min_speech_secsnumberoptional
How long, in seconds, the caller must keep talking over the agent before it stops to listen, from 0 to 3. A shorter sound, such as a cough or a quick "mm-hmm", no longer cuts the agent off, and the agent does not respond to it. While the agent is silent, speech starts the caller's turn at once; on some models a reply that is about to play is protected the same way, so a short sound just before it does not cancel it. Null uses the platform default of 0.6; 0 stops the agent at the first speech it hears. A change applies from the agent's next call.
turn_eagernessstringoptional
How aggressively the agent claims its turn: patient, normal, or eager. Null uses the platform default.
end_call_enabledbooleanoptional
Whether the agent may end the call itself (default: true).
end_call_phrasesstring[]optional
Phrases the caller may say to end the call. When the agent hears any of them, it says a brief goodbye and ends the call.
end_call_behaviorstringoptional
When to end calls: auto_detect (LLM intent + phrases) or phrases_only (default: auto_detect). phrases_only is advisory — it steers the agent toward ending on your end_call_phrases, but the model may still end on a clear conversation conclusion.
voicemail_detection_enabledbooleanoptional
Detect when the call has gone to voicemail (default: false).
voicemail_messagestringoptional
Message to leave when voicemail is detected. Requires voicemail_detection_enabled=true.
voicemail_actionstringoptional
What to do on voicemail: leave_message or hangup (default: leave_message).
inbound_lobby_enabledbooleanoptional
Play a holding message at the start of inbound calls before the agent picks up (default: false).
inbound_lobby_messagestringoptional
Lobby greeting text, up to 120 characters.
inbound_lobby_audio_presetstringoptional
Lobby background audio: none, ambient, or instrumental (default: ambient).
inbound_lobby_max_wait_secondsintegeroptional
Maximum lobby wait in seconds (0–60, default: 45).
recording_enabledbooleanoptional
Whether to record the call audio (default: true).
transcription_enabledbooleanoptional
Whether to store the conversation transcript (default: true).
public_accessbooleanoptional
When on, anyone can start a call with this agent from a browser or app using only its id, with no API key or proxy. Off by default. You are billed for public calls as usual, and platform limits cap abuse. Use allowed_origins to restrict which websites may embed it.
allowed_originsstring[]optional
Optional list of website hostnames allowed to embed a public agent in a browser, for example example.com or app.example.com. Leave empty to allow any origin. Applies to browsers only, since native apps and servers send no origin. Has no effect unless public_access is on.
focus_guardrail_enabledbooleanoptional
Block off-topic responses (default: true).
content_guardrail_enabledbooleanoptional
Block unsafe content (default: false).
custom_guardrailsobject[]optional
Custom natural-language rules: list of { name, prompt, is_enabled } objects.
script_adherencestringoptional
How strictly the agent follows its system prompt: strict, medium, or loose (default: strict).
keypad_capture_enabledbooleanoptional
Whether the agent accepts keypad (touch-tone) input on phone calls, so a caller can key in a reference or card number instead of saying it. On by default. No effect on browser agents, which have no keypad.
idle_check_in_after_secsnumberoptional
Seconds of user silence before the agent checks in (1.0–600.0). Defaults to 15 seconds when unset.
max_idle_attemptsintegeroptional
Maximum idle check-ins before the agent sends a goodbye and hangs up (>= 0). Use 0 for unlimited check-ins (agent never hangs up on silence alone).
soft_timeout_secondsnumberoptional
Seconds before the agent plays a filler/holding line while it waits for the LLM (1.0–300.0). Null disables.
soft_timeout_messagestringoptional
Filler text spoken when the soft timeout fires.
soft_timeout_use_llmbooleanoptional
If true, the soft-timeout message is generated by the LLM instead of using soft_timeout_message verbatim (default: false).
response_min_sentencesintegeroptional
Minimum sentences per response (>= 0). Defaults to 2 when unset.
response_max_sentencesintegeroptional
Maximum sentences per response (>= 0). Must be >= response_min_sentences. Defaults to 3 when unset.
rag_top_kintegeroptional
Number of knowledge-base chunks to retrieve per turn (1–20). Null uses the platform default of 6, chosen to improve recall for policies split across adjacent chunks while the voice pipeline still caps local prompt injection to the served context window.
rag_min_scorenumberoptional
Minimum vector or keyword similarity score for retrieved chunks (0.0–1.0). Null uses the platform default of 0.1; set 0.0 to disable the floor.
transfer_phone_numberstringoptional
E.164 number to transfer the call to when the agent triggers a transfer.
transfer_phone_numbersstring[]optional
Up to five numbers in E.164, dialled in order: a warm transfer rolls to the next one when a leg goes unanswered or unavailable. When set it takes precedence over transfer_phone_number; send [] to go back to the single-number behaviour.
transfer_modestringoptional
What the agent does once the person it transfers to picks up. warm (the default): it briefs them privately, then leaves the call. conference: it briefs them, then stays on the call without speaking — the rest of the call is recorded and transcribed, the person's words as human_agent turns, as far as the agent's recording_enabled and transcription_enabled allow. Conference needs the call to stay on the Aethex SIP bridge: SIP calls only, and an outbound trunk the transfer can dial through. On Twilio and Teams calls the agent transfers as warm.
outbound_trunk_idstring (uuid)optional
The SIP trunk this agent dials out through. Must be one of your active outbound trunks; omit it to use the workspace default, and send "" to clear an existing choice. A trunk linked to the specific number still wins over this.
sms_sender_number_idstring (uuid)optional
The number this agent's text messages go out from, as a phone-number id. It must be one of your active numbers with sms_sender on; 404 if it is not yours, 422 if it does not send. Omit it (or send "") and the agent uses the number carrying sms_sender_default, which is what every agent does until you set one. Checked again on every call, so a number you later release falls back to the default rather than sending from a line you no longer hold.
dynamic_variablesobjectoptional
Default values for {{variable}} placeholders interpolated into the system prompt at call start. Inbound calls and messages have nobody to supply values, so every placeholder needs a default here or must be a built-in (system__channel, system__caller_id, …). The response's read-only unfilled_variables lists the placeholders that have neither (a blank "" default counts as none). No call or message is ever refused over one: the agent answers with [name: not provided] in its place, and the agent's webhook_url gets agent.prompt_variables.unfilled. An agent with any cannot be mapped to a WhatsApp number or a number that answers texts (422 unfilled_prompt_variables, with variables).
webhook_urlstringoptional
HTTPS URL (port 443) that receives a signed call.ended report after each call ends, with the call status and transcript. The recording arrives separately via a recording.ready event once the audio finishes uploading. Signed with your tenant webhook secret via the X-Aethex-Signature header.