API Reference
Dialer

List dialer campaigns

GET
/v1/dialer/campaigns

Newest first, cursor-paginated.

Authorization

bearerAuth
AuthorizationBearer <token>

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

cursor?string

Opaque next_cursor from the previous page.

limit?integer
Range1 <= value <= 200
Default50
status?string

Value 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).