VOICE BROADCASTS
AI voice campaigns, controlled by API.
A broadcast dials your contact list from a Sautikit number while a published AI agent handles each two-way conversation. Set per-contact variables, calling windows, and retries in the request; retrieve reports after calls complete.
const res = await fetch("https://api.sautikit.com/v1/broadcasts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SAUTIKIT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "July renewal reminders",
agent_id: "9d2b1f53-8c0e-4f1d-9a6b-5d3a8c47e9f0",
prompt_template:
"You are calling {{name}} about a policy renewing on " +
"{{renewal_date}}. Confirm renewal and note any questions.",
start_phrase: "Hi {{name}}, this is Amina from Baraka Insurance.",
schedule_days: [1, 2, 3, 4, 5], // Mon–Fri
daily_start_minute: 540, // 09:00
daily_end_minute: 1020, // 17:00
timezone: "Africa/Nairobi",
max_attempts: 3,
backoff_minutes: 45,
retry_on: ["no_answer", "busy", "voicemail"],
}),
});
const broadcast = await res.json(); // state: "draft" — nothing dials yetHow a broadcast runs.
Four calls take a campaign from draft to a downloadable report. The window, the retries, and the voicemail handling run themselves in between.
POST /v1/broadcastsCreate the campaign: a published agent, a prompt template with {{variables}}, a start phrase, the calling window, and the retry policy. It's a draft — nothing dials yet.POST /v1/broadcasts/{id}/contactsAdd contacts as JSON, or upload a CSV to /contacts/bulk. Each row is a phone number plus the variable values that personalize its call — a bad row is rejected individually with the reason, never the whole batch.POST /v1/broadcasts/{id}/startStart it, then walk away. Dialing runs only inside your window, misses re-queue per your retry policy, and /pause and /resume are one call each if plans change.GET /v1/broadcasts/{id}/report.csvDownload the report: one row per call with its outcome — and every result is backed by the call's own recording and per-turn transcript.
Every broadcast endpoint — including /duplicate for re-running a campaign on a new list — is documented in the API reference.
Create and control campaigns by API
Create the campaign, add contacts, start or pause it, and download the report with documented endpoints.
Template variables
Write {{name}}, {{amount}}, {{due_date}} once. Required variables are derived from the template and every contact row carries its own values — each call opens knowing who it's talking to and why.
Start phrase
Script the exact opening line the agent speaks the moment the callee answers — personalized with the same variables, so the first second sounds like a person with a reason to call.
Calling windows
Pick the days of the week and a daily start/end in your timezone. Dialing stops at the edge of the window and picks up where it left off on the next allowed day.
Retry policy
Choose which outcomes re-queue — no_answer, busy, failed, voicemail — plus max attempts and the backoff between them. Missed contacts come back around without you touching anything.
Voicemail detection
When a machine answers, the attempt is marked voicemail and re-queued for a later retry. Your agent holds conversations with people, not mailboxes.
Barge-in support
Audio streams both ways, and the callee can talk over the agent mid-sentence. It stops, listens, and answers — the difference between a conversation and a recording.
Tools during the call
The agent calls your own HMAC-signed HTTP tools mid-conversation — confirm a payment, update the CRM, book the slot — and speaks the result back to the callee.
Recordings + transcripts
Every call is recorded and transcribed turn by turn. Pull any conversation with GET /v1/calls/{id}?transcript=1 and read exactly what was said.
Pause, resume, duplicate
Pause a live campaign and resume it without losing state. Duplicate last month's broadcast, point it at a fresh contact list, and start.
Send one test call before a campaign.
POST /v1/agents/{id}/send places a single agent call with the same prompt template and variables a broadcast uses. Hear the exact conversation your contacts will get, tweak the template, then hand it to a broadcast and a contact list.
await fetch(`https://api.sautikit.com/v1/agents/${agentId}/send`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SAUTIKIT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
to: "+254712345678",
prompt_template:
"You are calling {{name}} to confirm Tuesday's appointment.",
variables: { name: "Alice" },
}),
});Broadcast calls are live conversations.
A robocall plays a recording at everyone and calls that reach. A broadcast call is a live conversation that ends in a result.
A robocall blast
- Plays one recording at every number
- Ignores questions and talks over people
- Wastes its one shot on voicemail
- Reports a “delivered” count
A Sautikit broadcast
- Holds a live two-way conversation, per person
- Stops when interrupted, answers, and continues
- Detects voicemail and retries the human later
- Reports transcript-backed outcomes, call by call
Configure the agent before you launch.
Choose a published agent with the prompt, tools, and handover rules your campaign needs.
Configure an AI agent →Campaign use cases.
If a team reads the same script down a list every month, a broadcast does it with a template and an agent — and brings back what each person actually said.
- Payment & renewal reminders
- Promise-to-pay follow-ups
- Appointment reminders
- School-fees reminders
- Delivery & dispatch notifications
- Seasonal greetings
- Surveys & lead qualification
Billing and concurrency.
The free tier includes one unit of AI call concurrency; move to 5, 8, or 10 concurrent seats as campaigns grow. Live in Kenya, with more African markets coming. Full details on pricing.
Configure a broadcast through MCP.
Connect claude.ai, Claude Code, or Cursor to the hosted Sautikit MCP server and “Call our 200 July appointments and remind them” becomes a complete instruction — your assistant builds the agent, creates the campaign, loads the contacts, and starts dialing only after you confirm.
Explore the MCP server →Start a broadcast.
Claim a number, publish an agent, and start your first broadcast today — from the dashboard, the API, or your AI assistant.