Languages: every operation supports cURL, Node.js (TypeScript), Python, Go, Ruby, and PHP. The first 15 operations on this page show all six languages; the remaining 7 show cURL and TypeScript — the two most-used.
Dialer API
Dialer endpoints exposed by the Devotel CPaaS API Base path:/api/v1/dialer
Endpoint count: 22
title: “The preview-dial loop” description: “How the two preview-mode operations chain: claim a contact atomically, review it on the agent’s screen, then launch the dial.”
The preview-dial loop
Outbound-campaign operators run the dialer workspace. Progressive, predictive, and agentless campaigns fire through the pacing scheduler automatically; preview mode is the one where a human reviews each contact card before the call launches. That human loop compresses into two endpoints. First the agent’s frontend claims the next contact withGET /api/v1/dialer/next-call:
cURL
preview_decision_seconds is the per-campaign review countdown; decision_expires_at is the server-side deadline for that countdown. 204 No Content means the campaign is progressive / predictive / agentless (calls fire automatically); 404 means the campaign is not active. A null contact means the list is drained.
Once the agent clicks “Call” the dial launches:
cURL
dialing (claimed) state, or the request rejects with 409 CLAIM_NOT_HELD. The requesting operator records as the call’s agent for the TCPA audit trail, and the call itself exits through the Devotel softswitch — the preview loop never dials a number outside the commit path.
SDK surface bridge — List outbound-dialer campaigns, queue the next hop of the campaign FIFO, or trigger one alias lane — all with the sandbox key.
These three tabs mirror SDK status and coverage. Python fronts
client.request, Go fronts client.Request, and TS fronts fetch-TS — each with the sandbox key.List dialer campaigns
Queue the next campaign hop
Fire one alias lane
Alias-lane request inbox
List dialer campaigns
GET /api/v1/dialer/campaignscontacts_total / contacts_connected counts (bounded scan — see contacts_count_capped_at). Degrades to an empty list (never a 5xx) when the tenant’s dialer schema is not yet provisioned.
string
Page size, 1-100 (clamped server-side). Defaults to 20.
string
Opaque pagination cursor from a prior response’s
next_cursor.string
Filter by campaign status: draft, active, paused, completed, or aborted. Unrecognized values are ignored (no filter applied).
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Get a dialer campaign
GET /api/v1/dialer/campaigns/{id}string
required
Campaign id.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Get post-call AI sentiment + outcome scoring for a dialer attempt
GET /api/v1/dialer/campaigns/{id}/attempts/{attemptId}/outcome-scoringanalyzed:false when the analyzer hasn’t run yet or the tenant hasn’t enabled it.
string
required
—
string
required
—
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Dialer local-presence caller-ID coverage + analytics
GET /api/v1/dialer/campaigns/{id}/caller-id-coveragestring
required
Campaign ID
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.List lists
GET /api/v1/dialer/campaigns/{id}/listsstring
required
—
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.List penetration
GET /api/v1/dialer/campaigns/{id}/lists/{listId}/penetrationstring
required
—
string
required
—
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Dialer campaign post-call AI sentiment + outcome rollup
GET /api/v1/dialer/campaigns/{id}/sentimentstring
required
Campaign ID
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Dialer campaign wallboard stats
GET /api/v1/dialer/campaigns/{id}/statscontacts_count_capped) so a single poll can never scan an unbounded number of rows.
string
required
Campaign id.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Dialer campaign stats (tenant-wide KPI strip)
GET /api/v1/dialer/campaigns/statsstring
IANA timezone (e.g. ‘America/New_York’) used to compute the operator-local day boundary for the ‘completed today’ tile. Defaults to UTC when omitted or malformed.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Claim the next preview-mode contact for an agent
GET /api/v1/dialer/next-call204 No Content for progressive / predictive / agentless campaigns (their calls are originated automatically by the pacing engine), or 404 when the campaign is not active. The agent then reviews the contact and launches the call via POST /api/v1/dialer/dial.
string
The active preview-mode campaign to claim the next contact from.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.List campaigns
GET /api/v1/dialer/voice-agents/{agentId}/campaignsstring
required
—
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Create a dialer campaign
POST /api/v1/dialer/campaignsdraft status (preview / progressive / predictive / agentless mode). Validates that caller_id_e164 and every caller_id_pool entry are owned by the calling org (anti-spoofing), and that voice_agent_id (when set) references a real voice agent in this workspace. Recording requires recording_consent_acknowledged=true in the same request. Requires the dialer:write scope.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.string
Campaign display name.
string
Dial strategy: ‘preview’ (agent reviews + clicks to dial), ‘progressive’, ‘predictive’, or ‘agentless’ (broadcast, no agent leg).
string
Default outbound caller-ID in E.164 format. Must be a number this org owns.
number
Predictive/progressive dial-to-agent ratio. 0.8-3.0, default 1.2.
number
FCC abandon-rate ceiling for this campaign, as a fraction (e.g. 0.03 = 3%). Cannot exceed the platform’s 3% ceiling.
number
Target seconds-to-answer used by the predictive pacer. 5-120, default 20.
string
Optional explicit Jambonz voice-control-plane application override. Omit to use the mode/AMD-resolved default.
array
Required agent skills for this campaign — legacy string array (e.g. [‘french’]) or structured
{skill, min_level, weight} objects.string
Optional legacy call-script reference.
boolean
Whether calls in this campaign are recorded. Requires
recording_consent_acknowledged=true.boolean
Whether answering-machine detection runs on each dialed leg.
string
‘human’ (default, agent-fronted) or ‘voice_agent’ (each leg connects to the AI voice agent named by
voice_agent_id, dispatched via POST /campaigns/:id/batch-dispatch).string
Required when
dispatch_mode='voice_agent'; must reference an existing agent in this workspace.number
Max simultaneous in-flight legs for voice-agent batch dispatch. 1-200, default 10.
string
HTTPS URL of the message Jambonz plays on answer. Required when
mode='agentless', forbidden otherwise.string
HTTPS voicemail-drop audio URL played when AMD detects a machine. Only valid for agent-driven modes.
string
AMD detection sensitivity: ‘low’, ‘medium’, or ‘high’. Only meaningful when
amd_enabled=true.number
Per-campaign override of how long a preview-mode agent has to decide before the claim auto-skips. Only valid for
mode='preview'.object
Free-form operator metadata (e.g. TCPA quiet-hours override, disposition codes).
object
Per-outcome retry backoff schedule keyed by outcome bucket (no_answer, busy, machine, machine_silence, failed).
array
Local-presence caller-ID rotation pool. Every entry must be owned by this org. Required (non-empty) when
caller_id_strategy is not ‘single’.string
Caller-ID assignment strategy: ‘single’ (default) or ‘npa_match’ (local-presence rotation from
caller_id_pool).object
Optional human-agent guided-dialog script (sections + branches). Omitted campaigns persist the canonical empty shape.
boolean
Operator’s two-party-consent acknowledgement. Required when
recording_enabled=true.boolean
When true, contacts uploaded to this campaign are enrolled at their highest-answer-probability window instead of list order.
Batch-dispatch outbound calls to a voice agent
POST /api/v1/dialer/campaigns/{id}/batch-dispatchconcurrency_limit (or the optional max_legs override, whichever is lower) pending contacts under SKIP LOCKED and originates one outbound call per contact via the softswitch, connecting each answered leg to the campaign’s AI voice agent. Only valid for dispatch_mode='voice_agent' campaigns in active status. Returns 202 when every leg originated successfully, 207 when some legs failed (per-leg detail in legs), or 204 when there were no eligible contacts to claim. Requires the dialer:write scope.
string
required
Campaign id.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.number
Optional per-invocation cap on claimed legs, 1-200. Always clamped to the campaign’s own concurrency_limit.
Create clone
POST /api/v1/dialer/campaigns/{id}/clonestring
required
—
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Submit a dialer call disposition
POST /api/v1/dialer/campaigns/{id}/dispositionsdnc_list suppression entry so future dial attempts to that number are blocked across every campaign in this tenant. Requires the dialer:write scope.
string
required
Campaign id.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.string
The call-attempt id being dispositioned.
string
Outcome label (e.g. ‘connected’, ‘callback_later’, ‘dnc’, ‘wrong_number’). Unrecognized values default to the ‘connected’ route.
string
Optional free-text agent notes.
string
Required when disposition routes to callback_scheduled. ISO-8601 with offset, must be in the future and within 90 days.
Upload a contact list to a dialer campaign
POST /api/v1/dialer/campaigns/{id}/listsphone_e164 values are deduped both within the request and against any existing contact in the same list (ON CONFLICT DO NOTHING); the response reports how many were actually inserted vs. skipped as duplicates. Requires the dialer:write scope.
string
required
Campaign id.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.string
List display name.
object[]
1-50,000 contacts to enroll.
number
Max dial attempts per contact before it’s marked exhausted. 1-20, default 5.
Create recycle
POST /api/v1/dialer/campaigns/{id}/lists/{listId}/recyclestring
required
—
string
required
—
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Originate a preview-mode dial for a claimed contact
POST /api/v1/dialer/dialGET /api/v1/dialer/next-call. Call this when the agent clicks “Call” after reviewing the preview card: the contact must still be in the dialing (claimed) state or the request is rejected with 409 CLAIM_NOT_HELD. Valid only for active preview-mode campaigns — progressive / predictive / agentless campaigns dial through the pacing scheduler instead. The requesting operator is recorded as the call’s agent for the TCPA audit trail. Requires the dialer:write scope.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.string
The active preview-mode campaign the contact belongs to.
string
The dialer list-contact id returned by
GET /api/v1/dialer/next-call.Manual-dial dialer
POST /api/v1/dialer/manual-dialstring
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Update a dialer campaign
PATCH /api/v1/dialer/campaigns/{id}status: 'active') is blocked by the org-wide compliance emergency stop, a missing resolvable voice application, or a prior recording-consent gap. An ‘aborted’ campaign cannot transition to any other status. Requires the dialer:write scope.
string
required
Campaign id.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.string
Campaign display name.
string
Target status: active, paused, completed, or aborted. Cannot transition away from ‘aborted’.
number
0.8-3.0.
number
FCC abandon-rate ceiling fraction.
number
5-120.
string
Must be owned by this org.
string
—
array
—
string | null
—
boolean
Enabling requires
recording_consent_acknowledged=true in the same request unless already acknowledged.boolean
—
string
‘human’ or ‘voice_agent’.
string | null
Null clears the agent; a string must reference an existing agent.
number
1-200.
string | null
—
string | null
—
number | null
—
object
—
object
—
array
—
string
—
object
—
boolean
—
boolean
—
Soft-delete a dialer campaign
DELETE /api/v1/dialer/campaigns/{id}dialing — pause the campaign and let in-flight legs terminate first. Terminal-state contacts (connected/failed/dnc/exhausted/timezone_blocked) are preserved for TCPA dispute defense. Requires the dialer:write scope.
string
required
Campaign id.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.204 No Content
Soft-delete a dialer contact list
DELETE /api/v1/dialer/campaigns/{id}/lists/{listId}dialing. Terminal-state contacts are preserved. Requires the dialer:write scope.
string
required
Campaign id.
string
required
List id.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.204 No Content