punk8357
01/24/2026, 8:55 PMAI Evy
01/24/2026, 8:55 PMAI Evy
01/24/2026, 8:55 PMcall_analysis.call_summary - AI-generated summary of the call [(1) ]()
- transcript - Full transcription of the call
- transcript_object - Transcript as a list of utterances with timestamps
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const callResponse = await client.call.retrieve('119c3f8e47135a29e65947eeb34cf12d') ;
console.log(callResponse) ;
The response includes call_analysis with the summary:
json
"call_analysis": {
"call_summary": "The agent called the user to ask question about his purchase inquiry...",
"user_sentiment": "Positive",
"call_successful": true
}
## HIPAA-Compliant Mode (PII Handling)
For sensitive data handling, use the data_storage_setting field which supports:
- everything - stores all data
- everything_except_pii - excludes PII when possible
- basic_attributes_only - stores only metadata
When PII exclusion is enabled, you can access:
- scrubbed_transcript_with_tool_calls - transcript without PII
- scrubbed_recording_url - recording without PII
## Webhook for Real-Time Notification
Subscribe to the call_analyzed webhook event to receive the call analysis automatically once it's ready after the call ends.AI Evy
01/24/2026, 8:55 PMAI Evy
01/24/2026, 8:55 PMpunk8357
01/24/2026, 8:57 PMAI Evy
01/24/2026, 8:57 PMpunk8357
01/24/2026, 8:57 PMAI Evy
01/24/2026, 8:57 PManalysis_summary_prompt field. [(1) ]()
## Customizing the Summary Prompt
When creating or updating an agent, set the analysis_summary_prompt parameter to provide specific instructions for how the call should be summarized:
json
"analysis_summary_prompt": "Summarize the call in a few sentences."
You can replace this default prompt with your own custom instructions to guide the AI's summarization approach.
## Additional Customization Options
You can also customize:
- analysis_successful_prompt - Define criteria for evaluating whether the call was successful
- post_chat_analysis_data - Extract specific custom data points from the call (string, number, boolean, or selector types)
- post_chat_analysis_model - Choose which model performs the analysis (options include gpt-4.1, gpt-4.1-mini, claude-4.5-sonnet, etc.)
Set analysis_summary_prompt to null to use the default prompt.AI Evy
01/24/2026, 8:58 PMAI Evy
01/24/2026, 8:58 PMpunk8357
01/24/2026, 8:58 PMAI Evy
01/24/2026, 8:58 PMAI Evy
01/24/2026, 8:59 PManalysis_summary_prompt can be set via the API when creating or updating agents.
## For Voice Agents
Use the Update Voice Agent endpoint with the analysis_summary_prompt field in the request body: [(1) ]()
json
"analysis_summary_prompt": "Summarize the outcome of the conversation in two sentences."
## For Chat Agents
Use the Create Chat Agent or Update Chat Agent endpoints: [(2) ]() , [(3) ]()
json
"analysis_summary_prompt": "Summarize the call in a few sentences."
[(2) ]()
The field accepts a string (max 2000 characters) that guides how the post-call analysis summary is generated. [(1) ]()
Set to null to use the default prompt.AI Evy
01/24/2026, 8:59 PMAI Evy
01/24/2026, 8:59 PMpunk8357
01/24/2026, 9:03 PMAI Evy
01/24/2026, 9:03 PMAI Evy
01/24/2026, 9:03 PMcall_analysis object becomes available after the call ends and includes the summary, sentiment, and success evaluation.
The documentation states that various disconnection_reason values can trigger the end of a call, including:
- user_hangup
- agent_hangup
- inactivity
- max_duration_reached
- dial_no_answer
- Various error conditions
Since the analysis is performed post-call once the call reaches an ended status, it should generate a summary based on whatever conversation occurred before the call ended—whether that was a complete conversation or an early termination.
However, the sources don't explicitly document the minimum conversation length required for analysis or how the summary behaves with very short calls. For specifics on edge cases (like calls that end after only a few seconds) , you may want to test or reach out to support.
Check out these potentially useful sources:
- [Get Call]()
- [Contact Sales]()AI Evy
01/24/2026, 9:03 PMAI Evy
01/24/2026, 9:03 PMAI Evy
01/24/2026, 9:31 PMpunk8357
01/24/2026, 9:31 PMAI Evy
01/24/2026, 9:31 PMcall_ended Webhook
Subscribe to the call_ended webhook event, which is triggered when a call completes. [(1) ]()
The webhook payload includes the transcript and other call data:
json
{
"event": "call_ended",
"call": {
"call_id": "Jabr9TXYYJHfvl6Syypi88rdAHYHmcq6",
"transcript": "...",
"transcript_object": [ [Object], [Object], [Object], [Object] ],
...
}
}
The call_ended event includes all fields from the call object except call_analysis.
## For Call Analysis (Summary)
If you also need the AI-generated summary, subscribe to the call_analyzed webhook event, which triggers when call analysis is complete and includes the full call data with the call_analysis object.
## Webhook Behavior
- The webhook has a 10-second timeout
- If no success status (2xx) is received, it retries up to 3 times
- Events are triggered in order but are non-blocking
For webhook setup details, see [Webhook Overview]() .AI Evy
01/24/2026, 9:31 PMAI Evy
01/24/2026, 9:31 PMpunk8357
01/24/2026, 9:52 PMAI Evy
01/24/2026, 9:52 PMAI Evy
01/24/2026, 9:52 PMcall_status and disconnection_reason fields on the call object. [(1) ]()
## Checking Call Outcome
Use the Get Call or List Calls API to retrieve call details: [(2) ]() , [(3) ]()
The call_status field indicates whether the call connected: [(1) ]()
- ended - Call connected and completed
- not_connected - Outbound call never connected
The disconnection_reason field tells you specifically what happened:
If the user picked up:
- user_hangup - User answered and later hung up
- agent_hangup - User answered, agent ended call
- call_transfer - User answered, call was transferred
If the user did NOT pick up:
- dial_no_answer - The number dialed did not answer
- dial_busy - The number dialed is busy
- user_declined - User explicitly declined the call
- marked_as_spam - Call blocked as spam
## Example: Query Past Calls
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const callResponse = await client.call.retrieve('119c3f8e47135a29e65947eeb34cf12d') ;
console.log(callResponse) ;
[(2) ]()
Check callResponse.call_status and callResponse.disconnection_reason to determine if the user picked up on any previous call to that number.AI Evy
01/24/2026, 9:52 PMAI Evy
01/24/2026, 9:52 PMpunk8357
01/24/2026, 9:53 PMAI Evy
01/24/2026, 9:53 PMAI Evy
01/24/2026, 9:53 PMcall_ended webhook provides information about whether the user picked up.
## Using the call_ended Webhook
The call_ended event is triggered when a call completes, transfers, or encounters an error. [(1) ]()
The webhook payload includes the disconnection_reason field which tells you what happened:
json
{
"event": "call_ended",
"call": {
"call_type": "phone_call",
"from_number": "+12137771234",
"to_number": "+12137771235",
"direction": "inbound",
"call_id": "Jabr9TXYYJHfvl6Syypi88rdAHYHmcq6",
"agent_id": "oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD",
"call_status": "registered",
"metadata": {},
"retell_llm_dynamic_variables": {
"customer_name": "John Doe"
},
"start_timestamp": 1714608475945,
"end_timestamp": 1714608491736,
"disconnection_reason": "user_hangup",
"transcript": "...",
"transcript_object": [ [Object], [Object], [Object], [Object] ],
"transcript_with_tool_calls": [ [Object], [Object], [Object], [Object] ],
"opt_out_sensitive_data_storage": false
}
}
## Key Detail for Unanswered Calls
When the call did not connect (like calls with dial_failed, dial_no_answer, dial_busy disconnection reason) , the call_started webhook will not be triggered, but the call_ended webhook will still fire.
So you can check the disconnection_reason in the call_ended webhook payload to determine if the user picked up or not.AI Evy
01/24/2026, 9:53 PMAI Evy
01/24/2026, 9:53 PMpunk8357
01/24/2026, 9:55 PMAI Evy
01/24/2026, 9:55 PMAI Evy
01/24/2026, 9:55 PMcall_status field will show ongoing.
[(1) ]()
The call_status field has these possible values:
- registered - Call id issued, starting to make a call using this id
- ongoing - Call connected and ongoing
- ended - The underlying websocket has ended for the call (user or agent hung up, or call transferred)
- error - Call encountered error
You can check this via the Get Call API:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const callResponse = await client.call.retrieve('119c3f8e47135a29e65947eeb34cf12d') ;
console.log(callResponse) ;
If callResponse.call_status equals ongoing, the call is currently in progress.AI Evy
01/24/2026, 9:56 PMAI Evy
01/24/2026, 9:56 PMpunk8357
01/24/2026, 9:59 PMAI Evy
01/24/2026, 9:59 PMAI Evy
01/24/2026, 10:00 PMAI Evy
01/24/2026, 10:00 PMcall_status from the Get Call API response by calling client.call.retrieve(call_id). [(1) ]()
## Best Approach: Use Webhooks
The recommended way to track call status transitions is using webhooks rather than polling: [(2) ]() , [(3) ]()
1. call_started - Triggered when a new call begins [(2) ]()
2. call_ended - Triggered when a call completes, transfers, or encounters an error
Set up webhooks to receive instant notifications for these events. [(3) ]()
## If You Need to Poll
You can use the Get Call API:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const callResponse = await client.call.retrieve('119c3f8e47135a29e65947eeb34cf12d') ;
console.log(callResponse) ;
[(1) ]()
The call_status field in the response will be one of: registered, ongoing, ended, or error.
## Important Note
The call only shows ongoing if it successfully connected. If the call did not successfully start, it will never show as ongoing. [(4) ]()
Webhooks are ideal for production systems because they provide real-time updates without polling. [(3) ]()AI Evy
01/24/2026, 10:00 PMpunk8357
01/24/2026, 10:23 PMAI Evy
01/24/2026, 10:23 PMAI Evy
01/24/2026, 10:24 PMwebhook_url on your agent to receive call events. [(2) ]()
When creating or updating an agent, use the webhook_url field:
json
"webhook_url": "<https://webhook-url-here%22>
If set, this binds webhook events for this agent to the specified URL, and will ignore the account level webhook for this agent.
Set to null to remove the webhook URL from the agent.
You can also configure webhook_timeout_ms (defaults to 10000 ms if not set) .
## Account-Level Webhook
If no agent-level webhook is configured, the system will use your account-level webhook settings (configured in the dashboard) .
So webhooks are not automatically enabled by default—you need to either:
1. Configure an account-level webhook in your dashboard, or
2. Set the webhook_url field on your agent via APIAI Evy
01/24/2026, 10:24 PMAI Evy
01/24/2026, 10:24 PMpunk8357
01/24/2026, 10:24 PMAI Evy
01/24/2026, 10:24 PMAI Evy
01/24/2026, 10:24 PMcall_started, call_ended, and call_analyzed webhook events are available by default—you don't need to configure which events you receive. [(1) ]()
However, you do need to configure a webhook URL to receive them. Once you set a webhook URL (either at the account level or agent level) , Retell will automatically POST all three event types (call_started, call_ended, call_analyzed) to that endpoint.
## What You Need to Configure
Set the webhook_url on your agent: [(2) ]()
json
"webhook_url": "<https://webhook-url-here%22>
Once configured, Retell will send all webhook events to that URL. You then filter for the specific event type in your webhook handler by checking the event field in the payload: [(1) ]()
json
{
"event": "call_ended",
"call": {
...
}
}
## Key Point
The event types themselves are not individually toggled on/off—they're all sent once you have a webhook URL configured. Your webhook handler should check the event field to process only the events you care about (e.g., call_started, call_ended, or call_analyzed) .AI Evy
01/24/2026, 10:24 PMAI Evy
01/24/2026, 10:24 PMpunk8357
01/24/2026, 10:25 PMpunk8357
01/24/2026, 10:26 PMAI Evy
01/24/2026, 10:26 PMAI Evy
01/24/2026, 10:26 PMwebhook_url for an agent via the API.
## For Voice Agents
Use the Create Voice Agent API when creating an agent:
[(1) ]()
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
Include webhook_url in the request body:
json
"webhook_url": "<https://webhook-url-here%22>
## For Chat Agents
Use the Update Chat Agent API:
[(2) ]()
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const chatAgentResponse = await client.chatAgent.update('16b980523634a6dc504898cda492e939') ;
console.log(chatAgentResponse.agent_id) ;
The webhook_url field binds webhook events for that agent to the specified URL and will ignore the account-level webhook for this agent. [(1) ]()
Set to null to remove the webhook URL from the agent.AI Evy
01/24/2026, 10:26 PMAI Evy
01/24/2026, 10:26 PMAI Evy
01/24/2026, 10:27 PMpunk8357
01/24/2026, 10:27 PMAI Evy
01/24/2026, 10:27 PMPATCH /update-agent/{agent_id} endpoint with the webhook_url field in the request body:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.update('16b980523634a6dc504898cda492e939', {
agent_name: 'Jarvis',
}) ;
console.log(agentResponse.agent_id) ;
To set the webhook URL, include it in the update payload:
json
"webhook_url": "<https://webhook-url-here%22>
The webhook_url field binds webhook events for this agent to the specified URL and will ignore the account-level webhook for this agent. Set to null to remove the webhook URL from the agent.AI Evy
01/24/2026, 10:27 PMAI Evy
01/24/2026, 10:27 PMpunk8357
01/24/2026, 10:29 PMAI Evy
01/24/2026, 10:29 PMAI Evy
01/24/2026, 10:29 PMjavascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
## 2. Buy a Phone Number via API
Yes, you can purchase phone numbers through the API using the Create Phone Number endpoint:
[(2) ]() , [(3) ]()
javascript
const phoneNumberResponse = await retell.phoneNumber.create({
inbound_agent_id: "oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD", // replace with the agent id you want to assign
outbound_agent_id: "oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD", // replace with the agent id you want to assign
}) ;
console.log(phoneNumberResponse) ;
You can optionally specify an area_code (3-digit integer, currently US area codes only) .
[(2) ]()
## 3. Bind Agent to an Existing Number
If you already have a number and want to assign an agent to it, use the Update Phone Number API:
[(4) ]()
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const phoneNumberResponse = await client.phoneNumber.update('+14157774444', {
inbound_agent_id: 'oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD',
nickname: 'Frontdesk Number',
outbound_agent_id: 'oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD',
}) ;
console.log(phoneNumberResponse.inbound_agent_id) ;AI Evy
01/24/2026, 10:29 PMAI Evy
01/24/2026, 10:29 PMpunk8357
01/25/2026, 3:19 PMAI Evy
01/25/2026, 3:19 PMAI Evy
01/25/2026, 3:20 PManalysis_summary_prompt for a voice agent using the Update Voice Agent API.
[(1) ]()
## How to Update
Use the PATCH /update-agent/{agent_id} endpoint:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.update('16b980523634a6dc504898cda492e939', {
agent_name: 'Jarvis',
}) ;
console.log(agentResponse.agent_id) ;
Include analysis_summary_prompt in your update payload:
json
"analysis_summary_prompt": "Summarize the outcome of the conversation in two sentences."
## Character Limit
Yes, there is a limit. The analysis_summary_prompt field has a maximum string length of 2000 characters.
## Field Description
This prompt guides how the post call analysis summary should be generated. When unset, the default system prompt is used. Set to null to use the default prompt.AI Evy
01/25/2026, 3:20 PMAI Evy
01/25/2026, 3:20 PMpunk8357
01/25/2026, 3:47 PMAI Evy
01/25/2026, 3:47 PMAI Evy
01/25/2026, 3:47 PManalysis_summary_prompt in the Retell dashboard/front end, or how the dashboard and API interact when both are used to configure the same agent. [(1) ]()
What I can confirm from the documentation:
- The analysis_summary_prompt field exists and can be updated via the Update Voice Agent API (PATCH /update-agent/{agent_id}) .
- When unset, the default system prompt is used. Set to null to use the default prompt.
For specifics about dashboard visibility and precedence when using both the API and dashboard, I'd recommend checking the Retell dashboard directly or reaching out to support.
Check out these potentially useful sources:
- [Update Voice Agent]()
- [Contact Sales]()
- [GitHub]()
Would you like me to try to answer generally based on my knowledge?AI Evy
01/25/2026, 3:47 PMAI Evy
01/25/2026, 3:47 PMpunk8357
01/25/2026, 3:48 PMAI Evy
01/25/2026, 3:48 PMAI Evy
01/25/2026, 3:48 PM<https://dashboard.retellai.com/agents/agent_id>
(Replace agent_id with your actual agent ID.)
There have been reports of agents not appearing in the dashboard search bar even when they exist and are accessible via API or direct URL. [(2) ]() , [(1) ]() If you can't find your agent by searching, try navigating directly using the URL format above with your agent_id.AI Evy
01/25/2026, 3:48 PMAI Evy
01/25/2026, 3:48 PMpunk8357
01/25/2026, 3:49 PMAI Evy
01/25/2026, 3:49 PMAI Evy
01/25/2026, 3:50 PM/v2/update-agent/ but the correct endpoint uses /update-agent/ (not /v2/) . [(1) ]()
## Correct Endpoint
The Update Voice Agent endpoint path is:
PATCH /update-agent/{agent_id}
[(2) ]()
## Correct SDK Usage
Use the Retell SDK like this:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.update('16b980523634a6dc504898cda492e939', {
agent_name: 'Jarvis',
}) ;
console.log(agentResponse.agent_id) ;
## Fix
Update your Supabase edge function to use the correct API base URL: ` with the path /update-agent/{agent_id} (no /v2/ prefix) . [(1) ]()
If you're making direct HTTP requests instead of using the SDK, ensure your URL is:
<https://api.retellai.com/update-agent/agent_00c700ca8d77ecea0c04e78ce7>
Your analysis_summary_prompt_length of 1981 characters is within the 2000 character limit, so that's not the issue. [(2) ]()AI Evy
01/25/2026, 3:50 PMAI Evy
01/25/2026, 3:50 PMpunk8357
01/25/2026, 3:58 PMpunk8357
01/25/2026, 3:58 PMAI Evy
01/25/2026, 3:58 PMAI Evy
01/25/2026, 3:58 PMjavascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
Step 2: Update your existing phone number to bind it to the agent
Use the Update Phone Number API to assign your phone number to the agent you just created: [(1) ]() , [(3) ]()
javascript
const phoneNumberResponse = await client.phoneNumber.update('+14157774444', {
inbound_agent_id: 'oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD',
nickname: 'Frontdesk Number',
}) ;
Set inbound_agent_id for inbound calls and/or outbound_agent_id for outbound calls, using your newly created agent's ID. [(4) ]()AI Evy
01/25/2026, 3:58 PMAI Evy
01/25/2026, 3:58 PMpunk8357
01/25/2026, 4:10 PMAI Evy
01/25/2026, 4:10 PMAI Evy
01/25/2026, 4:10 PMAI Evy
01/25/2026, 4:10 PMinbound_agent_id and outbound_agent_id
Use the PATCH /update-phone-number/{phone_number} endpoint:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const phoneNumberResponse = await client.phoneNumber.update('+14157774444', {
inbound_agent_id: 'oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD',
nickname: 'Frontdesk Number',
outbound_agent_id: 'oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD',
}) ;
console.log(phoneNumberResponse.inbound_agent_id) ;
## What Each Field Does
- **`inbound_agent_id`**: The number will automatically use this agent when receiving inbound calls. If set to null, this number would not accept inbound calls.
- **`outbound_agent_id`**: The number will automatically use this agent when conducting outbound calls. If set to null, this number would not be able to initiate outbound calls without an agent id override.
## Example Workflow
1. Create your agent and note the returned agent_id
2. Call client.phoneNumber.update() with your phone number in E.164 format (e.g., +14157774444)
3. Pass your agent's ID to inbound_agent_id (for receiving calls) and/or outbound_agent_id (for making calls)
You can assign different agents for inbound vs outbound, or use the same agent for both. [(2) ]()AI Evy
01/25/2026, 4:10 PMpunk8357
01/25/2026, 4:20 PMAI Evy
01/25/2026, 4:20 PMAI Evy
01/25/2026, 4:20 PM/v2/create-agent but the correct endpoint does not use a /v2/ prefix. [(1) ]()
## Correct Endpoint
The Create Voice Agent endpoint is:
POST /create-agent
## Correct API URL
Update your Supabase edge function to use:
<https://api.retellai.com/create-agent>
## Correct SDK Usage
If using the Retell SDK:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
## Additional Notes
Users have also encountered 404 errors when using an invalid voice_id. [(2) ]() , [(3) ]() Double-check that 11labs-Adrian is a valid voice ID in your account.AI Evy
01/25/2026, 4:20 PMAI Evy
01/25/2026, 4:20 PMpunk8357
01/25/2026, 4:28 PMAI Evy
01/25/2026, 4:28 PMAI Evy
01/25/2026, 4:28 PMAI Evy
01/25/2026, 4:28 PM/update-phone-number.
## Correct Endpoint Format
The Update Phone Number endpoint path should be:
PATCH /update-phone-number/{phone_number}
[(1) ]()
Your request is hitting /update-phone-number without the phone number appended.
## Fix
Update your Supabase edge function to include the phone number (in E.164 format) in the URL path:
<https://api.retellai.com/update-phone-number/+14157774444>
## Correct SDK Usage
javascript
const phoneNumberResponse = await client.phoneNumber.update('+14157774444', {
inbound_agent_id: 'oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD',
nickname: 'Frontdesk Number',
outbound_agent_id: 'oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD',
}) ;
Replace +14157774444 with your actual phone number in E.164 format.AI Evy
01/25/2026, 4:28 PMpunk8357
01/25/2026, 4:30 PMAI Evy
01/25/2026, 4:30 PMAI Evy
01/25/2026, 4:31 PMAI Evy
01/25/2026, 4:31 PMPOST /create-agent) . [(1) ]()
## Setting the Response Engine (Multi-Prompt / Retell LLM)
Use the response_engine field to attach your LLM. For a Retell LLM (which supports multi-prompt/LLM States) , specify the llm_id you created:
json
"response_engine": {
"type": "retell-llm",
"llm_id": "llm_234sdertfsdsfsdf",
"version": 0
}
## Setting the Voice
Use the voice_id field. For "cimo", you'll need to use the exact voice ID as listed in your dashboard. The documentation shows the format:
javascript
voice_id: '11labs-Adrian',
Replace '11labs-Adrian' with the correct voice ID for "cimo" from your Dashboard.
## Setting the Agent Title
Use the agent_name field:
json
"agent_name": "Jarvis"
## General Instructions
General instructions (the system prompt) are configured in the *Response Engine (LLM) *, not in the agent creation call itself. The response_engine references an `llm_id`—that LLM is where you define your prompt and instructions.
## Full Example
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
Add agent_name to the payload for your title. For general instructions, create/update your Retell LLM separately with your prompt content.AI Evy
01/25/2026, 4:31 PMpunk8357
01/25/2026, 4:33 PMAI Evy
01/25/2026, 4:33 PMAI Evy
01/25/2026, 4:33 PMagent_name field when creating or updating your agent. [(1) ]()
## When Creating an Agent
Include agent_name in your create payload:
javascript
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
agent_name: 'Jarvis',
}) ;
## When Updating an Existing Agent
javascript
const agentResponse = await client.agent.update('16b980523634a6dc504898cda492e939', {
agent_name: 'Jarvis',
}) ;
[(2) ]()
## Field Details
- agent_name (string | null) : The name of the agent. Only used for your own reference. [(1) ]()
This is the title that appears in the Retell dashboard for identifying your agent.AI Evy
01/25/2026, 4:33 PMAI Evy
01/25/2026, 4:33 PMpunk8357
01/25/2026, 4:41 PMAI Evy
01/25/2026, 4:41 PMAI Evy
01/25/2026, 4:41 PMagent_name, analysis_summary_prompt, voice settings, etc.) using the Update Voice Agent API, but the universal prompt configuration for multi-prompt/LLM States agents is managed through the Response Engine (Retell LLM) , not directly on the agent object. [(1) ]()
Based on the documentation:
- The response_engine field on an agent references an llm_id
- Multi-prompt agents organize conversations into a structured tree of states, each with its own focused prompt [(2) ]()
- General instructions and prompts are configured in the LLM, not in the agent creation/update calls
To update the universal prompt, you would need to update the Retell LLM itself (the llm_id your agent references) , not the agent directly.
Check out these potentially useful sources:
- [Single/Multi Prompt Agent Overview]()
- [Update Voice Agent]()
- [Step 2: Configure the basic settings]()
Would you like me to try to answer generally based on my knowledge?AI Evy
01/25/2026, 4:41 PMAI Evy
01/25/2026, 4:41 PMpunk8357
01/25/2026, 4:42 PMAI Evy
01/25/2026, 4:42 PMAI Evy
01/25/2026, 4:43 PMnodes array when you call the Create Conversation Flow endpoint:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const conversationFlowResponse = await client.conversationFlow.create({
model_choice: { model: 'gpt-4.1', type: 'cascading' },
nodes: [
{
id: 'start',
instruction: { text: 'Greet the customer and ask how you can help them.', type: 'prompt' },
type: 'conversation',
},
],
start_speaker: 'agent',
}) ;
console.log(conversationFlowResponse.conversation_flow_id) ;
## Key Points
- Conversation Flow agents use nodes as building blocks—each node represents a step in the conversation flow [(2) ]()
- Node types include: Conversation Node, Extract DV Node, Function Node, SMS Node, MCP Node, Call Transfer Node, Transfer Agent Node, Press Digit Node, End Node, and Logic Split Node
- You define nodes in the nodes array with properties like id, type, and instruction [(1) ]()
Note: This applies to Conversation Flow agents, not Multi-Prompt agents. Multi-Prompt agents use LLM States configured through the Retell LLM, not the node-based system.AI Evy
01/25/2026, 4:43 PMAI Evy
01/25/2026, 4:43 PMpunk8357
01/25/2026, 4:43 PMAI Evy
01/25/2026, 4:43 PMAI Evy
01/25/2026, 4:43 PMresponse_engine references an llm_id, and that LLM is where you configure the general_prompt. [(1) ]()
## Setting General Instructions When Creating a Retell LLM
Use the general_prompt field in the Create Retell LLM endpoint:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const llmResponse = await client.llm.create() ;
console.log(llmResponse.llm_id) ;
Include general_prompt in your request body:
json
{
"general_prompt": "You are ..."
}
## Updating General Instructions on an Existing Retell LLM
Use the Update Retell LLM endpoint (PATCH /update-retell-llm/{llm_id}) : [(2) ]()
The general_prompt field is described as:
- General prompt appended to system prompt no matter what state the agent is in.
- System prompt (with state) = general prompt + state prompt.
- System prompt (no state) = general prompt.
## Important Note on Versions
If you update the LLM via API, it creates a draft version. To have your agent use the updated prompt without publishing in the dashboard, set your agent to use the draft version at the phone number level. [(3) ]() [(4) ]()AI Evy
01/25/2026, 4:43 PMAI Evy
01/25/2026, 4:43 PMpunk8357
01/25/2026, 4:45 PMAI Evy
01/25/2026, 4:45 PMAI Evy
01/25/2026, 4:45 PMgeneral_prompt on an existing LLM. [(1) ]()
## Update Endpoint
PATCH /update-retell-llm/{llm_id}
## SDK Example
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const llmResponse = await client.llm.update('16b980523634a6dc504898cda492e939', {
begin_message: 'Hey I am a virtual assistant calling from Retell Hospital.',
}) ;
console.log(llmResponse.llm_id) ;
Replace begin_message with general_prompt in your payload:
json
{
"general_prompt": "You are ..."
}
## Field Details
- general_prompt (string | null) : General prompt appended to system prompt no matter what state the agent is in.
- System prompt (with state) = general prompt + state prompt
- System prompt (no state) = general prompt
## Version Note
If you're using versions, make sure to set the version as well in your update request. [(2) ]() Changes made via API create a draft version—set your agent to the draft version at the phone number level in the dashboard to have changes take effect without publishing. [(3) ]()AI Evy
01/25/2026, 4:45 PMAI Evy
01/25/2026, 4:45 PMpunk8357
01/25/2026, 4:47 PMAI Evy
01/25/2026, 4:47 PMAI Evy
01/25/2026, 4:47 PMAI Evy
01/25/2026, 4:47 PMwebhook_url for your agent. [(1) ]()
## Endpoint
PATCH /update-agent/{agent_id}
## SDK Example
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.update('16b980523634a6dc504898cda492e939', {
agent_name: 'Jarvis',
}) ;
console.log(agentResponse.agent_id) ;
Replace agent_name with webhook_url in your payload:
json
{
"webhook_url": "<https://webhook-url-here%22>
}
## Field Details
- webhook_url (string | null) : The webhook for agent to listen to call events. See what events it would get at [webhook doc](/features/webhook) . If set, will bind webhook events for this agent to the specified url, and will ignore the account level webhook for this agent. Set to null to remove webhook url from this agent.AI Evy
01/25/2026, 4:47 PMpunk8357
01/25/2026, 4:48 PMAI Evy
01/25/2026, 4:48 PMAI Evy
01/25/2026, 4:48 PMwebhook_url when creating the agent. [(1) ]()
## Field Details
- webhook_url (string | null) : The webhook for agent to listen to call events. If set, will bind webhook events for this agent to the specified url, and will ignore the account level webhook for this agent. Set to null to remove webhook url from this agent.
## Example
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
Add webhook_url to your create payload:
json
{
"response_engine": { "llm_id": "llm_234sdertfsdsfsdf", "type": "retell-llm" },
"voice_id": "11labs-Adrian",
"webhook_url": "<https://webhook-url-here%22>
}AI Evy
01/25/2026, 4:48 PMAI Evy
01/25/2026, 4:48 PMpunk8357
01/25/2026, 5:34 PMAI Evy
01/25/2026, 5:34 PMAI Evy
01/25/2026, 5:35 PMAI Evy
01/25/2026, 5:35 PMgeneral_prompt via API, it creates a draft version of the LLM—not the published version. [(1) ]() The dashboard typically displays the published version by default, which is why you may not see your changes reflected there.
## Why This Happens
The API response includes these relevant fields:
- `is_published`: Whether the Retell LLM Response Engine is published
- `version`: The version of the LLM
When you update via API, the changes go to a draft. [(2) ]()
## How to See/Use Your Updated Prompt
Based on community feedback, you have a few options:
1. Set your agent to use the Draft version at the phone number level in the dashboard—this allows the agent to use the unpublished changes without manually publishing.
2. Create a new LLM via API, then update your agent to use the new `llm_id`—this approach has been confirmed to work.
3. Verify the update worked by calling the Get Retell LLM endpoint to confirm your general_prompt was saved:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const llmResponse = await client.llm.retrieve('16b980523634a6dc504898cda492e939') ;
console.log(llmResponse.llm_id) ;
[(3) ]()
Check the response to see if your general_prompt value is present in the returned object.AI Evy
01/25/2026, 5:35 PMpunk8357
01/25/2026, 5:37 PMAI Evy
01/25/2026, 5:37 PMAI Evy
01/25/2026, 5:37 PMDraft, it will always fetch the latest version of the agent.
## Via Dashboard (Phone Numbers Tab)
Set your agent at the draft version from the dashboard at the phone numbers tab—then any change you make through the API or the dashboard will affect the agent without publishing it. [(2) ]()
## API Approach
You can use the version number as a parameter when creating calls or phone numbers. For example: [(1) ]()
get_agent(version=2) # Gets the version with version number 2.
get_agent() # Gets the latest version of the agent.
The version parameter can be used in create_phone_number to ensure the phone uses the correct version of the agent.
## Important Note
If you're using versions, make sure to set the version as well in your requests. [(3) ]() The draft version is the "latest version" that hasn't been published yet—selecting Draft at the phone number level ensures your API changes take effect immediately without requiring a publish step.AI Evy
01/25/2026, 5:37 PMAI Evy
01/25/2026, 5:37 PMpunk8357
01/25/2026, 5:56 PMAI Evy
01/25/2026, 5:56 PMAI Evy
01/25/2026, 5:56 PMllm_id is not provided when you create an agent—you must create the Retell LLM first (via API or dashboard) , and then use that llm_id when creating the agent. [(1) ]()
## Workflow
1. Create the Retell LLM first using the Create Retell LLM endpoint (POST /create-retell-llm) . The response includes the llm_id. [(2) ]()
2. Then create the agent, referencing that llm_id in the response_engine field:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
[(1) ]()
## Summary
- The llm_id comes from creating a Retell LLM (via API or dashboard)
- When creating an agent, you provide the llm_id in the response_engine object—it is not auto-generated by the agent creation callAI Evy
01/25/2026, 5:56 PMAI Evy
01/25/2026, 5:56 PMpunk8357
01/25/2026, 6:09 PMAI Evy
01/25/2026, 6:09 PMAI Evy
01/25/2026, 6:10 PManalysis_summary_prompt field when creating or updating the agent. [(1) ]() [(2) ]()
## When Creating a Voice Agent
Include analysis_summary_prompt in your create payload:
javascript
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
analysis_summary_prompt: 'Summarize the outcome of the conversation in two sentences.',
}) ;
[(1) ]()
## When Updating an Existing Agent
javascript
const agentResponse = await client.agent.update('16b980523634a6dc504898cda492e939', {
analysis_summary_prompt: 'Summarize the outcome of the conversation in two sentences.',
}) ;
[(2) ]()
## Field Details
- analysis_summary_prompt (string | null) : Prompt to guide how the post call or chat analysis summary should be generated. When unset, the default system prompt is used. Set to null to use the default prompt.
- Maximum string length: 2000
This field controls the instructions for generating the call summary in post-call analysis.AI Evy
01/25/2026, 6:10 PMAI Evy
01/25/2026, 6:10 PMpunk8357
01/25/2026, 6:13 PMAI Evy
01/25/2026, 6:13 PMAI Evy
01/25/2026, 6:13 PMAI Evy
01/25/2026, 6:13 PMAI Evy
01/25/2026, 6:13 PMpunk8357
01/25/2026, 6:17 PMAI Evy
01/25/2026, 6:17 PMAI Evy
01/25/2026, 6:17 PMglobal_prompt field:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const conversationFlowResponse = await client.conversationFlow.create({
model_choice: { model: 'gpt-4.1', type: 'cascading' },
nodes: [
{
id: 'start',
instruction: { text: 'Greet the customer and ask how you can help them.', type: 'prompt' },
type: 'conversation',
},
],
start_speaker: 'agent',
}) ;
console.log(conversationFlowResponse.conversation_flow_id) ;
Add global_prompt to your request body:
json
{
"global_prompt": "You are a helpful customer service agent."
}
## Field Details
- global_prompt (string | null) : Global prompt used in every node of the conversation flow. [(1) ]() [(2) ]()
## How to Use Global Prompt vs Node Instructions
- Use the global prompt for your agent's overall personality, tone, and universal rules. [(3) ]()
- Use conversation flow nodes for step-by-step logic, questions, and transitions.
- Use global nodes only for actions available anytime (e.g., "transfer to human") .AI Evy
01/25/2026, 6:17 PMAI Evy
01/25/2026, 6:17 PMpunk8357
01/25/2026, 6:20 PMAI Evy
01/25/2026, 6:20 PMAI Evy
01/25/2026, 6:20 PMAI Evy
01/25/2026, 6:21 PMCreate Conversation Flow endpoint that returns a conversation_flow_id. [(1) ]() It uses nodes, edges, and functions as core components where each node defines a small set of logic and transition conditions determine which node to transition to.
Multi-Prompt Agent uses the Create Retell LLM endpoint to create a structured tree of states, each with its own focused prompt and behavior. You then reference the llm_id when creating an agent. [(2) ]()
## Control Level
Conversation Flow provides:
- Dynamic LLM Selection: Change the LLM for each individual node [(3) ]()
- Precise Response Control: Fine-tune the exact words spoken during and after each function execution
- Node settings like Skip Response, Block Interruptions, and per-node LLM selection [(4) ]()
Multi-Prompt organizes conversations into states with:
- Focused Prompt per state
- State-Specific Functions
- Transition Logic between states [(2) ]()
## API Availability
There is a Conversation Flow API available in the SDK for creating and managing conversation flows programmatically. [(3) ]()
For multi-prompt agents, there are no API endpoints specifically for conversational flows—you use the standard Create Retell LLM and Create Agent endpoints. [(5) ]()
## Pricing
Conversation Flow pricing is calculated based onAI Evy
01/25/2026, 6:21 PMpunk8357
01/25/2026, 6:31 PMAI Evy
01/25/2026, 6:31 PMAI Evy
01/25/2026, 6:31 PMclient.conversationFlow.create, which returns a conversation_flow_id [(1) ]()
2. Create a Voice Agent that references the conversation flow via the response_engine field
## Creating the Conversation Flow
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const conversationFlowResponse = await client.conversationFlow.create({
model_choice: { model: 'gpt-4.1', type: 'cascading' },
nodes: [
{
id: 'start',
instruction: { text: 'Greet the customer and ask how you can help them.', type: 'prompt' },
type: 'conversation',
},
],
start_speaker: 'agent',
}) ;
console.log(conversationFlowResponse.conversation_flow_id) ;
## Then Create the Voice Agent
After getting the conversation_flow_id, you create an agent with response_engine set to type conversation-flow (similar to how you'd use llm_id with type retell-llm for multi-prompt agents) .
The Conversation Flow is the **response engine**—the Voice Agent is what ties it to a voice, phone number, webhook, and other agent-level settings.AI Evy
01/25/2026, 6:31 PMAI Evy
01/25/2026, 6:31 PMpunk8357
01/25/2026, 6:32 PMAI Evy
01/25/2026, 6:32 PMAI Evy
01/25/2026, 6:32 PMresponse_engine field with type conversation-flow and provide the conversation_flow_id. [(1) ]()
## Example
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
}) ;
console.log(agentResponse.agent_id) ;
For a Conversation Flow agent, modify the response_engine to use the conversation_flow_id you received from `client.conversationFlow.create`:
json
{
"type": "conversation-flow",
"conversation_flow_id": "your_conversation_flow_id_here"
}
## Full Workflow
javascript
// Step 1: Create the Conversation Flow
const conversationFlowResponse = await client.conversationFlow.create({
model_choice: { model: 'gpt-4.1', type: 'cascading' },
nodes: [
{
id: 'start',
instruction: { text: 'Greet the customer and ask how you can help them.', type: 'prompt' },
type: 'conversation',
},
],
start_speaker: 'agent',
}) ;
[(2) ]()
javascript
// Step 2: Create the Voice Agent using the conversation_flow_id
const agentResponse = await client.agent.create({
response_engine: {
type: 'conversation-flow',
conversation_flow_id: conversationFlowResponse.conversation_flow_id
},
voice_id: '11labs-Adrian',
}) ;
The response_engine object supports three types: retell-llm, conversation-flow, and custom-llm. [(3) ]() , [(1) ]()AI Evy
01/25/2026, 6:32 PMAI Evy
01/25/2026, 6:32 PMpunk8357
01/25/2026, 6:35 PMAI Evy
01/25/2026, 6:35 PMAI Evy
01/25/2026, 6:35 PMnodes array when calling client.conversationFlow.create, and use edges within each node to define transitions to the next node. [(1) ]()
## Example with Multiple Connected Nodes
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const conversationFlowResponse = await client.conversationFlow.create({
model_choice: { model: 'gpt-4.1', type: 'cascading' },
nodes: [
{
id: 'start',
instruction: { text: 'Greet the customer and ask how you can help them.', type: 'prompt' },
type: 'conversation',
},
],
start_speaker: 'agent',
}) ;
console.log(conversationFlowResponse.conversation_flow_id) ;
To connect nodes, add edges to each node with destination_node_id pointing to the next node:
json
{
"id": "start",
"type": "conversation",
"instruction": {
"type": "prompt",
"text": "Greet the customer and ask how you can help them."
},
"edges": [
{
"id": "edge_1",
"transition_condition": {
"type": "prompt",
"prompt": "Customer wants to book appointment"
},
"destination_node_id": "book_appointment"
}
]
}
## Key Structure
- **`nodes`**: Array of node objects, each with a unique id and type
- **`edges`**: Connections between nodes defined by transition_condition and destination_node_id
- **`start_node_id`**: Set this to specify which node begins the flow
Each node can have multiple edges for different transition conditions, allowing you to build linear or branching flows programmatically. [(2) ]()AI Evy
01/25/2026, 6:35 PMAI Evy
01/25/2026, 6:35 PMpunk8357
01/25/2026, 6:36 PMAI Evy
01/25/2026, 6:36 PMAI Evy
01/25/2026, 6:37 PMstates array when creating a Retell LLM, with edges defining the transition to the next state:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const llmResponse = await client.llm.update('16b980523634a6dc504898cda492e939', {
begin_message: 'Hey I am a virtual assistant calling from Retell Hospital.',
}) ;
console.log(llmResponse.llm_id) ;
[(2) ]()
## State Structure with Edges
json
[
{
"name": "information_collection",
"state_prompt": "You will follow the steps below to collect information...",
"edges": [
{
"destination_state_name": "appointment_booking",
"description": "Transition to book an appointment."
}
],
"tools": []
},
{
"name": "appointment_booking",
"state_prompt": "You will follow the steps below to book an appointment...",
"tools": []
}
]
[(3) ]()
## Key Fields
- **`states`**: Array of state objects, each with a name and state_prompt
- **`edges`**: Define transitions with destination_state_name and description
- **`starting_state`**: Required—set this to the name of your first state (e.g., "information_collection")
## Defining Transition Logic in the Prompt
In each state's prompt, specify when to transition: [(4) ]()AI Evy
01/25/2026, 6:37 PM7. Ask if user is interested in an in person tour.
- if yes, transition to schedule_tour.
- if no or hesitant, call function end_call to hang up politely and say will reach out if any other interesting properties pop up.
This creates a linear flow where states execute in order based on the edge conditions you define.AI Evy
01/25/2026, 6:37 PMAI Evy
01/25/2026, 6:37 PMpunk8357
01/25/2026, 7:07 PMAI Evy
01/25/2026, 7:07 PMAI Evy
01/25/2026, 7:07 PM{{variable_name}} syntax. [(1) ]()
## Where You Can Use Dynamic Variables
Dynamic variables can be used in:
- **Prompts**: Agent instructions and personality
- **Begin message**: Opening greeting
- **Tool configurations**: Custom function URLs, tool descriptions, property descriptions
- **Call handling**: Voicemail prompts and messages, transfer call phone numbers, warm transfer instructions
- Webhook URL
## Example in Prompts
"Hello {{user_name}}, I understand you're interested in {{product_name}}. How can I help you today?"
## Using in Transition Conditions
For equation-based transition conditions in Conversation Flow, you can use dynamic variables: [(2) ]()
- {{user_location}} == "New York"
- {{user_age}} < 18 OR {{user_location}} == "New York"
- {{name}} exists
**Note**: You can only use variables that are passed in as dynamic variables for equation conditions. If you need to use information extracted by the LLM during the call, you should use prompt conditions instead.
## Passing Dynamic Variables for Outbound Calls
When using the Create Phone Call API, set your variables in the retell_llm_dynamic_variables field: [(1) ]()
json
{
"user_name": "John Smith",
"product_name": "Premium Plan",
"account_status": "active"
}AI Evy
01/25/2026, 7:07 PMAI Evy
01/25/2026, 7:07 PM