Savaraflow
Open console

One API for SMS, WhatsApp and email

Every message delivered, priced and accounted for.

Send from your code in any language, follow every delivery, and reply to customers from one workspace. The price is shown before anything leaves.

  • Free simulations
  • Prepaid, no contracts
  • Mobile money top-ups
send.mjsPOST /api/v1/messages
import { randomUUID } from "node:crypto";

const res = await fetch(`${process.env.SAVARA_HOST}/api/v1/messages`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SAVARA_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({
    channel: "WhatsApp",
    to: "+256770123456",
    template: { name: "order_ready", language: "en", parameters: ["Amina", "1842"] },
    consent: true,
  }),
});

console.log(res.status, await res.json());
RunTyping request…
WhatsApp · +256 770 123 456

Works with the stack you already use

  • Node.js
  • Python
  • PHP
  • Ruby
  • Go
  • C#
  • Java
  • cURL
  • Next.js
  • Express
  • Laravel
  • Django
Channels
3
SMS, WhatsApp and email
API
1
One endpoint, any language
Recipients per batch
250
Priced and reserved up front
To test
$0
Sandbox keys never touch your wallet

Try it here

Follow one order across three channels.

Switch channels to see the sender, the message and the delivery event your team tracks in SavaraFlow.

  1. 01 Request
  2. 02 Dispatch
  3. 03 Receipt

Message delivery

Acacia Studio · Order #1842

Sample workspace
Your appSavaraFlowWhatsApp
Acacia StudioTo Amina · WhatsApp

Order confirmation

Thanks, Amina. We’ve received order #1842 and will let you know when it’s ready.

ReadMeta reported a read receipt

Coverage and pricing

See where it lands and what it costs.

Pick a destination and type your message. Segments and cost update as you write, the same way the console quotes every send.

  • SMS live
  • SMS on request
  • WhatsApp and email everywhere
Channel
Encoding
GSM-7
Characters
83
Segments
1
Estimated cost to send$0.0392

$0.0392 per message · includes the 12% service fee

SMS is live in Uganda on MTN and Airtel, with branded sender IDs.

Estimate based on public example rates. The console shows a live quote for your workspace before every send.

A woman reading a message on her smartphoneSMSWhatsAppEmailTeam inbox
Acacia Studio · WhatsAppYour order #1842 is ready. Collect before 6 pm.

Channels

Meet customers on the channel they answer.

Start with one and add the others when your senders are ready. Same API, same wallet, same delivery logs.

  • SMS

    Pickup alerts, reminders and one-time codes. Use a branded sender ID where your route allows it.

  • WhatsApp

    Connect your Meta business number, sync approved templates and bring every reply into the team inbox.

  • Email

    Send receipts and account notices through SavaraMail from an address on your own domain.

WhatsApp templates

Approved once, personal every time.

WhatsApp business messages start from a template Meta has approved. Fill in the blanks and each customer gets their own message. Try changing the values.

Approved by Metaorder_ready · UTILITY · en

Hi {{1}}, your order {{2}} is ready. Collect it before {{3}} at {{4}}.

"template": {
  "name": "order_ready",
  "language": "en",
  "parameters": ["Amina", "#1842", "6 pm", "Acacia Studio"]
}
A
Acacia StudioBusiness account
Hi Amina, your order #1842 is ready. Collect it before 6 pm at Acacia Studio.10:42
Track order

The workspace

Everything your team needs between “send” and “sorted”.

Explore the platform
  • Team inbox

    SMS, WhatsApp and email replies in one queue, with assignment and resolve states.

  • CSV bulk sending

    Import a list, clean duplicates and invalid rows, and see the batch price before you send.

  • Smart assist

    Draft a reply, translate to Luganda or Swahili, or triage a conversation. Your agent always sends.

  • Automations

    Trigger follow-ups from events with delays and conditions you control.

  • Prepaid wallet

    Top up with mobile money or card. Every send is quoted and reserved first.

  • Logs and webhooks

    Follow every attempt in delivery logs or receive signed status events.

Smart fallback

If WhatsApp doesn’t land, SMS does.

Turn on fallback when you message a contact. SavaraFlow tries your first choice, then moves through the other channels that contact agreed to until one gets through.

  • Follows the order you choose
  • Only uses channels with consent
  • Every attempt shows in logs and webhooks

CSV bulk sending

Clean the list before you pay for it.

Drop in a spreadsheet export. SavaraFlow fixes local numbers, merges duplicates and sets aside bad rows, then prices the batch before anything is sent.

pickup-list.csv
#namephoneSends toCheck
2Amina Nakato+256 772 481 630+256772481630 Valid
3Brian Mwangi0701 554 210+256701554210 Valid
4Grace Nansubuga+256701100204+256701100204 Valid
5Joseph Kato+256 772 481 630+256772481630 Duplicate
6Sarah Akelloask at counter— Invalid
7Daniel Okello+256 752 908 113+256752908113 Valid
8Lydia Namara+256 772 100 208+256772100208 Valid

Local numbers are completed with +256, duplicates are merged and anything that isn’t a phone number is set aside. Your file never leaves this page.

Rows read
7
Will send
5
Duplicates
1
Invalid
1
Batch estimate · 1 SMS segment each$0.205 × $0.0392

For developers

Your first request in under five minutes.

Run the same endpoint against delivery, provider rejection and an empty wallet. Start with a test key, then switch to a scoped live key.

  • Idempotency keys on every send
  • Signed delivery webhooks
  • Quotes before any charge
Sandbox quickstartPOST /api/v1/messages
curl -i "$SAVARA_HOST/api/v1/messages" \
  -H "Authorization: Bearer $SAVARA_TEST_KEY" \
  -H "Idempotency-Key: demo-1842-delivered" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "SMS",
    "to": "+256770123456",
    "body": "Order 1842 is ready for pickup.",
    "scenario": "delivered"
  }'
200 · DeliveredSample response · $0.00 charged

Guides for the stack you already use

Delivery logs

Every attempt, on the record.

Filter by channel, open any message to see its attempt timeline, and match it to the webhook your server received.

Who it’s for

Built for the people on both ends of a message.

Customers who need the update, developers who send it and the team that answers when someone replies.

Mobile money

Top up in under a minute, from your phone.

Fund your prepaid wallet with mobile money. You see the exact amount before you approve, and credit is ready as soon as the payment is verified.

  1. 1

    Add funds

    $20$50$100
    Continue to checkout

    Choose an amount in the console.

  2. 2
    Confirm payment

    Pay UGX 185,000 to SavaraFlow?

    Enter your PIN to approve

    Checkout shows the UGX amount. Approve it on your phone.

  3. 3

    Payment received

    $198.50 $50.00 added
    • Mobile money top-up+$50.00
    • SMS · Pickup reminders−$94.79

    The USD wallet is credited once the payment is verified.

Use cases

Built for the moments customers wait on.

All use cases

How a message moves

From your app to their phone, in four steps.

The full sending process
  1. 01

    Choose a channel

    Pick SMS, WhatsApp or email and an approved sender. Use the API or the workspace.

  2. 02

    Get a quote

    SavaraFlow prices the message for its destination and segments, then reserves the amount in your wallet.

  3. 03

    Hand off to the provider

    The worker sends through the configured route and records every attempt.

  4. 04

    Follow the outcome

    Delivery and read receipts land in logs, webhooks and the conversation thread.

Questions

What people ask before they send.

Can’t find your answer? Read the docs

Yes. You connect your Meta business number in the console, and SavaraFlow syncs your approved templates. Replies from customers land in the shared inbox.

Prepaid pricing

Know the price before you press send.

Estimate monthly usage in seconds, then get a live quote for any destination in the console.

Choose what SavaraFlow can save on this device. You can change your choice here at any time.