Create a campaign
Request body
max_concurrent and your channel allocation
Your account is allocated a number of concurrent channels on the carrier trunk
(what Yotel calls the channel allocation; ask your account manager for the figure,
or read channels_allocated from GET /api/telephony/channels/usage). A campaign
with max_concurrent null keeps as many calls up as that allocation allows,
counting every call your account has up — other campaigns, inbound calls and agent
dials included — so the allocation is used completely without any campaign
overrunning it.
Two things to know:
- It is a ceiling that follows the allocation, not a fixed number. Raise the
allocation and every
nullcampaign dials more; nothing on the campaign needs to change. - Enforcement requires an active trunk. If Yotel has no active trunk declared
for your carrier, there is no allocation to follow and a
nullcampaign falls back to 10 concurrent calls per API process (the previous default).GET /api/telephony/channels/usagereports whether the allocation is enforced underceilings.channels.enforced. - Two campaigns sharing one allocation are first-come-first-served. The
allocation is a ceiling, not a share. If both must make progress at once, set
an explicit
max_concurrenton each so their sum fits.
max_concurrent behaves as it always has: a per-campaign ceiling, still
bounded by the allocation when one is enforced. If your account also uses a voice
agent, that agent’s own max_concurrent applies too — the tightest of the three is
what you get.
If your organisation set a default in the dashboard (Settings → General → Max
Concurrent), a request that omits the field inherits it; an explicit null
does not.
Scope: campaigns:write | Status: 201 Created
Response
Returns aCampaignResponse object with id, name, dial_mode, status ("draft"), timestamps, and all configured fields.
List campaigns
Returns all campaigns for the tenant bound to your API key.campaigns:read | Status: 200 OK
Get a campaign
campaigns:read | Status: 200 OK
Returns 404 if the campaign does not exist or belongs to a different tenant.
Update a campaign
PATCH semantics — only include the fields you want to change.campaigns:write | Status: 200 OK
Clearing a field
An omitted field and an explicitnull are different requests. Omit a field to leave it
alone; send null to clear it. Only caller_id, flow_id, voice_agent_id, description,
script, notes, and max_concurrent may be cleared — a null on any other field
returns 422.
caller_id makes the campaign rotate through the tenant’s own numbers again.
Clearing max_concurrent puts the campaign back onto your channel allocation (see
max_concurrent and your channel allocation).
Editing a running campaign
PATCH on a running campaign returns 409. The dialer reads its configuration once at
start; pause the campaign, edit it, then resume — the resumed dialer picks up the new values.
Delete a campaign
campaigns:write | Status: 204 No Content
Returns 409 Conflict if the campaign is in a state that cannot be deleted (e.g., currently running).

