Skip to content
Kenya-hosted · Africa-first · Built for developers

Programmable voice for Africa

Turn phone calls into something you control with code. Acquire numbers, place calls, and build browser phones over one clean REST API — billed per second in KES.

Self-serve signup · Pay as you go · No monthly platform fee

curl https://api.sautipbx.com/api/calls/originate \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "to":   "+254711111111",
        "from": "+254709080010",
        "url":  "https://yourapp.com/voice" }'

One POST places a real phone call. Your webhook decides what happens next.

From signup to first call in three steps

No sales call and no onboarding meeting. Everything below is self-serve, from the dashboard and the API.

  1. 01

    Get an API key

    Create an account and generate a secret key from the dashboard. Top up your KES wallet when you are ready to go live.

    Authentication
  2. 02

    Acquire a number

    Search available Kenyan numbers and acquire one over the API. It is billed monthly and routes straight to your webhook.

    Numbers API
  3. 03

    Point it at your webhook

    When a call arrives we POST to your URL. Reply with call-control XML and the call does exactly what you told it to.

    Webhooks guide

Everything you need to build on voice

Production-grade telephony as a clean API. Designed for the African market, built on proven infrastructure.

Inbound & outbound calls

Place and receive calls over the REST API. Webhook-driven: your server tells us how to handle each call, as it happens.

API reference

Simple call-control verbs

Drive calls with plain XML — Say, Play, Dial, Record, Pause, Redirect. No SDK to learn, no call state to manage yourself.

Verb reference

Browser & mobile softphones

Give end-users a real phone inside your app. Mint short-lived phone tokens on your server — no secret key in the browser.

Browser SDK

Real-time event stream

Watch calls live over a WebSocket. Namespaced event codes and stable schemas make integrations predictable, not guesswork.

Event codes

Text-to-speech & recording

Speak dynamic text on a call with a single verb, and record calls to storage with signed, expiring download URLs.

Recordings API

Pay-as-you-go in KES

A KES wallet and no monthly fees. Calls billed per second, numbers per month. Live balance monitoring stops runaway spend.

Talk to us about rates

Control a call with a few lines of XML

When a call reaches your number we POST to your webhook. You reply with call-control verbs and the platform executes them in order — speak text, play audio, gather digits, record, or bridge to another leg.

  • No telephony stack to run, and no SIP to learn
  • Stateless — every decision is just an HTTP response
  • Works with any language that can serve a URL
Read the verb reference
<!-- Your server's reply to our webhook -->
<Response>
  <Say voice="female">Welcome to Acme.</Say>
  <Play>https://cdn.acme.com/menu.mp3</Play>
  <Record maxLength="30" />
</Response>

Know what your calls are doing

Subscribe to a WebSocket and watch every call transition live — ringing, answered, completed — each carrying a namespaced reason code that stays stable across releases. The same events power the dashboard you see.

  • Stable, documented event schemas — safe to build on
  • A distinct reason code per cause, never a generic failure
  • Signed webhooks, if you would rather we push to you
Browse event codes
const ws = new WebSocket(
  "wss://api.sautipbx.com/api/stream?token=..."
);

ws.addEventListener("message", (e) => {
  const ev = JSON.parse(e.data);
  // call.ringing, call.answered, call.completed …
  console.log(ev.type, ev.call_id, ev.reason_code);
});

Built for this market, not adapted to it

Global voice APIs treat Kenya as an edge case. We start here.

Hosted in Kenya
Media stays local, so a local call is a short hop rather than a round trip to another continent.
Direct carrier interconnect
Peered directly with the local carrier — fewer hops between your code and the person answering.
Billed in KES, per second
A shilling wallet with no FX surprise and no per-minute rounding. You pay for the seconds you use.
No monthly platform fee
Pay for calls and numbers. Nothing else — no seat licences and no minimum commitment.

Frequently asked questions

What is SautiPBX?

SautiPBX is a programmable voice platform for Africa. It gives developers a REST API to acquire phone numbers, place and receive calls, control call flow with simple XML verbs, add browser-based softphones, and stream live call events — hosted in Kenya and billed per second in Kenyan shillings.

How is SautiPBX different from Twilio or Africa's Talking?

SautiPBX is built specifically for the Kenyan market: infrastructure hosted in Kenya for lower latency on local calls, a direct carrier interconnect, wallet billing in Kenyan shillings with no monthly platform fee, and per-second call billing rather than per-minute rounding.

How is voice billed?

Calls are billed per second against a prepaid KES wallet, and phone numbers are billed monthly. There is no monthly platform fee and no minimum commitment. Live balance monitoring ends calls before your wallet can go negative, so spend cannot run away.

Do I need to know SIP or telephony to use it?

No. You call a REST endpoint to start a call, and your server replies to our webhook with a short XML document using verbs like Say, Play, Dial and Record. SIP, media handling and carrier interconnects are handled by the platform.

Can I add calling to a web or mobile app?

Yes. The @sautipbx/voice-sdk browser SDK turns a web page into a working softphone over WebRTC. Your server mints a short-lived phone token, so your secret API key never reaches the browser.

Which countries and numbers are supported?

SautiPBX currently serves Kenya with local Kenyan numbers and a direct carrier interconnect, and can place outbound calls internationally. Contact us about coverage for a specific market.

Ready to build?

Create an account, top up your KES wallet, and place your first call in minutes.