POST /v1/otp/send HTTP/1.1 Host: api.tambua.me Authorization: Bearer $TAMBUA_KEY Content-Type: application/json [ { "phone": "+254712345678", "purpose": "login", "channel": "sms" }, { "phone": "+254712345679", "purpose": "signup", "channel": "whatsapp" }, { "phone": "+233244000000", "purpose": "txn", "channel": "voice" }, { "email": "user@example.com", "purpose": "login", "channel": "email" } ]
One paste into Cursor, Claude or ChatGPT and your assistant knows the endpoints, auth, bulk body shape and channel rules. No SDK required — works with plain fetch / requests / cURL.
No SDK required, no SIM pools to provision, no carrier contracts. Use cURL if you want.
One endpoint, every channel. We pick the carrier route for the destination country.
POST /v1/otp/send phone="+254712345678" channel="sms"
Carrier-graded SMS, email, WhatsApp or voice — same payload, one signed receipt.
> "482910 is your Lendeka > verification code. > Expires in 5 minutes."
POST the code back. Get verified, expired, or attempts-left in a single response.
POST /v1/otp/verify id="tambua_otp_8f3a9c12" code="482910"
Local routes across every African market we ship in. Auto carrier failover.
Transactional sending with sub-second deliverability.
Approved templates with native verification flows.
Spoken codes for landlines and accessibility.
Verify Kenyan users with an M-PESA PIN prompt confirmed by Safaricom — no code to type.
The user sends an SMS or places a missed call to verify themselves. Inbound, code-free.
Verification through the Telegram bot platform.
Session-based codes over USSD — no data plan needed.
Dedicated short codes for high-throughput sender IDs.
Live delivery rates, verification logs, per-environment balance and failure breakdowns. The console mirrors the API — what you see is what your code sees.
POST'd as JSON with an HMAC signature. We retry failed deliveries with exponential backoff up to 24h, and you can replay any event from the dashboard.
POST https://yourapp.com/webhooks/tambua Content-Type: application/json X-Tambua-Signature: t=1716305544,v1=5257a8… X-Tambua-Event: otp.verified { "id": "tambua_evt_88f0a64", "type": "otp.verified", "created": "2026-05-25T14:32:24.110Z", "data": { "otp_id": "tambua_otp_8f3a9c12", "purpose": "login", "channel": "sms", "verified_at": "2026-05-25T14:32:24.108Z" } }
Sandbox keys are free. No card required. Test against the same routing and templates as production.
# in your terminal, right now $ export TAMBUA_KEY=tambua_live_… $ curl -X POST https://api.tambua.me/v1/otp/send \ -H "Authorization: Bearer $TAMBUA_KEY" \ -d '[{"phone":"+254712345678"}]' → otp_8f3a9c12 sent · 142ms