An AI agent campaign places outbound calls with a virtual agent instead of a person. There is no queue and no agent sitting at a desk: SESTEK AgenticCX dials the contact, connects the call to the AI agent project you name, and records the result. You can run an AI agent campaign in two ways. A Planned campaign works through a list of contacts on a schedule, and an Instant campaign is always on and waits for another system, such as a web form or your CRM, to ask for each call.
This article explains what is different about AI agent campaigns, how Planned and Instant campaigns compare, and how an external system sends call requests to an Instant campaign. To build a campaign form step by step, see the article on creating and editing a campaign.
Open it from Campaigns in the left menu.
Watch the walkthrough
How an AI agent campaign differs from a human agent campaign
| Human agent campaign | AI agent campaign | |
|---|---|---|
| Who takes the call | An agent in Agent Desktop | The AI agent project named on the campaign |
| Queue | Required | None. An AI agent campaign cannot be assigned to a queue |
| Wrap-up codes | Chosen on the campaign and by the agent after the call | None |
| Before-Call Work and After-Call Work | Yes | None |
| Where the AI agent is set | Not applicable | AI Agent Project Name, required, up to 200 characters |
| How a contact is completed | The agent selects a wrap-up code | An answered call completes the contact automatically |

In the list, a sparkle icon in front of the name marks an AI agent campaign, and the Queue / AI Agent column shows the AI agent project instead of queues. To see only AI agent campaigns, select Filters, choose Agent Type and tick AI Agent.

Planned or Instant
| Planned | Instant | |
|---|---|---|
| Who decides which contacts are called | You, by choosing contact segments | An external system, one call request at a time |
| Start and end dates | Required | Not used |
| Contact segments and target contacts | Segments required, target optional | Not used |
| Completes by itself | Yes: target reached, all contacts exhausted or end date reached | Never. Only you can complete it |
| Progress column | A progress bar with the completed and target counts | The number of calls, for example 0 calls |
You choose the trigger mode in the Trigger Mode field when you create the campaign. It cannot be changed afterwards.

Create an AI agent campaign
Select New Campaign, choose AI Agent and select Next.

The agent type cannot be changed after the campaign is created. The Planned form asks for a name, start and end dates, the AI agent project name, contact segments, an optional target and an outbound number, with Call Window and Call Rules sections you can expand.

When you switch Trigger Mode to Instant, the dates, the segments and the target disappear, and the form shows: Instant campaigns are always-on and targetless: an external form or API injects each call request on demand.

| Field | Required | Notes |
|---|---|---|
| Campaign Name | Yes | Up to 100 characters |
| AI Agent Project Name | Yes | Up to 200 characters. Spaces alone are not accepted. It cannot contain {, } or ' |
| Trigger Mode | Planned (default) or Instant | |
| Outbound Number | The default number is preselected. You can clear it | |
| Call Window | At least one open day for Instant | Each day has a start and end time and a switch. By default Monday to Friday are open from 09:00 to 18:00 |
| Maximum Attempt Count | Yes for Instant | Default 5. Maximum number of call attempts per contact |
| Wait Between Calls (minutes) | Yes for Instant | Default 30. Minimum wait between consecutive attempts |
If you switch every day off on an Instant campaign, the form shows An instant campaign needs at least one open call window. and Create stays disabled. If you clear Maximum Attempt Count or Wait Between Calls (minutes), the form shows This field is required.

Manage an Instant campaign
Select the menu icon at the end of a row.

| Action | What it does |
|---|---|
| Pause | Stops the campaign from placing calls. Requests you send while it is paused are not accepted |
| Complete | Ends the campaign for good |
| Edit | Changes the campaign. Trigger Mode is locked |
| Copy | Starts a new campaign from this one |
Completing an instant campaign cannot be undone. It can never be started again, and any external system using its Campaign ID will stop working. Use Pause if you only need a break.
An AI agent campaign also pauses by itself when many consecutive call attempts fail for a system reason, for example when no active outbound number is configured. It does not resume on its own: fix the cause, then start the campaign again.
The campaign detail page
Select a campaign name to open it.

The header shows the status, the AI Agent and Instant badges, the Campaign ID, the AI agent project, the maximum attempt count and the wait between calls, and the total number of calls. Below it are three tabs.
- Contacts lists the contacts in the campaign with their status, attempts and next eligible time. On an Instant campaign it fills as call requests arrive.
- Activity Log records what the campaign did, with time, action, result, rule and detail. Entries are kept for 90 days.
- Dial pipeline shows the four stages every call passes through: Pacing planner, Queueing, Origination and Call outcome, with a sentence that explains the current state, for example No call request is waiting; the campaign is ready for the next trigger.


Send call requests from another system
The Campaign ID in the header is the number your integration uses. It does not change when you rename the campaign. Select the </> icon next to it to open Copy as cURL (ext-api). The window lists the five campaign endpoints of the external API. Selecting one copies its cURL command to your clipboard. Replace the placeholders in angle brackets before you run it.

Authentication
Request an access token with the OAuth client credentials flow, with the scope AgenticCXExternal, using the client ID and secret SESTEK gave you. Send the token on every request as Authorization: Bearer <YOUR_ACCESS_TOKEN>. You do not send a tenant: it is taken from the token.
The five endpoints
| Method | Path | What it does |
|---|---|---|
| GET | /ext-api/v1/campaign/{campaignId} | Returns the campaign |
| POST | /ext-api/v1/campaign/{campaignId}/call-requests | Submits one or more call requests |
| GET | /ext-api/v1/campaign/{campaignId}/call-requests | Returns a page of the submitted requests, newest first |
| GET | /ext-api/v1/campaign/{campaignId}/call-requests-summary | Counts the requests by admission outcome and call state |
| GET | /ext-api/v1/campaign/{campaignId}/call-requests/{clientReferenceId} | Returns what was submitted under one reference and what became of it |
A request body holds up to 100 items. Each item is one person to call, and the clientReferenceId is your own key (for example an order number). Sending the same key again never creates a second call: you get the first result back.
| Field | Required | Limit |
|---|---|---|
items | Yes | 1 to 100 items |
clientReferenceId | Yes | Up to 128 characters. It cannot contain /, \, %, ? or # |
contact.phoneNumber | Yes | Up to 30 characters |
contact.name | Yes | Up to 200 characters |
contact.email | No | A valid address, up to 256 characters |
locale | No | Up to 16 characters |
parameters | No | Up to 20 key and value pairs. Key up to 64 characters, value up to 512 characters, 4,000 bytes in total |
What happens to each request
The response is always successful, and each item carries its own result in status.
| Status | Meaning |
|---|---|
Queued | The contact joined the campaign. The call follows shortly |
Deferred | Accepted, but the call window is closed. nextEligibleAtUtc tells you when the call can happen |
Merged | That person already had a call coming, so the request joined it. No second call is placed |
Rejected | Not accepted. rejectionReason is ContactPhoneInvalid, AdmissionContended or AdmissionFailed. The last two can be sent again |
Accepting a request does not mean the call has started. The call follows the campaign's call window, maximum attempt count and wait between calls, and it usually begins within about 15 seconds.
If the campaign cannot take requests at all, the whole body is refused with these error codes.
error.code | Meaning |
|---|---|
AgenticCX:ExternalApi:CampaignNotFound | No campaign with this ID in your tenant |
AgenticCX:ExternalApi:CampaignNotInstantTrigger | The campaign is not an Instant campaign |
AgenticCX:ExternalApi:CampaignNotActive | The campaign is paused or completed |
AgenticCX:ExternalApi:CampaignOutsideDateWindow | The campaign is outside its own start and end dates |
The state of a call is reported in call.state: NotStarted, Scheduled, Dialing, Completed, Cancelled or Failed. NotStarted is the normal state between acceptance and the first attempt.
For a step by step guide with examples, paging, date filters and retry guidance, see Triggering Instant Campaigns with the API. The full contract is in the External API article under Technical Documents.
Good to know
- The external API reports every time in UTC (fields ending in
Utc). - A request for a person who already has a call coming is merged, so the
parametersof the merged request are not used in that call. - The platform does not publish a request rate limit for the external API at this time.
- Calls are placed only inside the call window. Requests sent outside it are accepted as
Deferredand called when the window opens.
