KE-priced

2FA, finally priced sanely.

A single REST endpoint to send and verify one-time passcodes over SMS or WhatsApp. Direct carrier routing into the Kenyan mobile networks, M-Pesa-friendly billing, three lines of curl to integrate. Built for people who don't want to pay Twilio prices to verify a Kenyan phone number.

send an OTP
curl -X POST /api/v1/otp/send \
  -H "Authorization: Bearer otp_live_..." \
  -d '{"phone": "+254712345678",
       "channel": "whatsapp"}'

# channel: "sms" (default) or "whatsapp"
# → { "id": "ot_2k7x...", "expires_in": 300 }

SMS or WhatsApp

Pick the channel per request. SMS goes direct to all Kenyan MNOs — no European routing hop. WhatsApp uses Meta’s authentication template, with one-tap autofill on Android.

KSh

Pay in shillings

M-Pesa top-up. No FX rounding, no card surprise. The only mainstream OTP API where you can pay your bill from Lipa na M-Pesa.

Anti-pumping by default

Rate-limited per phone, per IP, per prefix. Premium-rate destinations blocked outright. SMS-pumping fraud doesn't drain your balance overnight.

How it works.

Two REST calls. The full integration is shorter than reading this page.

01

your app calls /send

POST a phone number plus channel ('sms' or 'whatsapp'), get back an opaque request id. We generate a 6-digit code, hash it, dispatch via the chosen channel.

POST /api/v1/otp/send
{ "phone": "+254712345678",
  "channel": "whatsapp" }
02

user types the code

Your UI collects whatever the user types. We don't see it. You don't store it.

"Enter the 6-digit code we sent"
03

your app calls /verify

POST the request id and the code the user typed. We bcrypt-compare against the hash and return verified true/false.

POST /api/v1/otp/verify
{ "id": "ot_2k7x...",
  "code": "486029" }

Pricing.

One number. Includes the SMS — no per-MNO surcharge surprise.

smart price
$0.025/verification
≈ KSh 3.20 per successful verify · resends free for 5 min
M-Pesa top-up Card Stripe link

Get on the early-access list.

Drop your email and we'll auto-send your API keys, sandbox credits, and the first month's SMS at-cost — no waitlist, no approval queue.