Export attempts as CSV
Streams every attempt of the campaign, oldest first, with a header row:
attempt_id,contact_id,phone,attempt_n,originated_at,answered_at,ended_at,outcome,amd_verdict,telco_cost_minor,amd_cost_minor,ai_cost_minor,amd_reason,amd_seconds.
Text cells that begin with =, +, - or @ are prefixed with a single
quote so a spreadsheet never runs them as a formula. With ?include=summary
two columns are appended: summary,suggested_outcome. The last two columns of every
export are caller_id, the number that made the try (empty on a try from before
campaigns could use several numbers and had none recorded), and caller_id_label,
that number's name on the workspace (empty when it has none or the workspace no
longer holds it).
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
Path Parameters
uuidQuery Parameters
summary appends the summary and suggested_outcome columns.
Value in
- "summary"
Response Body
text/csv
application/json
application/json
application/json
curl -X GET "https://example.com/v1/dialer/campaigns/497f6eca-6276-4993-bfeb-53cbbbba6f08/attempts.csv""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" }}Campaign report GET
Outcome counts, budget against spend and forecast, the telco / AMD / AI cost split, cost per connected call and the release rate actually achieved.
List a campaign's sessions GET
The extensions in the campaign, oldest join first. Sessions that have left are hidden unless `include_left=true`. A supervisor (`dialer.supervise`, or an owner/admin) gets every session with its extension number and person. Anyone else with `dialer.read` gets `counts` (the headcount by state) and only their own sessions in `data`.