A programmable voice API lets you provision a phone number, receive calls, and place calls entirely from your code, with no PBX, no SIM cards, and no carrier contract. In Kenya, SautiKit gives you a local number for KES 100/month and per-second call billing (KES 0.05/second outbound, inbound free), controlled through a REST API and webhooks.
If you have ever wanted your app to send an SMS, you already understand the idea: an API call triggers a real-world message. Programmable voice is the same, for phone calls. This guide shows a Kenyan developer how to get a number and make the two calls that matter, one in, one out.
What is a programmable voice API?
A programmable voice API is a service that exposes telephone functions (buying numbers, answering calls, placing calls, playing audio, recording, routing) as web requests. Your application sends HTTP requests to control calls, and the service sends webhooks back to your server as call events happen. You write logic; the API handles the carrier plumbing.
The classic global example is Twilio. The problem for African teams has been local numbers, local rates, and billing in dollars. SautiKit is built to solve exactly that in Kenya and, over time, more of Africa.
Step 1: Get a Kenyan phone number by API
Instead of buying a line at a shop, you request one:
curl -X POST https://api.sautikit.com/v1/numbers \
-H 'Authorization: Bearer $SAUTIKIT_API_KEY' \
-d 'country=KE'
You now hold a Kenyan number for KES 100/month. Assign a webhook URL to it so SautiKit can notify your server whenever the number is called.
Step 2: Receive an inbound call
When someone dials your number, SautiKit sends an HTTP request to your webhook. Your server replies with instructions describing what should happen on the call: play a greeting, collect a keypress, record a message, connect to an agent, or open a real-time audio stream.
A minimal answer-and-greet handler looks like this in pseudocode:
POST /voice/inbound -> respond with:
say: 'Karibu. Thanks for calling. Press 1 for sales, 2 for support.'
gather: 1 digit -> send the result to /voice/menu
That single exchange already gives you an IVR: a menu that routes callers without any hardware.
Step 3: Make an outbound call
To place a call from your code, you tell the API who to dial and what to do when the person answers:
curl -X POST https://api.sautikit.com/v1/calls \
-H 'Authorization: Bearer $SAUTIKIT_API_KEY' \
-d 'from=$YOUR_SAUTIKIT_NUMBER' \
-d 'to=+2547XXXXXXXX' \
-d 'webhook=https://yourapp.co.ke/voice/outbound'
When the callee picks up, SautiKit calls your webhook and you return instructions: play a message, run a survey, connect them to a staff member, or hand the audio to an AI agent. Outbound is billed per second, so a 20-second reminder call costs KES 1.
Step 4: Add routing, recording, and retries
Once inbound and outbound work, the useful features are small additions:
- IVR and routing - branch on keypresses or on who is calling, all in your webhook logic, no middleware.
- Recording - capture calls to cloud storage (there is a free tier) for quality and training.
- Webhooks with retry - SautiKit retries failed callbacks automatically, so a brief blip on your server does not silently drop a call event.
- Call logs - a full record of every call for debugging and billing reconciliation.
What can you build with it?
| Use case | What the API does |
|---|
| Customer support line | Inbound calls, IVR menu, route to agents, record |
| Appointment reminders | Outbound calls with a spoken message and reply |
| OTP / verification by call | Outbound call that reads a code aloud |
| AI voice agent | Inbound call plus real-time audio stream to your model |
| Click-to-call in your app | Outbound call connecting a user and a business |
How is this different from a normal SIM or PBX?
A SIM ties a number to one physical device. A PBX ties your call flow to hardware and configuration. A programmable voice API makes the number and the call flow into software you deploy and version like any other code. You can spin up ten numbers for a campaign, then release them, and you never touch a cable.
Why SautiKit for Kenya?
SautiKit is a voice API designed for African developers: local Kenyan numbers, billing in shillings from a prepaid wallet, per-second rates you can read on the pricing page (no black-box quotes), free inbound calls, and a real-time audio stream ready for AI. There are no contracts to sign before you write your first line of code.
Frequently asked questions
How do I get a Kenyan phone number for my app?
Request one through the SautiKit API with a single POST call. The number is provisioned instantly and billed at KES 100/month, and you attach a webhook so your app is notified of incoming calls.
How much does it cost to make a call?
Outbound calls are billed at KES 0.05 per second and inbound calls are free, drawn from a prepaid wallet. A 20-second call costs about KES 1.
Is SautiKit a Twilio alternative for Africa?
It serves the same programmable-voice purpose, but with local Kenyan numbers, shilling billing, and pricing aimed at African developers rather than dollar-based global rates. Coverage starts in Kenya with more African markets planned.
Do I need special hardware or a PBX?
No. Everything is done over the API and webhooks. There is no PBX, no SIP phone, and no SIM card to manage.
Can I record calls?
Yes. Call recording is supported with a free storage tier, useful for quality assurance and for training AI agents on real conversations.