Campaigns
Run outbound calling campaigns with AI assistants, contact queues, scheduling, and retry logic that dial automatically within your rules.
curl -X POST "https://api.talkturo.com/api/crm/campaigns" \
-H "Authorization: Bearer tk_example_9xmk7q2r" \
-H "Content-Type: application/json" \
-d '{
"name": "Q4 reactivation campaign",
"assistantId": "asst_7d92f4a1",
"companyId": "cmp_31ab82d9",
"fromNumberIds": [
"9f8d1c5f-3c31-45b7-8ef1-72e4b53e6b11"
],
"scheduledStartAt": "2026-09-15T14:00:00Z",
"callWindowStart": "09:00",
"callWindowEnd": "17:00",
"callWindowTimezone": "America/New_York",
"maxConcurrentCalls": 4,
"maxAttemptsPerContact": 3,
"retryDelayMinutes": 120
}'
{
"id": "camp_4bc91e27",
"name": "Q4 reactivation campaign",
"status": "scheduled",
"assistantId": "asst_7d92f4a1",
"companyId": "cmp_31ab82d9",
"fromNumberIds": [
"9f8d1c5f-3c31-45b7-8ef1-72e4b53e6b11"
],
"scheduledStartAt": "2026-09-15T14:00:00Z",
"callWindowStart": "09:00",
"callWindowEnd": "17:00",
"callWindowTimezone": "America/New_York",
"maxConcurrentCalls": 4,
"maxAttemptsPerContact": 3,
"retryDelayMinutes": 120
}
Run outbound campaigns at scale
Campaigns are Talkturo's outbound calling system. A campaign pairs an AI assistant with a contact list, a set of phone numbers, and calling rules, then dials contacts automatically according to the schedule and retry behavior you define.
The campaign engine checks for work every 30 seconds. When a campaign is active and inside its call window, the engine pulls eligible contacts from the queue and starts calls based on your campaign settings.
Campaigns are for outbound calling only. The assistant you attach to a campaign must support outbound calls.
How campaigns work
A campaign moves through a predictable lifecycle. You set it up once, enroll contacts, define the rules, and then let the dialing engine work through the queue.
Create the campaign
Create a campaign and connect it to an assistant, a company, and one or more outbound phone numbers.
At this stage, the campaign is usually still in draft until you add scheduling or start it manually.
Enroll contacts
Add contacts from your CRM, import them in bulk, or manually select the records you want to call.
Contacts become campaign contacts and enter the queue with their own delivery status.
Define dialing rules
Configure when calls are allowed, how many attempts each contact should receive, how long to wait before retries, and how many calls can run at once.
These rules control who gets called, when they get called, and how the queue advances.
Start or schedule the campaign
Start the campaign immediately or set a future start time.
If you schedule it, the cron-driven engine launches it automatically when the start time arrives, as long as the account has enough credits.
Monitor and adjust
Watch campaign activity in real time and pause the campaign if you need to change configuration.
Running campaigns continue processing contacts every 30 seconds until all eligible contacts are handled or the campaign is paused, completed, or cancelled.
Campaign statuses
Campaigns use a small set of statuses that tell you whether they are ready, waiting, dialing, or finished.
| Status | Meaning |
|---|---|
draft | Created but not yet scheduled or launched. |
scheduled | A future start time is set. The engine launches the campaign automatically when that time arrives. |
running | The campaign is actively dialing contacts. |
paused | Dialing is halted, but enrolled contacts stay in the queue. |
completed | All contacts have been processed. |
cancelled | The campaign was stopped manually and will not resume. |
Understand status transitions
Most campaign behavior comes down to a few important state changes. Knowing these transitions helps you predict when a campaign will start, pause, or stop.
Common transitions
| Transition | What causes it |
|---|---|
draft → scheduled | Set scheduledStartAt to a future launch time. |
scheduled → running | The start time arrives and the account has sufficient credits. |
scheduled → paused | The start time arrives, but the account does not have enough credits to launch. |
running → paused | You pause the campaign manually, or credits run out while the campaign is active. |
running → completed | All contacts are processed, unless automatic completion is disabled. |
completed / cancelled | These are terminal states and cannot return to active states. |
You cannot change core campaign configuration while a campaign is running. Pause the campaign first, make your changes, and then resume it.
What completion means
A campaign reaches completed when it has no more work to process. In practice, that means every enrolled contact has been called, skipped, failed, or otherwise moved out of the active queue.
If your workflow disables automatic completion, the campaign may stay out of the normal completion path even after the queue is empty. Use real-time campaign stats to confirm whether work is still pending.
Create a campaign
You need four required fields to create a valid campaign. Everything else controls scheduling, concurrency, retries, and integrations.
Required fields
The assistant assigned to the campaign. The assistant must be outbound-enabled.
The company the campaign belongs to. The company must belong to your workspace.
One or more outbound phone number UUIDs the campaign can dial from.
A non-empty campaign name.
Optional fields
Short internal context for the campaign.
Future start timestamp. Setting this moves a campaign from draft to scheduled.
The daily time when calling can begin.
The daily time when calling must stop.
Timezone used to interpret the call window.
Maximum number of calls the campaign can run at the same time.
Maximum number of call attempts allowed for each contact.
Delay between retry attempts for the same contact.
Additional campaign behavior settings.
Webhook destination and related delivery settings for campaign events.
Example create request
Campaign API
Use these endpoints to create campaigns, manage contacts, control execution, and read live stats.
| Endpoint | Method | Purpose |
|---|---|---|
/api/crm/campaigns | GET | List campaigns with filters. |
/api/crm/campaigns | POST | Create a campaign. |
/api/crm/campaigns/[id] | GET | Get campaign details, including contacts. |
/api/crm/campaigns/[id] | PUT | Update campaign fields and apply status transitions. |
/api/crm/campaigns/[id] | DELETE | Soft delete a campaign. Only draft or cancelled campaigns can be deleted. |
/api/crm/campaigns/[id]/run | POST | Start or stop a campaign. |
/api/crm/campaigns/[id]/contacts | POST | Enroll contacts into a campaign. |
/api/crm/campaigns/[id]/dashboard | GET | Read real-time campaign statistics. |
Work with campaign contacts
Campaigns do not dial CRM contacts directly. They dial campaign contacts, which are enrolled records tracked inside a specific campaign.
Enrollment methods
You can add contacts to a campaign in three ways:
- All eligible contacts through audience mode
- Manual selection by contact IDs
- Inline create and enroll when you need to add a new contact directly into the campaign
If a contact is marked DNC, Talkturo still records the enrollment but marks that contact as skipped automatically.
Contact statuses
Each enrolled contact moves through its own delivery state as the campaign progresses.
| Contact status | Meaning |
|---|---|
pending | Enrolled but not yet prepared for dialing. |
queued | Ready to be picked up by the dialing engine. |
calling | A call attempt is currently in progress. |
completed | The contact finished the campaign flow successfully. |
skipped | The contact was not dialed, including DNC contacts. |
failed | The campaign could not complete the contact after processing. |
Queue ordering
When multiple contacts are ready at the same time, Talkturo processes them in this order:
- Higher
priorityfirst - Earlier
created_atfirst when priority is the same
That ordering is equivalent to priority DESC, created_at ASC. If you rely on careful sequencing, set contact priority before the campaign begins.
Credits and campaign execution
Campaigns need credits available at launch time and while they are running. Credits affect both whether a campaign can start and whether it can keep dialing.
A campaign needs at least 1.0 credits to run. If credits drop below the required threshold, Talkturo pauses the campaign automatically.
When a scheduled campaign reaches its launch time, Talkturo checks account credits before moving it to running. If the account does not have enough credits, the campaign moves to paused instead of dialing contacts.
After you add credits, suspended phone numbers are reactivated. You can then resume the paused campaign and continue processing the existing queue.