Skip to main content
A campaign places outbound calls to a set of contacts. It ties together the agent that speaks on the call, the phone number the call comes from, and the contact lists that define who to call. Once created, you control the campaign with the start, pause, resume, and cancel operations.

Base URL

These endpoints are served under the public /v1 prefix.

Authentication

Every request requires a workspace API key in the X-API-Key header.

Endpoints

List campaigns

GET /v1/calls/campaigns — page through your campaigns.

Create campaign

POST /v1/calls/campaigns — create a campaign.

Get campaign

GET /v1/calls/campaigns/{id} — retrieve a campaign and its contact groups.

Update campaign

PATCH /v1/calls/campaigns/{id} — change a campaign’s configuration.

Delete campaign

DELETE /v1/calls/campaigns/{id} — delete a campaign.

List campaign contacts

GET /v1/calls/campaigns/{id}/contacts — see per-contact call status.

List campaign conversations

GET /v1/calls/campaigns/{id}/events — page through conversations produced by the campaign.

Start campaign

POST /v1/calls/campaigns/{id}/start — begin placing calls.

Pause campaign

POST /v1/calls/campaigns/{id}/pause — pause a running campaign.

Resume campaign

POST /v1/calls/campaigns/{id}/resume — resume a paused campaign.

Cancel campaign

POST /v1/calls/campaigns/{id}/cancel — cancel a campaign.

Before you start

A campaign references resources created through the other APIs. Gather these first.

Agent

agentId — the agent that speaks on the call.

Phone number

fromNumber — the number the call comes from, or use a number pool.

Contact lists

contactListIds and dndListIds — who to call and who to skip.

Create a campaign

POST /v1/calls/campaigns requires name, agentId, contactListIds, maxConcurrency, and exactly one of fromNumber or numberPoolId. Pass contactListIds for the audience and dndListIds for numbers to exclude. Both accept IDs from the Campaign audience API; create do-not-disturb lists with type set to dnd.
A 422 indicates the campaign could not be created with the values supplied.
Set scheduleStart and scheduleEnd together. Do not send scheduling fields when sendNow is true.

Control a running campaign

Four operations move a campaign through its lifecycle. Each takes only the campaign ID and returns the updated campaign.
The campaign records pausedAt, resumedAt, stoppedAt, and cancelledAt as these operations are applied, so you can read the current state from the campaign itself.

Campaign fields

When a campaign fails, meta.failure.reason describes why. GET /v1/calls/campaigns/{id} returns these fields plus agentName and a contactGroups array, where each group has an id, name, and type.

Campaign contacts

GET /v1/calls/campaigns/{id}/contacts lists the individual contacts in a campaign. The endpoint accepts page, perPage, and a status filter.

Pagination and filtering

GET /v1/calls/campaigns accepts these query parameters. Both list endpoints return a paged object containing items, page, perPage, totalCount, column, order, and searchText.

Errors

Errors return a code and an error message.