Campaign report
Outcome counts, budget against spend and forecast, the telco / AMD / AI cost split, cost per connected call and the release rate actually achieved.
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
uuidResponse Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/dialer/campaigns/497f6eca-6276-4993-bfeb-53cbbbba6f08/report"{ "released": 0, "answered": 0, "human": 0, "machine": 0, "no_answer": 0, "busy": 0, "failed": 0, "connected": 0, "retried": 0, "outcomes": { "property1": 0, "property2": 0 }, "budget": { "total_minor": 0, "spent_minor": 0, "forecast_minor": 0, "remaining_minor": 0 }, "cost": { "telco_minor": 0, "amd_minor": 0, "ai_minor": 0 }, "cost_per_connect_minor": 0, "release_rate_achieved": 0, "human_answer_rate": 0, "abandoned": 0, "abandon_rate_pct": 0, "ratio": 0, "ratio_max": 0, "abandon_target_pct": 0, "caller_ids": [ { "caller_id": "string", "calls": 0, "answered": 0, "failed": 0, "no_answer": 0, "busy": 0, "answer_rate": 0, "failure_rate": 0 } ]}{ "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" }}Get a call's summary and suggested outcome GET
The post-call summary of one attempt and the outcome it suggests, for the agent's wrap-up. It exists only when the campaign switched `summary` on and the call had a transcript, and it appears a moment after the call ends: answer `404 dialer.summary_not_found` until then. The suggestion is advice; the agent confirms the outcome.
Export attempts as CSV GET
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).