WhatsApp Business messaging API
Send WhatsApp messages from your own systems.
Receipts, reminders, payment confirmations, codes and updates go out from your business's own WhatsApp number with one API call. You see whether each message was delivered and read, and your team answers the replies together in a shared inbox.
14-day free trial with 100 messages · Pay once for a package of messages, no monthly bill · Built for businesses in Tanzania and East Africa
Your number, your Meta account. You connect your business's own number through Meta's signup, so messages arrive under your business name, not ours.
POST /api/v1/whatsapp/messages
202 Accepted{
"to": "255712345678",
"content": {
"type": "template",
"templateName": "order_ready",
"components": [{ "type": "body", "parameters": [
{ "type": "text", "text": "Amina" },
{ "type": "text", "text": "INV-00123" }
]}]
}
}- Accepted by Connect status QUEUED
- Sent by WhatsApp message.sent
- Delivered to the phone message.delivered
- Read message.read
An example message, from your system to the customer's phone.
How it works
From signup to your first delivered message.
Five steps, in the order WhatsApp requires them. Connect walks you through each one and ticks it off when it is really done — not when you click past it.
- 1
Create your account
Your name, a work email and your business name. You choose a package and start on a free trial — nothing to pay yet.
What happens next
You land in your workspace with a short checklist of the steps below.
- 2
Connect your WhatsApp number
Meta's own signup window opens from Settings. You choose your Meta business account and the number to send from.
What happens next
Connect stores the access encrypted. Nobody pastes a token, and nobody on your team ever sees one.
- 3
Get a template approved
Write the message in the Template Center with readable placeholders, like {{first_name}}. Connect submits it to Meta for review.
What happens next
Meta's decision arrives on its own. Approval is often quick, but it can take up to a day.
- 4
Create an API key
Under Developers. Each key is shown once, can be limited to what your system needs, and can be revoked instantly.
What happens next
Your website, billing system or app keeps it on the server and uses it to send.
- 5
Send, and hear back
One HTTPS call per message. Add a webhook and your system is told when each message is delivered, read or fails.
What happens next
When a customer replies, the conversation opens in your team's inbox — and your webhook hears it too.
No code yet? Your team can send approved templates and reply to customers from the inbox while your developer wires up the API.
The API
One call to send. One webhook to hear back.
Your system says who the message is for and what it says. Connect works out which number to send from and uses your stored credentials. The request has no field for naming a number, so a key can only ever send from its own account.
Request
curl -X POST https://connect.makutano.co.tz/api/v1/whatsapp/messages \
-H "Authorization: Bearer $MAKUTANO_API_KEY" \
-H "Idempotency-Key: invoice-00123" \
-H "Content-Type: application/json" \
-d '{
"to": "255712345678",
"content": {
"type": "template",
"templateName": "order_ready",
"language": "en",
"components": [{
"type": "body",
"parameters": [
{ "type": "text", "text": "Amina" },
{ "type": "text", "text": "INV-00123" }
]
}]
}
}'Response
HTTP/1.1 202 Accepted
{
"success": true,
"data": {
"id": "9b2e4c1a-…",
"conversationId": "41d7f0c2-…",
"status": "QUEUED",
"type": "template",
"to": "255712345678"
}
}A moment later, on your webhook (trimmed)
POST https://your-system.example/hooks/whatsapp
x-makutano-event: message.delivered
x-makutano-signature: t=1791278043,v1=5f0c…
{
"id": "evt_…",
"event": "message.delivered",
"occurredAt": "2026-10-06T09:14:02.000Z",
"data": {
"messageId": "9b2e4c1a-…",
"conversationId": "41d7f0c2-…",
"to": "255712345678",
"waMessageId": "wamid.HBgM…",
"status": "DELIVERED"
}
}Five kinds of message
Text, approved templates, images, documents, and interactive messages with reply buttons or a list.
Safe to retry
Send an Idempotency-Key and a retried request returns the first answer instead of a second message.
Queued or immediate
By default the call returns at once and sends in the background. Ask for "dispatch": "sync" to wait for WhatsApp's own message id.
Signed webhooks
Every event is signed with HMAC-SHA256 using your endpoint's own secret, and retried with growing gaps if your server does not answer.
Delivery tracking
Know what happened to every message.
A send that breaks one of WhatsApp's rules is refused straight away, with the reason. One that goes out is followed all the way to the phone, and every change is recorded against the message id the API gave you.
Before it leaves
- 1 Your account has messages left From a package you bought or your free trial. A message is only used once WhatsApp accepts it.
- 2 Your WhatsApp number is connected So a message is never queued with no number to send it from.
- 3 The contact has not opted out Anyone who replies STOP is never messaged again until they send START.
- 4 WhatsApp’s 24-hour rule is respected Free-form messages only while a conversation is open; otherwise an approved template.
These rules are WhatsApp’s, and no plan or setting switches them off. A refused send names the rule it hit — OPTED_OUT, SERVICE_WINDOW_CLOSED, TEMPLATE_NOT_APPROVED — so your system can do the right thing next.
After it leaves
- QUEUED Accepted by Connect and waiting to go.
- SENT WhatsApp accepted it from your number.
- DELIVERED It reached the customer’s phone.
- READ They opened it — reported when they have read receipts on.
- FAILED With WhatsApp’s error code and the reason, in words.
Your webhook hears each change as it happens. No webhook? Ask for any message by id and get its current status.
A message log you can actually search.
Every message your number sent or received, newest first, marked as sent by the API, sent from the inbox or received. Filter by status or direction, search by phone number or by what the message said, and see the share delivered, read and failed for today or the last 7, 30 or 90 days.
When a customer says "I never got it", you can see whether WhatsApp delivered it — and if it failed, why.
- +255 712 ••• 678 Hi Amina, your order INV-00123 is ready… READ
- +255 754 ••• 210 Your verification code is 482913. DELIVERED
- +254 722 ••• 905 Reminder: your appointment is on 14 Oct… FAILED
Example rows.
Shared inbox
When customers reply, your team answers.
A reminder goes out and the customer writes back with a question. That reply does not disappear into one person's phone: it opens in Connect's inbox, next to the message that prompted it, and anyone on your team can answer from the same business number.
- One thread per customer What your system sent and what your team wrote sit in the same conversation, in order.
- Assign it to someone Give a conversation to the person who should answer it, so everyone can see who is handling what.
- Keep sensitive ones private A conversation can be open to the team, only to the person assigned, or private.
- WhatsApp’s rules, built in Reply freely while the conversation is open. After 24 hours, the inbox offers your approved templates instead.
Inbox
An example conversation.
Everyone gets their own login.
Invite the people who answer customers and choose what each of them can see and do. Separate logins mean you can see who replied, and remove someone who leaves without changing everybody's password.
Answer from wherever you are.
The inbox works in any browser, on a laptop or a phone. Mobile apps are being tested; when they are published, the download links will be here.
Packages
Buy messages when you need them.
Pay once for a package of messages and use them within its days. No monthly bill, nothing renews by itself — when you need more, buy again and the new messages are added to what you have left. You pay by mobile money: M-Pesa (Vodacom), Airtel Money, Mixx by Yas (Tigo Pesa), HaloPesa.
Start free: 14 days and 100 messages, nothing to pay.
Starter
TZS 30,000
2,000 messages · 30 days
- 1 WhatsApp number
- Up to 3 team members
- Messaging API + Delivery webhooks
Business
TZS 100,000
10,000 messages · 30 days
- 1 WhatsApp number
- Up to 10 team members
- Messaging API + Delivery webhooks
Pro
TZS 300,000
50,000 messages · 30 days
- 3 WhatsApp numbers
- Up to 30 team members
- Messaging API + Delivery webhooks
Enterprise
For higher volumes, more numbers or terms of your own. Tell us how many messages you send and we will agree a package that fits.
Talk to usWhat uses a message
Each message you send — from the API or from the inbox — uses one, and only once WhatsApp accepts it. Sends that are refused or that WhatsApp rejects cost nothing, and messages your customers send you are always free.
When messages run out
Unused messages expire with their package. If you buy again before then, the new ones are added and the oldest are used first. When none are left, only sending pauses — your inbox, your customers' replies and your account keep working until you buy again.
Meta's charges are separate
Meta charges for some WhatsApp messages, mainly templates, and bills those charges directly to your WhatsApp Business Account. They are paid to Meta, not to us, and are not part of your Makutano package.
Questions businesses actually ask
How do I pay?
By mobile money — M-Pesa (Vodacom), Airtel Money, Mixx by Yas (Tigo Pesa), HaloPesa. In Billing, choose a package and enter the number you pay from; your phone asks for your PIN to approve it. The messages are added as soon as the payment comes through, and a receipt is emailed to you. There is no card and nothing renews by itself.
What happens when my messages run out?
Only sending pauses. Your inbox, your customers’ replies, your contacts and your account all keep working, and sending starts again the moment you buy a package. Unused messages expire with their package; if you buy again before then, the new messages are added on top and the oldest are used first.
Can I use my own WhatsApp number?
Yes — that is the point. You connect your business's number through Meta's own signup window, and messages arrive under your business name. Connect uses Meta's standard signup, which does not keep a number working in the WhatsApp or WhatsApp Business app at the same time: if the number is on a phone today, Meta will ask you to remove it from the app first. Many businesses use a separate number for this.
What is the 24-hour window, and why do I need templates?
WhatsApp lets a business send ordinary messages only within 24 hours of the customer’s last message to it. To start a conversation, or to write after that window has closed, you send a template — a message whose wording Meta has approved in advance, with blanks for the parts that change, like a name or an order number. Connect checks this before every send and tells you which rule applied if it refuses one.
Does Meta charge for messages as well?
For some of them, yes — mainly templates. Meta bills those charges directly to your WhatsApp Business Account, using the payment method you add in Meta. They are separate from your Makutano package and are paid to Meta, not to us. Meta publishes its current rates on its WhatsApp pricing page.
What happens when a customer wants to stop receiving messages?
If they reply STOP (or UNSUBSCRIBE, CANCEL, END, QUIT, SIMAMA or ACHA), they are marked as opted out, and every later send to them is refused — templates included — until they reply START or ANZA. No plan or setting overrides this. You are still responsible for having their permission to message them in the first place.
Does Connect ever message my customers on its own?
No. A message goes out only when your system calls the API or someone on your team presses send. If your package includes AI reply drafts, they are drafts: a person reads them and decides whether to send.
Do I need a developer?
Not to start. Your team can send approved templates and reply to customers from the inbox on day one. To send automatically — a receipt when a payment clears, a reminder the day before an appointment — someone adds one HTTPS request to your system. It works from any language that can make a web request.
What kinds of message can I send?
Text, approved templates, images and documents (by a link to the file), and interactive messages with reply buttons or a list. Text, images, documents and interactive messages need the 24-hour window to be open; templates do not.
Can my whole team use one number?
Yes. Each person gets their own login with the access you choose, and everyone replies from the same business number, in any browser on a laptop or a phone.
Is my customers’ data kept apart from other businesses?
Yes. Every record belongs to one account, and every request is limited to the account of the key or the person making it — there is no way to name another account in the API. Your WhatsApp access is stored encrypted and is never shown to a browser.
Still unsure? Ask us, read the API documentation, or see Meta's WhatsApp pricing.
From your system to their phone
Send your first WhatsApp message from your own number.
Create your account, connect your number and get a template approved. Connect shows you each step as you reach it.
14-day free trial with 100 messages · Pay once for a package of messages, no monthly bill · Meta's own message charges are billed by Meta