List dialer campaigns
Newest first, cursor-paginated.
Authorization
bearerAuth Long-lived ES256 JWT minted from the dashboard (https://app.sautikit.com/developers/api-keys). Signed by the
platform keyring. Carries workspace_id and scopes claims;
revoked via the platform deny-list.
In: header
Query Parameters
Opaque next_cursor from the previous page.
1 <= value <= 20050Value in
- "draft"
- "running"
- "paused"
- "completed"
- "budget_stopped"
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/dialer/campaigns"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "status": "draft", "mode": "drip", "caller_id": "string", "caller_ids": [ "string" ], "callback_url": "string", "release_rate_per_sec": 0, "max_concurrent": 0, "hours": { "timezone": "string", "windows": [ { "days": [ 0 ], "start_minute": 0, "end_minute": 1 } ], "blackouts": [ "2019-08-24" ] }, "timezone": "string", "retry": { "max_attempts": 1, "backoff_minutes": [ 0 ], "retry_on": [ "no_answer" ], "min_gap_minutes": 0, "ordering": "fifo" }, "budget_minor": 0, "daily_budget_minor": 0, "warn_pct": 0, "spent_minor": 0, "amd": { "mode": "off", "on_machine": "hangup", "max_analysis_seconds": 4, "machine_message": "string" }, "overflow": { "max_hold_ms": 2000, "hold_line_seconds": 10, "auto_ai": false, "auto_ai_after_seconds": 0, "ai_agent_id": "cbaf6aba-437a-4fd2-9d34-7875f81689e6", "callback_enabled": true, "callback_delay_minutes": 10, "callback_mode": "keypad", "callback_agent_id": "01422de9-87cc-4157-b531-8850ef02c157", "callback_prompt": "string", "hold_line_text": "string", "hold_line_url": "http://example.com", "callback_offer_text": "string", "callback_confirm_text": "string", "apology_text": "string" }, "summary": { "enabled": false, "engine": "extractive" }, "ratio_max": 0, "ratio_current": 0, "abandon_target_pct": 0, "started_at": "2019-08-24T14:15:22Z", "completed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "estimate": { "contacts": 0, "max_attempts": 0, "telco_minor": 0, "amd_minor": 0, "total_minor": 0, "currency": "string", "budget_minor": 0, "exceeds_budget": true, "priced": true }, "callback_secret": "string" } ], "next_cursor": "string"}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}Download the aggregate campaign report (CSV) GET
One-row CSV snapshot of the broadcast at request time. Columns: `broadcast_id, broadcast_name, state, queued, attempted, reached, completed, no_answer, busy, voicemail, failed, exhausted, canceled, total_duration_seconds, total_turns, ai_cost_minor, telco_cost_minor, total_cost_minor, voicemail_spend_minor, currency`. Per-contact and per-call exports live on the Calls API (`GET /v1/calls?broadcast_id=…`).
Create a dialer campaign (draft) POST
Creates a draft drip-calling campaign. Nothing is dialed until `POST .../start`. `caller_id` must be an active number on this workspace. `callback_url` must be https to a public host: private, loopback, link-local and CGNAT addresses and `localhost` are refused (the same applies to a contact's own `callback_url`), and redirects from your endpoint are not followed. The 201 response carries `callback_secret`, the key that signs the answer callback: it is shown once, stored encrypted, and replaced with `POST .../rotate-secret`. Omitted settings take their defaults: 1 call per second, 20 concurrent, 3 attempts with 15 min / 2 h / 1 day backoff, AMD off. `progressive` and `predictive` modes need a plan that includes them (`402 plan.required` otherwise). A `predictive` campaign dials ahead of its free agents using the answer rate it learns from its own calls, never more than `ratio_max` calls per free agent (default 1.5), and slows itself down when answered callers wait (`abandon_target_pct`, default 3).