aethexDocs

Personalization

Reuse one agent for every caller. Fill in details like a name or account status the moment each call starts, so every conversation sounds personal.

Dynamic variables

Dynamic variables are fill-in-the-blank slots in your agent's prompt and opening line. You write a placeholder like {{customer_name}} in the system_prompt or first_message, and Aethex swaps in a real value the moment a call starts.That means one agent can greet every caller by name. Set default values on the agent, then override them per call by passing dynamic_variables — on POST /calls/trigger for a phone call, or on POST /conversation/connect for a browser session. Either way the values apply to that one call and nothing is written back to the agent.The two paths differ on what happens when a placeholder has neither a default nor a supplied value. A phone call is rejected right away with a clear error, so a contact never hears a half-filled greeting. A browser session leaves the placeholder as written instead: a keyless session — a public agent reached without an API key, or a call token — cannot supply values at all, so rejecting would leave it no way through. Keyless sessions likewise ignore any values they send and use the agent's defaults.

AGENT TEMPLATEHi {{name}},from {{company}}YOUR CRMat call timenameJordancompanyGlobex{ }LIVE CALLHi Jordan,from GlobexOne template. Real values filled in for each call.
Note
Two shortcuts. Aethex fills system__ placeholders for you on every channel, so you never set those yourself: system__channel (voice on any call, whether phone, SIP, WhatsApp or browser; whatsapp or sms on those text channels; chat on the chat API), system__caller_id and system__called_number (on a call or a WhatsApp/SMS conversation, the customer's number and yours; empty on a browser session, which has no phone leg), system__conversation_id, system__agent_id and system__current_agent_id. Write a prompt that branches on the channel against system__channel, not a variable of your own: nothing would fill that on an inbound call or message. Any other placeholder needs a default on the agent; the agent's unfilled_variables lists the ones that have none. system__caller_id and system__called_number are E.164 (+447476929342) on every channel, WhatsApp included. A blank default ("") counts as no value: on a call, or in a reply to a message, the model reads [name: not provided] in its place, and the agent is listed as having unfilled variables. Use the secret__ prefix for values that belong only in a tool's request headers, such as an API token: they are passed to your tools but never shown to the model or saved in logs.
Set and send variables
bash
# 1. Configure placeholders and their default values on the agent.
curl -X PATCH https://api.aethexai.com/api/v1/agents/$AGENT_ID \
  -H "X-API-Key: $AETHEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "system_prompt": "You are a support agent for {{company_name}}. The customer name is {{customer_name}}.",
    "dynamic_variables": {
      "company_name": "Acme Corp",
      "customer_name": "Alice"
    }
  }'

# 2. Override the defaults per call (and fill any placeholder that has no default).
curl -X POST https://api.aethexai.com/api/v1/calls/trigger \
  -H "X-API-Key: $AETHEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "'$AGENT_ID'",
    "to_number": "+14155551234",
    "from_number": "+18885551234",
    "dynamic_variables": {
      "company_name": "Globex Bank",
      "customer_name": "Jordan"
    }
  }'

Pull details from your CRM

This is how you make a call feel like you already know the caller. Before the call, look the person up in your CRM and pass what you find as dynamic_variables: their name, their plan, their last order, whatever matters. The agent then opens with those details instead of a generic hello.Need information that changes during the conversation, like today's balance or an order status? Give the agent a tool that queries your CRM live, and it can fetch the answer mid-call. See Tools.

Metadata

The metadata field is a place to keep your own notes on an agent, as a simple set of key and value pairs. The model never sees it and it does not change how calls run. Use it to label agents however you like, for example by team, product line, or prompt version, so you can filter them in your own dashboards.It comes back exactly as you saved it on every agent read.

Next

Now that your agent is configured, wire it to a phone number or trigger calls programmatically. See Phone numbers or the API reference.