Create a new campaign that ties an agent to a schedule, rate, and retry policy.
The campaign will be created in scheduled status. It starts automatically when start_timestamp is reached.
scheduled status and activates automatically when start_timestamp is reached.
Cohorts can be uploaded at any point — before the campaign starts, while it’s active, or after a pause. Each new cohort is processed independently and queued for calling. Start with a small test cohort to validate your agent’s performance, then scale up by uploading larger batches.
start_timestamp must be at least 120 seconds from now and no more than 7 days from nowend_timestamp must be at least 120 seconds after start_timestamp and no more than 30 days after itallowed_schedule defines the business-hours window (timezone, days, time range) within which calls are placed — dials only happen inside this windowattempts_per_second is the rate at which the system places outbound dials. It is a dial rate, not an answer rate — every outbound dial counts as one attempt, regardless of whether it connects.
Range: 0.1 – 500
max_retries: 3 can generate up to 4 attempts total (1 initial + 3 retries).
allowed_schedule window. Use this formula:
| Rate (per sec) | Per minute | Per hour | 8-hour day |
|---|---|---|---|
| 0.5 | 30 | 1,800 | 14,400 |
| 1 | 60 | 3,600 | 28,800 |
| 2 | 120 | 7,200 | 57,600 |
| 5 | 300 | 18,000 | 144,000 |
| 10 | 600 | 36,000 | 288,000 |
retry_config.retry_on:
| Condition | When it triggers |
|---|---|
busy | Callee line was busy |
no_answer | Call rang but was not answered |
short_duration | Call connected but ended sooner than threshold_seconds |
failed | Call failed to connect (e.g., number unreachable) |
provider_error | Telephony provider returned an error |
internal_error | Internal system error |
short_duration in detail
A call is considered short-duration when the user answers but hangs up quickly — before the conversation has a meaningful chance to happen. Common causes: the user didn’t realize it was a call, accidentally answered, or the call dropped immediately after connecting.
threshold_seconds sets the cutoff. Any call that connects and lasts less than this value is treated as incomplete and queued for a retry.
1 – 1200 seconds.
cohort_size × (1 + max_retries).
| Cohort size | max_retries | Max total attempts |
|---|---|---|
| 1,000 | 0 | 1,000 |
| 1,000 | 3 | 4,000 |
| 10,000 | 3 | 40,000 |
attempts_per_second × window is less than this, some users may not complete all retries before the campaign ends.
connection_configs, traffic is split proportionally by weight. With weights 3 and 1, 75% of dials go through the first connection, 25% through the second. Phone numbers within each connection are used equally.
| Situation | Guidance |
|---|---|
| New campaign, untested agent | Start low — validate quality before scaling |
| Large cohort, short window | Raise the rate to cover all users within the window |
| Rate too low | Campaign runs out of time before reaching all users |
| Rate too high | Reduce if you see telephony errors or degraded quality |
| Field | Range / Notes |
|---|---|
app_config.attempts_per_second | 0.1 – 500 |
app_config.retry_config.max_retries | 0 – 20 |
app_config.retry_config.retry_interval_minutes | Min 5 min; accepts a single integer or an array for variable intervals |
app_config.connection_configs[].weight | 1 – 100; default 1 |
start_timestamp | 120 seconds – 7 days from now |
end_timestamp | At least 120 seconds after start; max 30 days from start |
POST /campaignscampaign_id with status: scheduled.
POST /campaigns/{id}/cohorts/uploadcohort_id with status: processing.
GET /campaigns/{id}/cohorts/{cohort_id}status: completed or failed.
result.rejected_records > 0, download and review:GET /campaigns/{id}/cohorts/{cohort_id}/files?file_type=rejected_records
start_timestampscheduled → active.
GET /campaigns/{id} · PUT /campaigns/{id}/status (pause / resume / cancel)
Request body for creating a new campaign. Ties an agent to a schedule, rate, and retry policy.
"Q1 Payment Reminders"
Agent configuration for the campaign
Campaign start time (ISO 8601)
"2026-04-01T09:00:00Z"
Campaign end time (ISO 8601)
"2026-04-15T18:00:00Z"
Schedule constraints for when the campaign can run
Optional campaign description. Max 150 characters.
150Successful Response
Summary metadata for a campaign, returned in list responses.
Name of the resource
Unique identifier for the campaign
Current status
ended, active, paused, scheduled, cancelled ID of the agent
User who created this resource
Timestamp when the resource was created (ISO 8601)
Timestamp when the resource was last updated (ISO 8601)
Optional description
Type of agent
agent Version of the agent to use
User who last updated this resource