A Twilio alternative for WhatsApp with flat pricing
Twilio charges every message — $0.005 plus Meta’s fee — and needs Meta’s business verification before production. WaAPI costs a flat $10 per number and connects the number you already have.
Twilio pricing for WhatsApp
What 1,000 messages cost, and where a flat rate wins
Cost per message = $0.005 Twilio fee + Meta’s fee for the recipient’s country. Calculated with utility messages, the category notifications use; since 1 October 2026 the same rate applies to replies inside the 24-hour window.
| Recipient country | Cost per message | 1,000 messages | 5,000 messages | WaAPI ($10) is cheaper from |
|---|---|---|---|---|
| United States | $0.0084 | $8.40 | $42.00 | about 1,200 messages a month |
| Germany | $0.0600 | $60.00 | $300.00 | about 170 messages a month |
| India | $0.0064 | $6.40 | $32.00 | about 1,600 messages a month |
| Brazil | $0.0118 | $11.80 | $59.00 | about 850 messages a month |
Below the line, Twilio is cheaper
A few hundred messages a month to the United States, India or Brazil cost less on Twilio than a flat $10. That’s the honest reading of the table.
Marketing costs far more
1,000 marketing messages cost $141.50 to Germany, $16.80 to India, $67.50 to Brazil. Marketing templates to US numbers are not allowed at all.
WaAPI’s numbers have a limit too
With send protection on, a number starts up to 60 new conversations a day. 5,000 messages a month are realistic to people you already talk to, not to 5,000 strangers.
As of October 2026. Sources: Twilio pricing and Meta fee list · Meta, non-template messages. Rates in USD; break-even rounded.
At a glance
Beyond the price
|
Twilio
On Meta's platform
|
WaAPI
Independent · flat rate
|
|
|---|---|---|
| Pricing model | No base fee. $0.005 per message, sent or received, plus Meta's fee per message. Failed messages $0.001. Phone numbers from $1.15 a month | $10 per connected number a month, nothing per message |
| Before the first message | Upgraded account, Meta business portfolio, WhatsApp Business Account, and a number not yet registered with WhatsApp | Link a number that runs the app by QR code or pairing code |
| Business verification | Meta's verification before production; according to Twilio it can take several weeks | Not required |
| Templates | Approval usually in minutes, up to 48 hours on manual review | None needed |
| Throughput | Up to 80 messages per second; Meta's sending tiers apply | Paced at 1–2 s between messages per number by default; scale with more numbers |
| Groups | Group messaging through Twilio Conversations | Groups and channels through the same API |
| SDKs | C#, Java, Node.js, PHP, Python, Ruby, Go | PHP, Laravel, Python, Node.js, plus an n8n node and an MCP server |
| Testing | Trial account without card: up to 5 verified recipients, expires after 30 days. Shared sandbox number, one message every 3 seconds | Free trial on your own number |
As of October 2026, read on each provider’s own pages. Sources: Twilio pricing · Twilio messaging pricing · Twilio self sign-up · Twilio trials · Twilio sandbox · Template approvals · Twilio libraries · Throughput
Which one fits
Twilio or WaAPI?
When Twilio is the better choice
- You send large volumes to people who never wrote to you.
- You need the official sender, high throughput — up to 80 messages a second — or more channels such as SMS from one provider.
- Your volume per number stays below the break-even in the table above.
When WaAPI fits better
- You want to use your own existing number.
- Your volume per number is above the break-even for your recipients' country.
- You need groups and channels.
- You want to start today, not after a business verification.
Switching
Moving a project from Twilio
- 1. Link a number that runs the app. The sender you registered with Twilio is on Meta’s API; WaAPI links your app number or a new one by QR code.
- 2. Swap the address format. Recipients become a chat id: the number without the plus sign, followed by @c.us.
- 3. Replace templates with text. No content templates, no approval: the body is the message.
- 4. Move the status callback. Delivery updates and incoming messages go to the instance’s webhook URL.
curl --request POST \
--url https://waapi.app/api/v1/instances/123/client/action/send-message \
--header 'authorization: Bearer your-api-token' \
--header 'content-type: application/json' \
--data '{
"chatId": "[email protected]",
"message": "Your appointment is confirmed for Tuesday, 10:30."
}'
<?php
$instanceId = 123;
$apiToken = 'your-api-token';
$ch = curl_init("https://waapi.app/api/v1/instances/{$instanceId}/client/action/send-message");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'authorization: Bearer ' . $apiToken,
'content-type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'chatId' => '[email protected]',
'message' => 'Your appointment is confirmed for Tuesday, 10:30.',
]),
]);
echo curl_exec($ch);
import requests
instance_id = 123
api_token = "your-api-token"
response = requests.post(
f"https://waapi.app/api/v1/instances/{instance_id}/client/action/send-message",
headers={"authorization": f"Bearer {api_token}"},
json={
"chatId": "[email protected]",
"message": "Your appointment is confirmed for Tuesday, 10:30.",
},
)
print(response.json())
const instanceId = 123;
const apiToken = 'your-api-token';
fetch(`https://waapi.app/api/v1/instances/${instanceId}/client/action/send-message`, {
method: 'POST',
headers: {
authorization: `Bearer ${apiToken}`,
'content-type': 'application/json',
},
body: JSON.stringify({
"chatId": "[email protected]",
"message": "Your appointment is confirmed for Tuesday, 10:30.",
}),
})
.then((res) => res.json())
.then(console.log);
Limits
Limits and sending safely
There is no cap on how many messages you send. What gets numbers restricted is contacting many people who never wrote to you — so send protection is on by default for every new number.
What counts as a new conversation: a person who has never written to your number and whom you have not messaged in the last 7 days. Replies to people who wrote to you first and messages to groups and channels never count, and a follow-up within those 7 days doesn’t count twice.
Need more? Spread new contacts across several numbers, or switch send protection off for a number after confirming the warning — at your own risk.
Flat rate, simple
Unlimited messages. Media, groups, channels, SDKs and MCP included. Cancel anytime.
- No per-message fees
- No per-user fees
- No setup fee
- Cancel anytime
Twilio vs. WaAPI: questions
Cost, setup and what changes in your code.
-
$0.005 for each message sent or received, plus Meta’s fee for the category and the recipient’s country. In the United States a utility message comes to $0.0084 in total, in Germany to $0.0600 (as of October 2026).
-
For utility messages the break-even is about 1,200 messages a month to US numbers and about 170 messages a month to German numbers. Below that, per-message pricing costs less than $10.
-
No. There is no business portfolio, no verification and no template review. You link a number by QR code and send.
-
WaAPI links numbers that run in the app. A number registered on Meta’s API through Twilio doesn’t, so use your app number or a new one.
-
No, only this one messaging channel. If you need SMS from the same provider, that is a reason to stay with Twilio.
Swap the meter for a flat rate
3-day free trial · No credit card · Cancel anytime.