---
title: >-
  Sautikit vs Africa's Talking: cheaper voice API numbers and per-second billing
  for Kenya
description: >-
  Side-by-side comparison of Sautikit and Africa's Talking for programmable
  voice in Kenya: pricing, API format, and when to pick each.
summary: >-
  Sautikit and Africa's Talking are both Nairobi-based voice providers, but they
  serve different needs. This post compares pricing, API format, and use-case
  fit in detail.
date: 2026-07-03T00:00:00.000Z
updated: 2026-07-21T00:00:00.000Z
type: compare
---


## Summary

Sautikit and Africa's Talking are both Nairobi-based and both serve Kenyan developers building voice products. Africa's Talking (AT) is a multi-channel platform (voice, SMS, USSD, airtime, IoT) with a longer track record and broader African market coverage. Sautikit is voice-only, Kenya-first, and designed for teams that want a JSON-native API, M-Pesa STK push top-up, and per-second billing. Neither platform is the right answer for every use case. This post walks through the concrete differences so you can pick with open eyes.

All third-party pricing and feature claims are based on publicly available information as of 2026-07-17. Verify current figures on each provider's pricing page before making a commitment.

## What each platform actually is

**Africa's Talking** was founded in 2010 and is headquartered in Nairobi. It is a multi-channel communications platform covering voice, SMS, USSD, airtime disbursement, payments, and IoT across more than 20 African countries. Voice is one component of a wider product surface. AT has direct relationships with mobile network operators across Africa and has processed substantial volumes across all its channels over its 15-year history.

**Sautikit** is a programmable voice API live in Kenya, built by Helloduty. It is voice-only by design: the API surface, documentation, and billing model are all optimised for teams building voice-first products, without the overhead of a sprawling multi-channel platform. When you do need SMS, USSD, or airtime alongside voice, they live one step away in the Helloduty family. [Helloduty](https://helloduty.com) is the multi-channel CX platform (SMS, WhatsApp, USSD, agent desk) that Sautikit plugs into. Wallet top-up is via M-Pesa STK push. Billing is in KES.

Both companies are Nairobi-based. Both target developers. The difference is surface area and focus.

## Pricing model side-by-side

Prices below are as of 2026-07-17, per each company's public pricing pages. AT figures per founder confirmation / AT public pricing, 2026-06-30.

| Item | Africa's Talking | Sautikit |
|---|---|---|
| Outbound voice (per min) | KES 4.50 | KES 3.00 |
| Inbound voice (per min) | KES 1.00 | Free (KES 0) |
| Number rental | KES 5,000 setup + KES 2,000/month + VAT, assigned after a request | KES 100/month (ex. VAT) / KES 116 incl. VAT, live in seconds |
| Billing increment | Per minute | Per second after connect |
| Currency | KES | KES |
| Wallet top-up | Bank transfer, M-Pesa Paybill, USSD | M-Pesa STK push |
| Minimum balance | Verify on AT | None stated |
| Recording storage | Verify on AT | 1 GB free |

A few observations from the table:

- The number rental contrast is the headline difference: AT charges KES 5,000 upfront plus KES 2,000 + VAT per month to hold a number, assigned after a request. Sautikit is KES 116 (incl. VAT) per month, live in seconds, with no setup fee and no minimum commitment.
- AT's outbound rate (KES 4.50/min) is higher than Sautikit's (KES 3.00/min). Inbound calls on Sautikit are free (KES 0); AT's inbound rate is KES 1.00/min. For inbound-heavy or mixed workloads, Sautikit's effective blended cost is materially lower.
- AT's M-Pesa top-up option goes through a Paybill number; Sautikit uses STK push (the phone prompts your M-Pesa PIN directly). STK push is faster for developers who want to top up in 30 seconds without navigating the M-Pesa menu.
- Sautikit's per-second billing after connect means a 35-second call costs just over half a minute, not a full minute. For large call volumes, this matters.

**FX note:** both platforms bill in KES, so there is no USD/KES exchange exposure for either. This is a meaningful difference from global providers like Twilio.

## Voice flow representation

AT and Sautikit use different formats to describe what should happen on a call (play audio, collect digits, transfer to an agent, etc.).

**Africa's Talking** uses XML-based Voice Actions (also accessible via a drag-and-drop Voice Builder in the dashboard). A simple "say something, collect a digit" flow looks like:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say>Press 1 for account balance, or 2 to speak with an agent.</Say>
  <GetDigits timeout="30" numDigits="1" callbackUrl="https://yourapp.example/digit" />
</Response>
```

**Sautikit** uses JSON natively. The equivalent flow:

```json
{
  "actions": [
    {
      "say": {
        "text": "Press 1 for account balance, or 2 to speak with an agent.",
        "language": "en-KE"
      }
    },
    {
      "getDigits": {
        "numDigits": 1,
        "timeout": 8000,
        "action": "https://yourapp.example/digit"
      }
    }
  ]
}
```

Both approaches describe the same call graph. The practical difference is that JSON is easier to generate programmatically from code: you can build a voice flow from a database-driven menu without constructing XML strings. For teams generating flows dynamically (personalised IVR menus, language selection, etc.), JSON tends to reduce boilerplate.

Sautikit accepts both formats at runtime: the JSON DSL (parsed and validated by Sautikit) and raw XML (forwarded to the telephony engine byte-for-byte). Teams migrating from AT or Twilio can keep their existing voice XML; JSON is optional, for when you want Sautikit-side validation or typed SDKs.

## Where each platform's scope lands

**Multi-channel from one bill.** If you need SMS, USSD, airtime disbursement, and voice under a single provider, AT bundles all of that. Sautikit takes a different path: it keeps voice clean and focused, and the other channels live in the Helloduty family. [Helloduty](https://helloduty.com) gives you SMS, WhatsApp, USSD, and an agent desk that pairs with Sautikit voice, so you stay in one billing family without a single monolithic platform to navigate.

**Track record.** AT has been running since 2010 and has processed high volumes across its channels. If your team weights vendor age heavily, that history is worth noting. Sautikit is newer and purpose-built for the Kenyan voice workloads teams ship today, with the Helloduty group behind it.

**African markets beyond Kenya.** AT covers 20+ countries with direct carrier relationships. Sautikit is Kenya-first by design; that focus is what keeps its pricing and support sharp for the Kenyan market. If your roadmap needs voice in Uganda, Ghana, or Tanzania alongside Kenya, [talk to the Helloduty team](https://helloduty.com) about multi-market coverage rather than defaulting away.

**Inbound and outbound rates.** Sautikit's inbound calls are free (KES 0/min) and its outbound rate is KES 3.00/min, lower than AT's rates (KES 1.00/min inbound, KES 4.50/min outbound) as of 2026-07-17. For inbound-heavy or mixed workloads, Sautikit is the cheaper option.

**USSD.** AT bundles USSD directly. With Sautikit you keep voice focused and add USSD through [Helloduty](https://helloduty.com) when your product needs that channel: same family, no monolith required.

## Where Sautikit fits

**Voice-only focus.** If you are building a product that only needs programmable voice, Sautikit's narrower scope means there is less surface to learn, fewer abstractions, and a simpler mental model. The documentation is entirely about voice. The API is entirely about voice.

**M-Pesa STK push top-up.** Topping up a Sautikit wallet takes about 30 seconds: call `POST /v1/topups` with `provider: "mpesa"` and your phone number, your phone rings with an M-Pesa PIN prompt, done. No Paybill menu navigation required. For developers who want to automate wallet management or fund wallets quickly during development, STK push is faster.

**JSON-native voice flows.** Sautikit's voice actions are JSON objects. This is easier to generate from code, serialize from a database, or build with a typed SDK. XML construction in code is more error-prone.

**Per-second billing after connect.** A 35-second call costs you 35/60 of a minute, not a full minute. For high-volume outbound calling (OTP calls, fraud alerts, appointment reminders), this adds up to meaningful savings versus per-minute billing.

**Recording included free.** Up to 1 GB of recording storage is included; paid tiers start at KES 599/month for 10 GB. Verify AT's recording pricing before comparing total costs.

**Outbound rate.** Sautikit's outbound rate (KES 3.00/min) is lower than AT's outbound rate (KES 4.50/min, per founder confirmation / AT public pricing 2026-06-30). Inbound calls are free on Sautikit (KES 0/min), which means mixed inbound/outbound workloads cost significantly less than outbound-only pricing implies.

## When to pick which

**Pick Sautikit if:**
- **You want a number now.** Claim one from the console or API and it is live in seconds at KES 116/month incl. VAT — no request queue, no setup fee, no provisioning wait. On AT you request a number, pay KES 5,000 upfront plus KES 2,000 + VAT per month, and wait for it to be assigned.
- **You already have AT voice XML.** Sautikit runs AT-style XML byte-for-byte at runtime, so existing call flows move without a rewrite — and the JSON DSL is there when you want flows that are easy to generate programmatically.
- **You want SDKs built for generating flows from code.** `npm install @sautikit/node` gives a typed client plus voice-action builders that compose IVR flows as plain objects — no XML string assembly — and `@sautikit/webrtc` puts calling directly in the browser. Everything else is clean JSON over HTTP from any language.
- **You bill clients of your own.** Instant numbers with no setup fee leave room to resell: an agency or ISV can spin up a workspace and a dedicated number per client the same day, at a cost that fits inside a client invoice. A KES 5,000 setup fee per number makes that model hard to run anywhere else.
- **Per-second billing matters for your call profile.** Outbound is KES 0.05 per second from the moment the call connects; inbound is free.
- **You top up the way Kenya pays.** M-Pesa STK push funds the wallet from the console or API — no Paybill menu, and low-balance webhooks let you auto-recharge.
- **You are building AI voice.** The Stream verb forks live call audio over WebSocket for realtime agents (Gemini, OpenAI) answering on a Kenyan number.
- **You want recording included.** Up to 1 GB of call recording storage at no charge.
- **Your AI tools can run it.** Sautikit ships a hosted [MCP server](/mcp) with 42 tools, so Claude or any MCP client can claim numbers, place calls, and launch broadcasts — with human confirmation on anything that spends money. Nothing comparable exists on Africa's Talking today.

Africa's Talking's genuine edge today is breadth: one vendor for SMS, USSD, and airtime across multiple African markets. If that is the deciding factor, pair Sautikit for voice with [Helloduty](https://helloduty.com) for SMS, WhatsApp, USSD, and an agent desk — the same coverage, with a voice layer that provisions in seconds instead of a queue.

## Migration sketch

If you are moving a voice integration from Africa's Talking to Sautikit, the main changes are:

**1. Keep your XML (adjust verb differences) or adopt the JSON DSL.**

Sautikit accepts both at runtime, so you can keep your existing AT voice XML; just fix a couple of verb differences: Sautikit's `<GetDigits>` nests its prompt `<Say>` inside the element and uses `maxDigits`/`action`, where AT uses `numDigits`/`callbackUrl`.

AT XML (works on Sautikit after the verb tweaks):
```xml
<Response>
  <Say>Hello. Your balance is ready.</Say>
  <GetDigits maxDigits="1" timeout="30" action="https://yourapp.example/choice" />
</Response>
```

Or adopt the JSON DSL if you want Sautikit-side validation (return from your `voice_callback_url` webhook handler):
```json
{
  "actions": [
    { "say": { "text": "Hello. Your balance is ready.", "language": "en-KE" } },
    { "getDigits": { "numDigits": 1, "timeout": 8000, "action": "https://yourapp.example/choice" } }
  ]
}
```

**2. Replace the AT authorization header.**

AT uses a username/API key pair in basic auth or a Bearer token depending on the endpoint. Sautikit uses a long-lived ES256 JWT API key:

```bash
# Africa's Talking
-H "apiKey: <AT_API_KEY>"

# Sautikit
-H "Authorization: Bearer <SAUTIKIT_API_KEY>"
```

**3. Update callback URLs and webhook verification.**

Sautikit signs webhooks with HMAC-SHA256 over `body + "." + timestamp`, delivered in the `X-Sautikit-Signature: t=<ts>,v1=<hex>` header. Update your webhook handler to verify this signature instead of AT's mechanism.

**4. Update number provisioning.**

AT's number provisioning flow differs from Sautikit's. In Sautikit: `GET /v1/numbers/available` to browse, `POST /v1/numbers/{id}/claim` to claim. Numbers are KES 100/month (ex. VAT) recurring.

**5. Update the outbound call endpoint.**

```bash
# Sautikit outbound call
curl -X POST https://api.sautikit.com/v1/calls \
  -H "Authorization: Bearer $SAUTIKIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+254712345678",
    "to": ["+254700000001"],
    "voice_callback_url": "https://yourapp.example/voice"
  }'
```

The `to` field is an array of E.164 strings. `from` must be a number owned by your workspace.

## Get started

1. [Create a Sautikit workspace](/) and claim a phone number.
2. Top up over **M-Pesa**: KES billing, no card.
3. Point your first AT voice flow at Sautikit (keep the XML or use the JSON DSL) and place a test call.

**[Start with Sautikit →](/)** &nbsp;·&nbsp; **[See pricing →](/pricing)** &nbsp;·&nbsp; **[Need SMS, WhatsApp & an agent desk? Helloduty →](https://helloduty.com)**
