Batch Calls & Campaigns Overview
Batch calls (campaigns) let you run high-volume outbound calling while keeping control over:- Who to call (contacts and folders)
- Which agent to use
- When to call (time windows, timezones, daily caps)
- How to monitor and optimize results
Who this is for
- Teams running outbound sales, renewals, collections, or large notification campaigns.
- Developers wiring the batch calling API and webhooks into internal tools.
Key objects in a campaign
Every campaign ties together:- Agent – The voice and behavior for all calls in the campaign.
- Outbound numbers – One or more telephony numbers to place calls from.
- Contact source – How you pick who to call:
- A contact folder (recommended).
- Explicit
contact_ids. - Inline
contactsprovided in the create request.
- Schedule – When to run:
schedule_type,scheduled_at,timezone.- Daily window:
start_time,end_time,working_days. - Volume:
max_calls_per_day,max_concurrent_calls.
Lifecycle and statuses
Campaigns move through a clear lifecycle:draft– Created, contacts attached, settings editable. Nothing is scheduled yet.scheduled– Contacts havescheduled_attimestamps and are waiting to fire.active– Calls are currently being placed by the scheduler.paused– Scheduler is halted; future calls are held until you resume.completed– All contacts have reached a terminal status.failed– A configuration or scheduling error prevented the campaign from running.cancelled– Manually stopped and will not resume.
Scheduling model (high level)
When you schedule a campaign, the engine:- Validates that:
- The agent is ready (voice synced, etc.).
- At least one outbound number is available.
- There is at least one contact.
- Distributes contacts across days using:
- The campaign
timezone. working_days(e.g. Mon–Fri).- Daily window (
start_time,end_time). max_calls_per_day.
- The campaign
- Assigns each campaign contact its own
scheduled_attimestamp. - A background job wakes up, finds due contacts, and spawns calls respecting concurrency limits.
scheduled_at for future contacts without disturbing those already completed.
Pause, resume, and edits
Truedy supports safe operations on live campaigns:- Pause – Stops the scheduler and prevents future calls from firing.
- Resume – Restarts the scheduler, keeping already completed contacts intact.
- Edit settings – For many statuses (draft, scheduled, paused, and in some cases active), you can adjust windows, caps, and even which days to call.
- The API reference includes the exact endpoints for scheduling and pausing:
- See Schedule Batch Call
- See Pause Batch Call
Monitoring and analytics
For each campaign you can see:- Total contacts, completed, failed, voicemail, no-answer.
- Average call duration, total minutes and cost.
- A per-contact view with call outcomes and error reasons.
- The batch-calling dashboard.
/batch-calls/{id}/analyticsin the Public API.- Webhooks (e.g.
batch.status.changed,batch.completed).
When to use campaigns vs single calls
Use single calls (POST /calls) when:
- You trigger calls one-by-one based on user actions or events.
- Volumes are small or sporadic.
- You need to call many contacts on a schedule.
- You care about pacing, daily caps, and time-of-day targeting.
- You want consolidated analytics for a specific initiative.
Next steps
- Prepare data: Contacts API
- Build: Batch Calls API
- Control: Schedule/Pause endpoints
- Measure: Batch Call Analytics

