WhatsApp API vs SMS: Cost, Reach and When SMS Still Wins
SMS has one thing WhatsApp can't match: it reaches almost any mobile number, with no app to install and no data connection needed. WhatsApp has nearly everything else: media, buttons, read receipts, and a two-way chat that many customers already prefer. The WhatsApp API vs SMS decision is rarely either/or, but the split decides what you pay and whether your message gets seen.
This comparison puts the two side by side on pricing, reach, registration and one-time passwords, with a working fallback pattern, then names the cases where SMS is still the better tool. Platform details are from Meta's documentation and from Twilio's SMS compliance pages as of October 2026.
Side by side
| WhatsApp API | SMS | |
|---|---|---|
| Who it reaches | People with WhatsApp who come online; Meta holds undelivered messages for up to 30 days | Nearly any mobile number on a network, including feature phones |
| Pricing unit | Per delivered message, by category and recipient country, plus any provider fee | Per message segment, set by your provider and carriers, by country and route |
| Messaging first | Approved template, to opted-in users | Any time, within local consent and registration rules |
| Free-form messages | Only within 24 hours of the customer's last message | Always |
| Registration | Meta business portfolio, display name review, template approval | Country rules, such as A2P 10DLC in the US and DLT in India |
| Content | Text, images, video, documents, buttons, lists, Flows | Text in 160-character segments (fewer with emoji or non-Latin scripts); MMS in some markets |
| Status signals | Sent, delivered, read (when the user allows read receipts), failed | Delivery receipts, where the carrier provides them |
| Sender identity | Business display name and profile; verified badge for Official Business Accounts | A number, short code or alphanumeric sender ID, depending on country |
How the pricing actually differs
WhatsApp bills per delivered message by purpose; SMS bills per segment by route. That one sentence explains most surprises on either bill.
On WhatsApp, Meta charges only when a message is delivered, and the rate depends on the category (marketing, utility, authentication or service) and the recipient's country code. Marketing usually carries the highest rate. Several things are free: everything customers send you, the first 1,000 service messages per business number each month (as of October 2026), and messages inside a free entry point window after a click-to-WhatsApp ad. Details and current rate cards are on Meta's pricing page and in our WhatsApp API pricing guide.
On SMS, a long message is split into segments, each billed. An emoji or a non-Latin script switches the encoding and shrinks each segment, so the same reminder in Hindi or Arabic can need several segments where English needs one. Registration also affects price: Twilio's A2P 10DLC page says anyone sending application SMS to US numbers from a 10-digit long code must register, and unregistered traffic attracts extra carrier fees.
Neither is cheaper everywhere. For short utility alerts, compare your provider's SMS rate for each destination with Meta's utility rate for the same country. For conversations, WhatsApp usually wins, because customer messages are free and replies within the window are billed as service messages.
Reach: the country decides
SMS reach is close to universal; WhatsApp reach depends on whether your customers use WhatsApp every day. Where they do, a WhatsApp message lands in the app they already check. Where they don't, it may sit undelivered while an SMS shows up in the phone's built-in messaging app.
A few hard limits apply on WhatsApp. Meta's support page says businesses in Cuba, Iran, North Korea, Syria and the Crimea, Donetsk and Luhansk regions can't use the platform, and users there can't receive platform messages. Messages to people who stay offline are held for 30 days, and stay undelivered if the person never comes online; for privacy reasons Meta often won't say why a message stayed at "sent."
SMS has its own friction. In India, domestic routes require company and sender ID registration on the operators' DLT platform, and Twilio's India guidelines note that international routes, which skip DLT, deliver from random short numbers instead of your brand name. Carrier filtering can also delay or drop messages it considers spam.
OTPs: WhatsApp first, SMS as the safety net
Authentication templates make WhatsApp a strong primary channel for one-time passwords; SMS remains the fallback for people without WhatsApp, or when delivery stalls.
Meta's authentication templates use fixed preset text with a copy code button, a one-tap autofill button on Android, or zero-tap delivery on Android only. On iOS 26 and later, the keyboard offers the code from the notification. Authentication messages are delivered only to the user's primary device, not linked devices. One pricing catch: from October 1, 2026, businesses sending authentication templates into up to 18 markets from outside them may pay authentication-international rates.
SMS codes work everywhere, but SMS OTP flows are a known target for SMS pumping fraud, where bots request codes to numbers that earn the attacker a share of the fee. Rate-limit code requests per user and per number whichever channel you use.
A simple fallback: send on WhatsApp, wait for a delivered status from your webhook, and send the same code by SMS only if it doesn't arrive in time.
// WhatsApp first, SMS fallback. waitForStatus() reads statuses your webhook stores;
// sendSms() is your SMS provider's call. Use the current Graph API version.
async function sendOtp(phone, code) {
const res = await fetch(`https://graph.facebook.com/v23.0/${process.env.PHONE_NUMBER_ID}/messages`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WHATSAPP_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
messaging_product: "whatsapp",
to: phone,
type: "template",
template: {
name: "login_code",
language: { code: "en" },
components: [
{ type: "body", parameters: [{ type: "text", text: code }] },
{ type: "button", sub_type: "url", index: "0", parameters: [{ type: "text", text: code }] },
],
},
}),
});
if (!res.ok) return sendSms(phone, code); // invalid number, policy error, and so on
const { messages } = await res.json();
const delivered = await waitForStatus(messages[0].id, "delivered", 20000);
if (!delivered) await sendSms(phone, code);
}
Reuse the same code on both channels so whichever arrives first works, and log which channel delivered so you can tune the timeout. Sending both by default doubles the cost for no gain. For the full build, see our guide to the WhatsApp OTP API.
When SMS still wins, and when it doesn't
SMS is still the right call when:
- Recipients may not have WhatsApp, a smartphone or mobile data, as with many field workers, older customers or rural users.
- Your audience expects business messages in the phone's built-in messaging app rather than in WhatsApp.
- You have SMS consent on file but no WhatsApp opt-in, and the message can't wait for you to collect one.
- You haven't finished Meta onboarding, or your display name or templates are stuck in review.
- You need a fallback for codes and critical alerts.
WhatsApp wins when the message is the start of a conversation: support, sales follow-up, delivery questions, payment reminders with a PDF invoice attached, or anything that needs an image or a button. It also wins on cost once customers reply, since their messages are free and your replies inside the 24-hour customer service window are billed as service messages. If you're also weighing branded messages in the native inbox, compare WhatsApp vs RCS Business Messaging.
Where Tenashi fits
Many teams settle on SMS or the official API for alerts and codes, then discover the harder part: customers reply, and somebody has to answer. Tenashi links your existing WhatsApp or WhatsApp Business number to a shared team inbox with DMs, groups and a CRM under every chat, so the follow-up conversation lands with whoever owns that customer. It's a flat plan from $18/mo with no per-message fees, and its API can send text and media from your own systems on that number.
Keep codes elsewhere. Tenashi isn't Meta's official platform, has no authentication templates, and paces sends at one message every 4 to 12 seconds per number, so OTPs belong on authentication templates or SMS. Linked numbers can still be banned for spam; pacing reduces that risk, it doesn't remove it.
Read the API docs · See every feature
FAQ
Is WhatsApp cheaper than SMS for businesses?
Sometimes. WhatsApp charges per delivered message by category and country, and messages from customers are free. SMS charges per segment, by route. Short utility alerts can be cheaper on either channel depending on the country, so compare your SMS provider's rates with Meta's rate card for the markets you actually send to.
Can I send WhatsApp messages to people who haven't opted in?
No. Meta requires opt-in before business-initiated messages, and outside the 24-hour customer service window you must use an approved template. SMS has consent rules too, which vary by country, but it has no template approval step. Collect opt-in for each channel separately, and store when and how each one was given.
Should OTPs go over WhatsApp or SMS?
Use both in sequence. Send an authentication template on WhatsApp first, since copy code and autofill make entry easy, then fall back to SMS if no delivered status arrives within your timeout. Reuse the same code on both channels and record which one delivered, so you can tune the timeout over time.
Does WhatsApp tell me when a message was read?
Usually. Cloud API status webhooks report sent, delivered, read and failed. A read status only arrives if the recipient has read receipts switched on, so treat a missing read as unknown rather than unread. SMS typically offers delivery receipts at most, and only where the carrier provides them.
Do I need to register to send business SMS?
In many countries, yes. US carriers require A2P 10DLC registration for application traffic from 10-digit long codes, and unregistered traffic attracts extra carrier fees. Indian domestic routes need company and sender ID registration on the operators' DLT platform. Check your provider's country guidelines before you launch.
Use SMS where reach is the problem and WhatsApp where conversation is the point. The complete guide to the WhatsApp API covers the platform end to end, and when replies start piling up, get started with Tenashi.