Purpose

The campaign detail page is where you run and watch a single campaign. It shows the campaign’s current status, a live feed of what the dialler is doing right now, call-level performance metrics, a paginated list of every contact with its full attempt history, the API integration reference, and a read-only snapshot of the campaign’s settings. Open it by clicking any campaign on the campaign list, or go directly to /dashboard/campaigns/{id}. The page has three areas this guide covers:

Detail / Monitor

The header action bar, live activity, stats, callbacks, and the call list with per-attempt trail.

Integration tab

API reference and copy-paste code for adding contacts (Trigger) and suppressing contacts (Exclude).

Config panel

A read-only, audit-friendly summary of every setting used for the current run.

Campaign statuses

The coloured badge next to the campaign name tells you what state the campaign is in. The status also decides which action buttons appear.
StatusBadge colourMeaning
draftGreyCreated but not dialling. Editable. Can be started, edited, cloned, or deleted.
runningGreenThe dialler can pick up pending and retryable contacts. Can be paused, stopped, or have contacts added.
pausedAmberDialling is paused. Some in-flight calls may still finish. Can be resumed, edited, or stopped.
completedBlueThe campaign stopped, or every contact reached a final state. Can be restarted or cloned.
failedRedThe campaign hit a failure condition. Can be restarted or cloned. Escalate if the cause is unclear.
An Always-on · runs until stopped badge (purple) appears next to the status when the campaign is configured to never auto-complete. These campaigns stay running and accept new contacts over time until you stop them manually. See Always-on campaigns.

The header and action bar

The top of the page shows the campaign name, status badge, the short Campaign ID with a copy-to-clipboard button, and a lifecycle grid. Below the name sit the action buttons. Which buttons appear depends on the status — you will never see all of them at once.

Lifecycle grid

A four-column grid summarising the campaign’s history. Each cell shows a timestamp and, where relevant, the user or a note.
CellWhat it shows
CreatedWhen the campaign was created, and by whom.
Current RunWhich run number is active (Run #1 is the original; higher numbers are restarts).
RestartedWhen the campaign was last restarted, and by whom. Blank if never restarted.
CompletedWhen the campaign reached a completed state.

Action buttons

ButtonAppears whenWhat happens when you click
Campaigns (back arrow)AlwaysReturns you to the campaign list.
Editdraft or pausedOpens the campaign edit wizard. See Create a campaign.
CloneAlwaysCopies the whole campaign (settings, number pool, contacts) into a new campaign and opens that new campaign’s detail page.
Activity (count)Only if an activity log existsOpens the Activity Log modal listing every start, pause, resume, and stop action with timestamps and user names.
Attempt ReportAlwaysDownloads an attempt-level CSV report. See Attempt report.
Restartcompleted or failedAsks you to confirm, then prepares a fresh run and returns the campaign to draft. It does not start dialling. See Restart a campaign.
Cancel RestartOnly when a restart is prepared but not startedAsks you to confirm, then discards the prepared run and restores the previous completed run. See Restart a campaign.
StartdraftBegins dialling. The campaign moves to running.
ResumepausedContinues dialling. The campaign moves back to running.
Pause (amber)runningStops placing new calls. The campaign moves to paused. In-flight calls may still finish.
Add contacts (CSV)runningOpens a file picker; the chosen CSV is appended to the live campaign. The file must contain a phone_number column. See Add contacts to a live campaign.
Stop (red)running or pausedAsks you to confirm, then ends the run and marks the campaign completed. This is irreversible for that run.
Delete (red)draft, never run, no restart historyAsks you to confirm, then permanently deletes the campaign and its uploaded contacts.
Details tabAlwaysShows the stats, live activity, call list, and config panel. Active by default.
Integration tabAlwaysShows the API integration reference.
Stop and Delete are destructive. Stop ends the current run permanently — you cannot un-stop it, only restart into a new run. Delete removes the draft campaign and every contact you uploaded to it. Both ask you to confirm first.
The Edit button only shows for draft and paused campaigns. Once a campaign has run for the first time, its name, bot, and uploaded contacts are locked so that old and new attempts stay audit-safe. You can still rotate outbound numbers and adjust dialler settings before pressing Start. If you need a different bot or contact set, use Clone instead.

Live activity

While a campaign is running or paused, a live activity panel shows what the dialler is doing in real time. It refreshes automatically every few seconds. The panel header changes colour to signal health at a glance:
IndicatorMeaning
Live Activity (green)The dialler is actively placing calls. A green dot shows when calls are ringing.
Idle — Waiting for retries (amber)No calls have been dialled recently (about 30 seconds). Usually means everyone callable is waiting on a retry delay.
Paused — Outside time window (orange)The current time is outside the campaign’s calling window, so the dialler is holding.
The panel shows these live counters:
CounterWhat it means
RingingCalls currently ringing but not yet answered.
In ProgressCalls connected to the bot right now.
Dials/secHow many new calls are being placed per second. Shows -- when idle.
Connected/hrThe projected connected-call rate per hour. Shows -- when idle.
Avg Ring TimeAverage time calls spend ringing before they are answered or give up.
Last DialHow long ago the last call was placed (for example 8s ago, 3m ago). Turns orange if it has been more than 30 seconds, which is a hint that dialling has stalled.

Pass breakdown

Below the counters, a pass breakdown table shows how the campaign has progressed through its dialling passes. The dialler makes a full first pass over every contact before it begins retries, so a pass corresponds to a wave of attempts.
ColumnWhat it shows
Pass #Which dialling pass this row describes (Pass 1 is the first attempt for every contact).
Attempted / EligibleHow many contacts in that pass have been attempted versus how many were eligible.
Connected %The share of that pass’s attempts that connected.
Time rangeWhen the pass started and ended (or “still running”).
A pass row is green once it has started and grey before it begins.
If Last Dial is orange and Live Activity reads “Idle”, the campaign is usually just waiting for retry timers, not broken. If it stays idle far longer than your retry delay, check the troubleshooting guide.

Progress and metrics

Progress bar

A progress bar shows how much of the campaign is done. “Processed” means every contact that has reached a final outcome — completed, failed, abandoned, machine-detected, window-closed, or manually-stopped. For a finished campaign, the bar’s metadata switches to performance figures such as total connected, dials per second, connected per hour, and calls per minute. When the dialler can estimate one, an ETA appears as ~XhYm.

Stats grid

A grid of counters summarises the contact pool. Not every cell appears for every campaign — some only show when their count is above zero.
StatWhat it counts
TotalAll contacts in the campaign.
PendingContacts not yet attempted.
ConnectedContacts whose call reached the bot.
CompletedContacts whose conversation finished and a result was stored.
UnansweredContacts that rang but were not answered.
Retries LeftAttempts still available across the pool.
True Abandons / AbandonedAnswered calls that found no free worker to take them. Counts against the abandon rate.
AMD MachineCalls detected as an answering machine and torn down. Shown only when above zero. See Answering machine detection.
Window ClosedContacts still waiting when a single-day calling window ended. Shown only when above zero.
Manually StoppedContacts still waiting when an operator stopped the campaign. Shown only when above zero.

Headline metrics

A green metrics strip shows the four numbers you will report on most:
MetricWhat it means
Answer Rate %Share of attempts that were answered.
Completion Rate %Share of connected calls that completed a conversation.
Abandon Rate %Share of answered calls abandoned because no worker was free.
AHT (seconds)Average handle time — the average length of a connected conversation.
When you reconcile billing, always compare these in-console metrics against your carrier’s own call reports. The console counts conversations and outcomes; the carrier counts SIP minutes. They will not always match line-for-line.

Callbacks panel

When callback detection is enabled for the campaign, a callbacks panel appears with its own counters and a set of filters above the call list. The panel shows: Callbacks requested, Callbacks pending, Callbacks completed, and the average delay before a callback is dialled. The filter buttons restrict the call list to a callback state. The active filter is highlighted.
Filter buttonShows
All callsEvery call, no callback filter.
Callbacks requestedCalls where the customer asked to be called back.
Callbacks pendingScheduled callbacks still waiting to be dialled.
Callbacks completedCallbacks that reached a final state.
Callbacks cancelledCallbacks that were cancelled — for example, a single-day window closed before they were due.
A small blue Callback badge appears next to a call’s status when a callback is scheduled for it. The full lifecycle is covered in Callbacks.
The callbacks panel and its filters only appear when callback detection is switched on in the campaign’s dialler configuration. If you do not see them, the campaign is not detecting callbacks.

Call list and attempt trail

The call list is a paginated table — 50 contacts per page — showing every contact and how its calls went.
ColumnWhat it shows
PhoneThe contact’s phone number.
StatusA badge showing the contact’s current call state (for example connected, completed, abandoned, excluded). A blue Callback badge sits alongside it when a callback is scheduled.
AttemptsHow many attempts have been made out of the maximum, shown as X/max.
Attempt TrailA compact grid of each attempt — its number, outcome, and time.
Last ResultThe most recent outcome for the contact.
VariablesThe contact’s metadata (the values uploaded with the contact or sent via the Trigger API).

Reading an attempt

Each item in the attempt trail represents one dial. Hover over an attempt to see its full detail:
Attempt [#], From: [number], Started: [time], Ended: [time] or “Still open”, Session: [id], Reason: [SIP reason]
The attempt detail includes the attempt number, the outcome, the timestamp, the last 8 characters of the attempt ID, and — when the failure is not one of the friendly mapped reasons — the raw SIP error code.
The dialler maps the most common SIP codes to friendly labels in the attempt trail. A few you will see often:
CodeFriendly meaning
408No answer — the call rang and timed out.
486Line busy.
Codes without a friendly label show the raw number. A SIP code is not always a “dead” number — many codes appear only after the call rang for some time, which means the contact simply did not pick up. Treat repeated, instant failures differently from failures that follow a long ring.

Pagination

ButtonWhat happens
PreviousGoes to the previous page of contacts. Disabled on the first page.
NextGoes to the next page of contacts. Disabled on the last page.
The footer shows the total number of contacts so you know how many pages there are.

Notices on the detail page

Depending on the campaign’s state, you may see one of these inline notices:
NoticeWhen it appearsWhat it tells you
Completion reason (blue)Status is completedWhy the campaign finished — for example “All contacts reached a final state”, “Max retries completed”, “Calling window ended”, “Manually stopped”, or “No callable contacts”.
Manually stopped (yellow)The campaign was stopped by handWho stopped it and when.
Prepared restart (inline)A restart is prepared but not started”Run #[N] is prepared, not started” with who restarted it and when, plus a Cancel Restart button. Review the editable settings, then press Start.

Restart a campaign

Restarting prepares a fresh run on the same campaign so the original and new attempts stay together under one campaign identity. It does not dial automatically — you press Start when you are ready.
1

Click Restart

On a completed or failed campaign, click Restart.
2

Confirm

A confirmation appears:
Prepare this campaign for a new run? This resets call attempts and returns it to draft. It will not start dialling until you press Start.
Confirm to proceed, or cancel to leave the campaign as it is.
3

Review the prepared run

The campaign returns to draft with a higher run number, and the prepared-restart notice appears. You can adjust the outbound number pool and dialler settings (but not the name, bot, or contacts).
4

Start, or cancel

Press Start to begin the new run. If you change your mind, click Cancel Restart — confirm the prompt (“Cancel the prepared Run #[N] and restore the previous completed run?”) and the previous completed run is restored.

Add contacts to a live campaign

For a running campaign, Add contacts (CSV) appends new contacts without interrupting dialling.
1

Click Add contacts (CSV)

A file picker opens.
2

Choose a CSV with a phone_number column

The file must contain a phone_number column, the same as a campaign upload. See Upload leads.
3

Contacts are appended

The new contacts join the live pool and become eligible for dialling.
Adding contacts by CSV is the manual equivalent of the Trigger API. Use the CSV when you have a batch on hand; use the Trigger API when a CRM should add contacts automatically.

Attempt report

The Attempt Report button exports an attempt-level CSV — one row per dial, not one per contact — for audit and client sharing. While the report builds you see Preparing…, then a streaming indicator showing rows and size (for example “Downloading 4,120 rows · 1.8 MB”). When it finishes, a toast confirms the row count. The button is disabled while a download is in progress, so you cannot start two at once. Use the attempt report for:
  • final campaign reconciliation
  • spotting SIP status patterns
  • diagnosing retry behaviour
  • finding numbers with repeated failures
  • confirming the dispositions returned by the bot’s post-call analysis

Activity log

The Activity button (which shows a count) opens the Activity Log modal. It lists every start, pause, resume, and stop action in reverse chronological order — most recent first — with the user who performed each action and when. Close it with the × button in the top-right corner.

Integration tab

The Integration tab gives you API references and copy-paste code for managing a campaign’s contacts programmatically. It has two sections: Trigger (add contacts) and Exclude (suppress contacts). Each section provides code snippet tabs and a copy button:
ControlWhat it does
curl / Python / Node.js tabsSwitch the displayed code example between the three languages.
Copy buttonCopies the shown snippet to your clipboard.

Trigger API — add a contact

Adds one contact to the campaign and dials it (or queues it). Sample numbers are shown in international +91… format. Endpoint: POST /api/v1/campaigns/trigger Request body
FieldWhat to send
campaign_idThe campaign to add the contact to.
mobileThe contact’s phone number in international format.
metadataKey-value pairs that reach the bot prompt as variables.
Request headers
HeaderPurpose
X-API-KeyYour API key. Required. See API keys.
Idempotency-KeyOptional but recommended. Lets you retry safely without dialling the same contact twice.
Response status values
ValueMeaning
dialledThe contact was added and dialling started.
queuedThe contact was accepted and is waiting (for example, until the calling window opens).
Error responses
CodeMeaning
401Missing or invalid API key.
404Campaign not found.
409Conflict — for example, an out-of-hours trigger on a single-day campaign (see warning below).
422The request body failed validation.
On a single-day campaign, the Integration tab shows a blue notice: triggers received outside the calling window are rejected with a 409, because they cannot survive the window-close sweep. If you need to queue out-of-hours triggers, use a multi-day campaign. See Create a campaign.

Exclude API — suppress a contact

Marks contacts so the campaign will not dial them. You target by phone number or by a metadata account key. Endpoint: POST /api/v1/contacts/exclude Request body
FieldWhat to send
campaign_idThe campaign to exclude the contact from.
mobileThe contact’s phone number, when excluding by number.
matchA metadata key (or up to two keys) to match on, when excluding by account key instead of number.
reasonAn optional note recorded with the exclusion.
You can target by an account key from the contact’s metadata rather than the phone number. You may combine up to two keys; combined matching uses AND logic, so both keys must match for a contact to be excluded. The match keys are the same metadata keys you send with triggers and uploads. The response includes a matched count — how many contact rows the selector affected. Error responses
CodeMeaning
401Missing or invalid API key.
404Campaign not found.
422The request body failed validation.
Whether an excluded contact can be re-added later depends on the campaign’s Sticky exclusion setting. With sticky exclusion on, an excluded contact stays suppressed even if it is re-added by CSV or API. With it off, deliberately re-adding a contact lets it dial again. You can see this setting in the config panel.

Config panel

On the Details tab, a read-only Campaign Config panel summarises every setting used for the current run. The header shows Run #[N] so you know which run (original or restart) these settings belong to. Nothing here is editable — to change settings, use Edit (on a draft or paused campaign). The panel lays out settings in a two-column grid. Each entry shows a label, the value, and sometimes a small note (a timezone, a preview, or a count).
SettingWhat it shows
Bot IDThe bot attached to the campaign.
ConcurrencyThe maximum number of simultaneous connected calls.
Time WindowThe daily calling window, with its timezone as a note.
Working Days”All days” when all seven are selected, otherwise the day abbreviations (Mon, Tue, …).
Number Pool”1 outbound number”, “[N] outbound numbers”, or “No outbound numbers configured”. A preview lists the first four numbers, then ”+[N] more”.
Max AttemptsThe retry ceiling per contact.
Retry DelayMinutes between retry attempts.
Retry On SystemSystem outcomes that trigger an automatic redial. “None” when empty.
Retry On CustomCustom disposition names that trigger a redial. “None” when empty.
Stop Redials AfterThe “stop after a meaningful connect” threshold. Shown only when that rule is enabled.
Redial Only UnderThe “redial after a short connect” threshold. Shown only when that rule is enabled.
Sticky ExclusionShown only when sticky exclusion is enabled.
Config URLShown only when the campaign uses an externally-managed config.
For what each of these settings does and how to set them, see Create a campaign and Pacing and retries.

Raw setup JSON

ControlWhat it does
Raw setup JSONA details toggle. Expand it to reveal the full setup snapshot for the run — bot ID, number pool, config, config URL, run number, who created it, and the created and started timestamps. Collapse it to hide the block.
The raw setup JSON is the most precise audit record of how a run was configured. Copy it into a ticket when you escalate, so engineering sees the exact settings the run used.