Campaign scheduling and lifecycle
A campaign’s schedule controls when it starts and stops dialing. Its concurrency controls how many calls it places at once. After it launches, you can monitor, cancel, duplicate, or archive it, but you cannot edit it.
Schedule a calling window
Dashboard
cURL
The Schedule step provides two timing modes:
The Dashboard lets you schedule up to seven days in advance and uses 15-minute time increments. Select the time zone that should interpret the start and end values.

Calls begin at the start of the window as capacity becomes available. Vapi stops retrying contacts that have not been dispatched by the end of the window.
For both timing modes, Vapi may continue retrying contacts for up to one hour while it waits for concurrency to become available. For a scheduled campaign, retries also stop when the configured end time is reached.
Creating a campaign launches it immediately or schedules it for later; campaigns do not have a saved draft state. After you schedule a campaign, its configuration is read-only and the only available action before it runs is cancellation.
Choose a calling window that complies with the consent, quiet-hours, and telemarketing rules that apply to your recipients and use case.
Scheduling best practices
- Check the calling rules that apply to your recipients. Consent, quiet-hours, and telemarketing regulations vary by location and use case, and they govern when you may call. Confirm the rules for each recipient and choose a calling window that follows them. See the TCPA consent guide.
- Use the recipient’s known time zone. Do not infer location or local time from a phone number’s area code. Mobile numbers can move with their owners, numbers can be ported, and a recipient may live or work somewhere else. Use a verified time zone from your CRM, account profile, address, or stated preference.
- Separate audiences by time zone when possible. A campaign uses one time zone and calling window for every contact. If you have reliable location or time-zone data, create separate campaigns for contacts that need different local calling windows.
- Handle unknown locations conservatively. If you cannot determine a recipient’s time zone, use a window that is safe across the possible locations or exclude the contact until you have better data.
- Account for daylight saving changes. Select a named time zone in the Dashboard and verify campaigns scheduled near a clock change. Avoid calculating local time with a fixed UTC offset.
- Leave enough time to dispatch the audience. Estimate the number and typical duration of calls that can run within the window at your selected concurrency. Add capacity for longer calls and delayed concurrency instead of scheduling the end time immediately after the expected finish.
- Avoid unnecessary overlap. Campaigns share your organization’s concurrency with other inbound and outbound calls. Overlapping campaigns can delay dispatch and leave contacts uncalled when a window closes.
- Check eligibility against your source system. Connect a pre-dial webhook to your CRM or other system of record. Immediately before dialing, it can confirm that the contact is still eligible based on current consent, suppression status, account state, time zone, or other business rules. Return
eligible: falseto skip a contact whose status has changed since the campaign was scheduled. - Review duplicated schedules. A duplicate is a new campaign. Confirm its time zone, start and end times, audience, and calling requirements before launch.
Set campaign concurrency
Max concurrency is the maximum number of calls this campaign can place at the same time. Its effective capacity is also bounded by the concurrency currently available to your organization.
Campaign calls share organization capacity with other inbound and outbound calls. Setting Max concurrency to 10 does not reserve 10 slots for the campaign. If other calls are active, the campaign uses only the slots that remain.
See call concurrency to understand how capacity is shared. When the organization needs more simultaneous calls, purchase additional call concurrency from the Dashboard.
Manage campaigns
Once created, a campaign cannot be edited or rerun. You can monitor it, review its results, or cancel it while it is active. To make another run, duplicate the campaign, review its copied configuration and contacts, then launch the duplicate.
Campaigns support the following management operations:
List and review campaigns
Dashboard
cURL
Open Campaigns to view campaign status, audience, pickup rate, and schedule. Select a campaign to see its summary and contact results.
Duplicate a campaign
Dashboard
cURL
From the Campaigns list, open the actions menu for a campaign and select Duplicate campaign. The new campaign inherits the source campaign’s configuration and contacts unless you replace them during creation.
Review the caller, phone number, contacts, schedule, concurrency, and webhook settings before launching the duplicate. If you do not upload replacement contacts, Vapi copies the source campaign’s contacts. A duplicated scheduled campaign does not reuse an expired calling window when you choose Send now.
Cancel a campaign
Dashboard
cURL
Cancel a queued or in-progress campaign from its list row or detail page. Canceling prevents contacts that have not started from being dispatched. Calls already in progress continue until they end.
Cancellation is final for that campaign. Duplicate it if you need to call the same audience again.
Archive a campaign
Deleting a campaign archives it rather than permanently removing its records. If the campaign is active, Vapi cancels it before archiving.