K Rudy
01/22/2026, 3:00 PMAI Evy
01/22/2026, 3:00 PMAI Evy
01/22/2026, 3:01 PMfrom_number)
- The destination number in E.164 format (to_number)
- Your API key for authorization
- An agent bound to the phone number (or use override_agent_id to specify one)
Example (Node.js) :
javascript
const registerCallResponse = await retell.call.createPhoneCall({
from_number: '+14157774444', // replace with the number you purchased
to_number: '+12137774445', // replace with the number you want to call
// Optional: per-call agent selection and overrides
override_agent_id: 'agent_abc123',
override_agent_version: 0, // or omit to use latest
agent_override: {
agent: {
voice_speed: 1.1,
enable_backchannel: true,
},
// retell_llm or conversation_flow overrides are also supported
},
retell_llm_dynamic_variables: { // dynamic variables (optional, string values only)
name: 'John Doe',
blood_group: 'B+'
},
custom_sip_headers: { // replace with custom sip headers you want to send (optional)
X-Custom-Header: 'Custom Value'
}
}) ;
console.log(registerCallResponse) ;
Before making calls, ensure your phone number has an outbound_agent_id configured, or use the override_agent_id parameter in your request.
For full parameter documentation, see [Create Phone Call API Reference]() .AI Evy
01/22/2026, 3:01 PMAI Evy
01/22/2026, 3:01 PMK Rudy
01/22/2026, 3:02 PMAI Evy
01/22/2026, 3:02 PMAI Evy
01/22/2026, 3:02 PMAI Evy
01/22/2026, 3:02 PMtrigger_timestamp parameter:
- **`trigger_timestamp`**: The scheduled time for sending the batch call, represented as a Unix timestamp in milliseconds. If omitted, the call will be sent immediately.
You can also define allowed calling windows using call_time_window, which lets you specify:
- Time windows in minutes since 00:00 local time
- A specific timezone
- Specific days of the week
Example:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const batchCallResponse = await client.batchCall.createBatchCall({
from_number: '+14157774444',
tasks: [{ to_number: '+12137774445' }],
}) ;
console.log(batchCallResponse.batch_call_id) ;
For single outbound calls via the Create Phone Call API, there is no trigger_timestamp or scheduling parameter documented—those calls are initiated immediately. If you need scheduled calling, use the Batch Call API instead.AI Evy
01/22/2026, 3:02 PMK Rudy
01/22/2026, 3:04 PMAI Evy
01/22/2026, 3:04 PMAI Evy
01/22/2026, 3:05 PMcall_time_window parameter in the Batch Call API to define allowed calling windows in a specific timezone. [(1) ]()
The call_time_window object supports:
- **`windows`**: Half-open intervals [startMin, endMin) in minutes since 00:00 local time
- **`timezone`**: The specific timezone for the windows (e.g., "America/New_York")
- **`day`**: Specific days of the week (e.g., ["Monday"])
Example response structure:
json
{
"call_time_window": {
"windows": [
{
"start": 540,
"end": 1020
}
],
"timezone": "<string>",
"day": [
"Monday"
]
}
}
This allows you to ensure calls only go out during appropriate hours in the recipient's local timezone—for example, setting windows between 9 AM (540 minutes) and 5 PM (1020 minutes) in their timezone. , [(2) ]()
The Batch Call Window feature lets you prevent calls from going out after hours and ensure outreach stays within business rules for the recipient's location.AI Evy
01/22/2026, 3:05 PMAI Evy
01/22/2026, 3:05 PMK Rudy
01/22/2026, 8:44 PMAI Evy
01/22/2026, 8:44 PMAI Evy
01/22/2026, 8:45 PM+14157774444)
- `to_number`: Destination number in E.164 format (e.g., +12137774445)
- `override_agent_id`: The agent ID to use for this call (optional if your number already has an outbound agent bound)
Important notes for your HTTP request: [(2) ]()
- Use POST method
- Include Content-Type: application/json header
- Include Authorization: Bearer YOUR_API_KEY header
- Use override_agent_id (not agent_id)
- Use retell_llm_dynamic_variables for custom data (not custom_data)
For the complete API reference and endpoint URL, see the [Create Phone Call API Reference]() . [(1) ]()AI Evy
01/22/2026, 8:45 PMAI Evy
01/22/2026, 8:45 PMK Rudy
01/22/2026, 8:45 PMAI Evy
01/22/2026, 8:45 PMAI Evy
01/22/2026, 8:46 PM/create-batch-call
Required headers:
- `Authorization`: Bearer YOUR_API_KEY
- `Content-Type`: application/json
Key body parameters:
- from_number (required) : Your Retell number in E.164 format
- tasks (required) : Array of call tasks, each with a to_number
- trigger_timestamp (optional) : Unix timestamp in milliseconds for scheduling—if omitted, calls send immediately
- call_time_window (optional) : Define allowed calling windows with timezone and day restrictions
Example request body:
json
{
"from_number": "+14157774444",
"tasks": [{ "to_number": "+12137774445" }],
"trigger_timestamp": 1735718400000
}
Example response:
json
{
"batch_call_id": "batch_call_dbcc4412483ebfc348abb",
"name": "First batch call",
"from_number": "+14157774444",
"scheduled_timestamp": 1735718400,
"total_task_count": 123
}
For full details, see [Create Batch Call]() .AI Evy
01/22/2026, 8:46 PMAI Evy
01/22/2026, 8:46 PMK Rudy
01/22/2026, 8:48 PMAI Evy
01/22/2026, 8:48 PMAI Evy
01/22/2026, 8:48 PMtasks array. [(1) ]()
When you upload a CSV or create a batch call via API, you provide a list of phone numbers (and optionally dynamic variables for each recipient) within that single batch.
Example structure:
- Prepare your recipient list in CSV format with a header row including a "phone number" column
- For dynamic variables, add additional columns in the CSV with custom data for each recipient (e.g., a column header first_name can be referenced as {{first_name}})
Each batch call request creates one batch containing multiple tasks/recipients. If you need to create entirely separate batch campaigns (with different configurations, schedules, or from-numbers) , you would need to make separate API requests for each batch.
For more details, see [Create Batch calls]() .AI Evy
01/22/2026, 8:48 PMAI Evy
01/22/2026, 8:48 PMK Rudy
01/22/2026, 8:49 PMAI Evy
01/22/2026, 8:49 PMAI Evy
01/22/2026, 8:50 PMPOST /create-batch-call
Headers:
- Authorization: Bearer YOUR_API_KEY
- Content-Type: application/json
Request body with multiple tasks:
json
{
"from_number": "+14157774444",
"tasks": [
{ "to_number": "+12137774445" },
{ "to_number": "+12137774446" },
{ "to_number": "+12137774447" }
],
"name": "First batch call",
"trigger_timestamp": 1735718400000
}
Each object in the tasks array represents a single outbound call. You can also include retell_llm_dynamic_variables within each task to personalize the conversation for each recipient. [(2) ]()
Example response:
json
{
"batch_call_id": "batch_call_dbcc4412483ebfc348abb",
"name": "First batch call",
"from_number": "+14157774444",
"scheduled_timestamp": 1735718400,
"total_task_count": 123
}
[(1) ]()
For full parameter details, see [Create Batch Call]() .AI Evy
01/22/2026, 8:50 PMAI Evy
01/22/2026, 8:50 PMK Rudy
01/22/2026, 8:51 PMAI Evy
01/22/2026, 8:51 PMAI Evy
01/22/2026, 8:51 PMjson
{
"from_number": "+14157774444",
"tasks": [
{
"to_number": "+12137774445",
"retell_llm_dynamic_variables": {
"user_address": "123 Main Street",
"user_age": "35"
}
},
{
"to_number": "+12137774446",
"retell_llm_dynamic_variables": {
"user_address": "456 Oak Avenue",
"user_age": "28"
}
}
],
"name": "First batch call",
"trigger_timestamp": 1735718400000
}
, [(2) ]()
Each task in the tasks array can have its own retell_llm_dynamic_variables object with personalized data for that specific recipient. [(1) ]()
In your agent prompt, reference these variables using double curly braces: [(2) ]()
"Hello {{user_name}}, I understand you're interested in {{product_name}}. How can I help you today?"
Important: All values in retell_llm_dynamic_variables must be strings—numbers, booleans, or other data types are not supported.
If using the dashboard CSV upload method, add additional columns in the CSV with custom data for each recipient (e.g., a column header user_address can be referenced as {{user_address}}) . [(3) ]()AI Evy
01/22/2026, 8:51 PMAI Evy
01/22/2026, 8:51 PMK Rudy
01/22/2026, 8:53 PMAI Evy
01/22/2026, 8:53 PMAI Evy
01/22/2026, 8:53 PMtasks array, as shown in the previous examples. [(3) ]()
So to summarize:
- **Dashboard**: Upload CSV file directly in the UI [(1) ]()
- **API/HTTP request**: Send JSON with a tasks array containing each recipient's phone number and dynamic variables [(3) ]()AI Evy
01/22/2026, 8:53 PMAI Evy
01/22/2026, 8:53 PMK Rudy
01/22/2026, 8:55 PMAI Evy
01/22/2026, 8:55 PMAI Evy
01/22/2026, 8:55 PMcall_time_window parameter in your batch call request. [(1) ]()
Here's how it looks with timezone-specific calling windows:
json
{
"from_number": "+14157774444",
"tasks": [
{
"to_number": "+12137774445",
"retell_llm_dynamic_variables": {
"user_address": "123 Main Street",
"user_age": "35"
}
}
],
"name": "First batch call",
"trigger_timestamp": 1735718400000,
"call_time_window": {
"windows": [
{
"start": 540,
"end": 1020
}
],
"timezone": "America/New_York",
"day": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
}
}
Key parameters for `call_time_window`:
- **`windows`**: Half-open intervals [start, end) in minutes since 00:00 local time (e.g., 540 = 9:00 AM, 1020 = 5:00 PM)
- **`timezone`**: The recipient's timezone (e.g., "America/New_York", "America/Los_Angeles")
- **`day`**: Specific days of the week when calls are allowed
This ensures calls only go out during appropriate business hours in the recipient's local timezone—for example, between 9 AM and 5 PM in their time zone.AI Evy
01/22/2026, 8:55 PMAI Evy
01/22/2026, 8:55 PMK Rudy
01/22/2026, 8:57 PMAI Evy
01/22/2026, 8:57 PMAI Evy
01/22/2026, 8:57 PMcall_time_window is set at the batch level, not per-task, so you only need to specify it once for the entire batch call request. [(1) ]()
However, dynamic variables are specified per-task within the tasks array—each task represents a single outbound call and includes details such as the recipient's phone number and optional dynamic variables to personalize the call content.
Example structure:
json
{
"from_number": "+14157774444",
"tasks": [
{
"to_number": "+12137774445",
"retell_llm_dynamic_variables": {
"user_address": "123 Main Street",
"user_age": "35"
}
},
{
"to_number": "+12137774446",
"retell_llm_dynamic_variables": {
"user_address": "456 Oak Avenue",
"user_age": "28"
}
}
],
"call_time_window": {
"windows": [
{
"start": 540,
"end": 1020
}
],
"timezone": "America/New_York",
"day": ["Monday"]
}
}
So to summarize:
- **`call_time_window`**: Specified once at the batch level, applies to all tasks
- **`retell_llm_dynamic_variables`**: Specified per-task, must be included for each recipient that needs personalized data
If all recipients are in the same timezone, one call_time_window covers them all. If recipients are in different timezones, you would need separate batch calls for each timezone group.AI Evy
01/22/2026, 8:57 PMAI Evy
01/22/2026, 8:57 PMK Rudy
01/22/2026, 8:59 PMAI Evy
01/22/2026, 8:59 PMAI Evy
01/22/2026, 8:59 PMday parameter within call_time_window specifies which days of the week calls are allowed. [(1) ]()
For example, if you set:
json
"day": ["Monday", "Tuesday", "Wednesday"]
Calls will only go out on those specific days within the allowed time windows.
The trigger_timestamp is the scheduled time for sending the batch call, represented as a Unix timestamp in milliseconds.
- If you provide a trigger_timestamp, the batch call will be triggered at that specific time
- If omitted, the call will be sent immediately
How they work together:
- trigger_timestamp determines when the batch call starts processing
- call_time_window with day and windows determines the allowed days and hours for calls to actually go out [(2) ]()
So if your trigger_timestamp is set for a Wednesday but your call_time_window only allows Monday calls, the system will wait until the next Monday within the allowed time window to place the calls.AI Evy
01/22/2026, 8:59 PMAI Evy
01/22/2026, 8:59 PMK Rudy
01/22/2026, 9:01 PMAI Evy
01/22/2026, 9:01 PMAI Evy
01/22/2026, 9:01 PMtasks array once. [(1) ]()
The call_time_window constrains when those calls can go out (e.g., only on Mondays between 9 AM–5 PM) , but it doesn't cause the batch to repeat indefinitely. Once all tasks in the batch have been processed, the batch is complete. [(2) ]()
So if you have 3 recipients in your tasks array and the trigger_timestamp falls on a Wednesday but your call_time_window only allows Monday calls, the system will wait until the next Monday to place those 3 calls—but it won't keep calling them every subsequent Monday.
In short: Each recipient gets called once. The batch completes after all tasks are sent.AI Evy
01/22/2026, 9:01 PMAI Evy
01/22/2026, 9:01 PMK Rudy
01/22/2026, 9:03 PMAI Evy
01/22/2026, 9:03 PMAI Evy
01/22/2026, 9:03 PMAI Evy
01/22/2026, 9:03 PMtrigger_timestamp parameter set to the exact Unix timestamp in milliseconds for when you want the batch to start processing. [(1) ]()
Example: If you're creating the batch on Monday, January 22, 2026 and want calls to start on Tuesday, February 3, 2026 at 9:00 AM EST:
json
{
"from_number": "+14157774444",
"tasks": [{ "to_number": "+12137774445" }],
"trigger_timestamp": 1738587600000,
"call_time_window": {
"windows": [
{
"start": 540,
"end": 1020
}
],
"timezone": "America/New_York",
"day": ["Tuesday"]
}
}
Key points:
- `trigger_timestamp`: Set this to the Unix timestamp (in milliseconds) of the specific date/time you want the batch to begin
- call_time_window with `day`: Restricts which days calls can go out—if your trigger lands on an allowed day within the window, calls start immediately; otherwise the system waits for the next matching day
The trigger_timestamp gives you precise control over the exact start date, while call_time_window ensures calls only happen during your specified days and hours.AI Evy
01/22/2026, 9:03 PMAI Evy
01/22/2026, 9:06 PMK Rudy
01/22/2026, 9:06 PMAI Evy
01/22/2026, 9:07 PMtrigger_timestamp parameter, the batch call will be sent immediately. [(1) ]()
From the documentation:
> trigger_timestamp - The scheduled time for sending the batch call, represented as a Unix timestamp in milliseconds. If omitted, the call will be sent immediately.
So your request would simply look like:
json
{
"from_number": "+14157774444",
"tasks": [{ "to_number": "+12137774445" }]
}
The calls will start processing right away, subject to any call_time_window restrictions you've set. If you have a call_time_window defined but no trigger_timestamp, the system will begin attempting calls immediately but only during the allowed days and time windows.AI Evy
01/22/2026, 9:07 PMAI Evy
01/22/2026, 9:07 PMK Rudy
01/22/2026, 9:08 PMAI Evy
01/22/2026, 9:08 PMAI Evy
01/22/2026, 9:09 PMAI Evy
01/22/2026, 9:09 PMreserved_concurrency parameter to reserve capacity for non-batch calls (like inbound calls)
[(1) ]()
- If you hit the API too many times per second, you'll get a 429 Too Many Requests error
[(3) ]()
So practically speaking, even if the system attempted to call all 100 numbers immediately, concurrency limits would throttle the actual simultaneous calls. The calls would be queued and processed based on available concurrency.
For precise control over call distribution or pacing, you may want to reach out to Retell support or check if there are additional rate-limiting parameters available.AI Evy
01/22/2026, 9:09 PMK Rudy
01/22/2026, 9:10 PMAI Evy
01/22/2026, 9:10 PMAI Evy
01/22/2026, 9:10 PMAI Evy
01/22/2026, 9:10 PMPOST /create-batch-call
Headers:
- Authorization: Bearer YOUR_API_KEY
- Content-Type: application/json
Request body:
json
{
"from_number": "+14157774444",
"name": "First batch call",
"trigger_timestamp": 1735718400000,
"tasks": [
{
"to_number": "+12137774445",
"retell_llm_dynamic_variables": {
"user_address": "123 Main Street",
"user_age": "35"
}
},
{
"to_number": "+12137774446",
"retell_llm_dynamic_variables": {
"user_address": "456 Oak Avenue",
"user_age": "28"
}
}
],
"call_time_window": {
"windows": [
{
"start": 540,
"end": 1020
}
],
"timezone": "America/New_York",
"day": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
},
"reserved_concurrency": 5
}
, [(2) ]()
Quick reference:
- `from_number`: Your Retell phone number in E.164 format (required)
[(1) ]()
- `tasks`: Array of recipients, each with to_number and optional retell_llm_dynamic_variables
- `trigger_timestamp`: Unix timestamp in milliseconds for when the batch starts (omit for immediate)
- `call_time_window`: Allowed calling hours (540 = 9:00 AM, 1020 = 5:00 PM in minutes since midnight)
- `reserved_concurrency`: Slots reserved for non-batch calls like inboundAI Evy
01/22/2026, 9:10 PMK Rudy
01/27/2026, 6:14 AMAI Evy
01/27/2026, 6:14 AMAI Evy
01/27/2026, 6:15 AMignore_e164_validation parameter is documented for the Create Phone Call endpoint (single outbound calls) , not for the batch call endpoint. [(1) ]()
For single phone calls, you can add:
json
"ignore_e164_validation": true
However, for batch calls via CSV upload in the dashboard, you can add a column named ignore e164 validation with value true for each recipient. [(2) ]()
I don't have explicit documentation showing that ignore_e164_validation is a supported parameter in the batch call API request body. The batch call API documentation doesn't list this as an available field. [(3) ]()
Important note: This option only applies when you are using custom telephony and does not apply when using Retell Telephony. [(2) ]() , [(1) ]()
If you need to disable E.164 validation for batch calls via API, I'd recommend:
1. Checking if the parameter works by testing it in your request
2. Reaching out to Retell support for confirmation
Check out these potentially useful sources:
- [Create Batch Call]()
- [Create Phone Call]()
- [Create Batch calls]()AI Evy
01/27/2026, 6:15 AMAI Evy
01/27/2026, 6:15 AM