# WhatsApp OTP vs SMS OTP: cost per verified user, with a calculator

> WhatsApp authentication rates vs SMS prices by country, the October 2026 changes, and a calculator for cost per verified user including SMS fallback.

Canonical: https://mobilevalidate.com/blog/whatsapp-otp-vs-sms-otp-cost · Last updated: 2026-09-25

![Cover: WhatsApp OTP vs SMS OTP: cost per verified user, with a calculator](https://mobilevalidate.com/og/blog/whatsapp-otp-vs-sms-otp-cost.png)


By MobileValidate team (https://mobilevalidate.com/about) · Published: 2026-09-25 · Category: Deliverability · Tags: WhatsApp, OTP, SMS, Pricing, Channel selection, SMS cost

A WhatsApp one-time passcode is billed as an authentication template message: Meta charges per delivered message at a rate set by the recipient's country, from under a tenth of a cent to about five cents. SMS usually costs more per message in the same country. But users without WhatsApp still need SMS, so compare cost per verified user, not message prices.

All prices below are list prices in USD, fetched on 25 September 2026. Your contract, volume tier and currency can change them. WhatsApp is named here descriptively. MobileValidate is not affiliated with WhatsApp or Meta.

## How does WhatsApp charge for OTP messages?

Per delivered message. Since **1 July 2025**, Meta charges on a per-message basis on the WhatsApp Business Platform. It replaced the older conversation-based model. You are "only charged when a template message is delivered", and rates depend on the template's category and "the recipient WhatsApp phone number's country calling code" ([Meta, 2026](https://developers.facebook.com/docs/whatsapp/pricing)).

Passcodes go out as **authentication templates**, one of three template categories next to marketing and utility. Three details matter for OTP budgets:

- **Volume tiers.** Since 1 July 2025, utility and authentication messages get lower rates at higher monthly volumes, per market.
- **Delivery-based billing.** A message that isn't delivered isn't charged. That includes numbers with no WhatsApp account.
- **Rate changes are scheduled.** Meta updates rate cards up to four times a year (1 January, 1 April, 1 July and 1 October) with at least one month's notice.

When we fetched the pricing page on 25 September 2026, the current rate cards were marked "effective July 1, 2026".

## What does a WhatsApp authentication message cost by country?

Here are the authentication rates from Meta's USD rate card effective 1 July 2026, next to a public SMS list price for the same country ([Meta rate card, 2026](https://developers.facebook.com/docs/whatsapp/pricing#rate-cards); [Plivo SMS pricing, 2026](https://www.plivo.com/sms/pricing/gb/)):

| Market | WhatsApp authentication (USD) | Authentication-international (USD) | Public SMS list price, outbound (USD) |
|---|---:|---:|---:|
| India | 0.0014 | 0.0304 | 0.0800 (international route) |
| Brazil | 0.0068 | n/a | from 0.0484 |
| United Kingdom | 0.0220 | n/a | from 0.0372 |
| Germany | 0.0550 | n/a | from 0.0950 |
| Indonesia | 0.0250 | 0.1360 | from 0.3333 |
| North America (US, Canada) | 0.0034 | n/a | 0.0077 (US long code, plus carrier surcharges) |

Read the SMS column with care. It is one messaging platform's public pay-as-you-go price per SMS, fetched on 25 September 2026. "From" means the cheapest network: prices differ by the recipient's mobile network, and in Brazil, Indonesia and Germany the most expensive network listed costs roughly 30% to 110% more than the cheapest one. For India, the listed route is the international one, used by senders outside India; the domestic route isn't offered on that page. For the US, carrier surcharges come on top. Long messages are billed per segment. Negotiated SMS rates can be much lower, and other platforms price differently. Use your own invoice.

Even with those caveats, the pattern is clear. In most markets on the list, the WhatsApp authentication rate is a fraction of the public SMS price. The gap is widest where SMS is expensive and WhatsApp is widespread.

## What changes on 1 October 2026?

Meta published the rate card effective 1 October 2026 on its pricing page. For authentication, the main changes are ([Meta, 2026](https://developers.facebook.com/docs/whatsapp/pricing)):

- **Higher utility and authentication rates** in Kazakhstan, Kuwait, Morocco, Oman and Ukraine.
- **Lower rates** in Bangladesh, Iraq, Nepal and Sri Lanka. Sri Lanka's authentication rate becomes $0.0020.
- **Nine markets become standalone** on the rate card instead of sitting in a "Rest of" region: Bangladesh, Iraq, Kazakhstan, Kuwait, Morocco, Nepal, Oman, Sri Lanka and Ukraine.
- **Nine new authentication-international rates** in those same nine markets, for example $0.1440 for Sri Lanka and $0.1600 for Kazakhstan.

Rates in India, Brazil, the UK, Germany, Indonesia and North America are unchanged on the October card.

## When does the authentication-international rate apply?

Only to large senders based outside the recipient's country. Meta's rules ([Meta, 2026](https://developers.facebook.com/docs/whatsapp/pricing/authentication-international-rates)):

- A business becomes eligible if it sends more than **750,000** messages outside customer service windows in a moving 30-day period, across all its WhatsApp Business Accounts, to users in markets that have an authentication-international rate.
- Once eligible, it gets **30 days' notice** before the higher rate applies, and eligibility is permanent.
- The rate applies only when the business's primary business location is **in another country** than the recipient's. An Indian business sending codes to Indian users pays the normal rate.
- Nine markets have the rate today (Indonesia since 1 June 2024, India since 1 July 2024, and Egypt, Malaysia, Nigeria, Pakistan, Saudi Arabia, South Africa and the UAE since 1 February 2025). Nine more are added on 1 October 2026.

If you are a global app with heavy traffic to India or Indonesia, model both rates. The international rate for India ($0.0304) is more than 20 times the domestic one.

## How do you calculate cost per verified user?

Message price is only half of it. Not every user has WhatsApp, and some WhatsApp codes need an SMS fallback. Use this formula per country:

**Cost per verified user = c + s × (W + p × S) + (1 − s) × S**

| Symbol | Meaning | Where to get it |
|---|---|---|
| `s` | Share of your users with a WhatsApp account | Your own data, or a pre-check on each number |
| `W` | WhatsApp authentication rate for the country | Meta rate card (your volume tier) |
| `S` | Your SMS price per OTP (all segments) | Your SMS invoice |
| `p` | Share of WhatsApp sends that need an SMS fallback | Your logs: codes not delivered or not entered in time |
| `c` | Pre-check cost per number, if you run one | Our [pricing page](/pricing); unknowns and cached repeats are free |

Worked examples, **excluding `c`**, with illustrative assumptions (`s` = 0.9 in India, Brazil and Indonesia, 0.7 in the UK; `p` = 0.05 everywhere) and the list prices from the table above:

| Scenario | W | S | Cost per verified user | Per 1,000 users | SMS-only per 1,000 | Difference |
|---|---:|---:|---:|---:|---:|---:|
| India, domestic sender | 0.0014 | 0.0800 | $0.0129 | $12.86 | $80.00 | −84% |
| India, auth-international | 0.0304 | 0.0800 | $0.0390 | $38.96 | $80.00 | −51% |
| Brazil | 0.0068 | 0.0484 | $0.0131 | $13.14 | $48.40 | −73% |
| United Kingdom | 0.0220 | 0.0372 | $0.0279 | $27.86 | $37.20 | −25% |
| Indonesia, domestic sender | 0.0250 | 0.3333 | $0.0708 | $70.83 | $333.30 | −79% |
| Indonesia, auth-international | 0.1360 | 0.3333 | $0.1707 | $170.73 | $333.30 | −49% |

The assumptions for `s` and `p` are placeholders, not measurements. Replace them with your own numbers. Two effects dominate. A lower `s` pushes the result toward the SMS-only price. A cheap negotiated SMS rate shrinks the gap, sometimes to nothing in markets like North America.

## Where does a WhatsApp pre-check fit?

Before the send, to pick the channel. Without a pre-check, the usual pattern is "try WhatsApp, fall back to SMS on failure". Money-wise that works, because an undelivered WhatsApp message isn't charged. The cost is time: users without WhatsApp wait for a failed status before their SMS leaves, and some give up.

A pre-check answers the question first. With MobileValidate, the `whatsapp` check on `POST /v1/lookup` returns `registered: true`, `false` or `null` (unknown) with a `checked_at` time. Here is a test-mode request using documented [test numbers](/docs/test-mode):

```bash
curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900001", "+447700900002", "+447700900003"], "checks": ["whatsapp"], "wait": 5}'
```

In test mode, `…001` answers `registered: true`, `…002` `registered: false` and `…003` `unknown` (`registered: null`). Your routing rule is short:

| `whatsapp.registered` | Route |
|---|---|
| `true` | Offer WhatsApp as the default, SMS as the alternative |
| `false` | Send SMS (or voice) straight away |
| `null` (unknown) | Use your default flow; never block on missing data |

The pre-check earns its cost in three situations. First, when you show the channel choice in the UI before sending ("We'll send your code on WhatsApp"). Second, when you use a timer-based fallback, where a wrong guess means paying for both messages. Third, when the check doubles as a fraud signal, next to line type, before any paid message leaves. See [OTP fraud prevention checks](/blog/otp-fraud-prevention-checks-before-sending-a-code) and [SMS pumping](/blog/sms-pumping-how-it-works-and-how-to-stop-it).

Keep `c` small. Check each number once, not at every login: repeat checks inside the freshness window come from your account's cache and aren't billed. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). Our [WhatsApp API guide](/blog/check-if-a-number-is-on-whatsapp-api-guide) covers timeouts and caching in detail.

## When is SMS still the better choice?

In a few clear cases:

- **Low WhatsApp penetration** among your users. If `s` is low, most users need SMS anyway, and a second channel adds work for little saving.
- **Cheap negotiated SMS.** In markets such as the US, where public SMS prices are low per segment, the difference per code can be a fraction of a cent.
- **Auth-international exposure.** A global sender over the threshold pays up to $0.16 per code in some markets from 1 October 2026, which can exceed local SMS contracts.
- **Users who prefer SMS.** Let people choose. A code on an app they don't open converts worse than an SMS they read.

Measure `p` and conversion per channel after rollout, and keep SMS as a protected fallback. Our [channel selection](/use-cases/channel-selection) and [SMS cost reduction](/use-cases/sms-cost-reduction) pages show the full flow.

## What are the key takeaways?

- WhatsApp OTP is billed per delivered authentication message, by recipient country, under the per-message model in place since 1 July 2025.
- On the rate card effective 1 July 2026, authentication rates run from $0.0008 (Colombia) to $0.0550 (Germany); India is $0.0014 and the UK $0.0220.
- From 1 October 2026, nine more markets get authentication-international rates and several rates change. India, Brazil, the UK, Indonesia and North America stay the same.
- Compare **cost per verified user**: c + s × (W + p × S) + (1 − s) × S, with your own share of WhatsApp users and fallback rate.
- A WhatsApp pre-check picks the channel before sending. It saves waiting time and double sends, and unknown results are free and never a reason to block.

## Sources

1. [Pricing on the WhatsApp Business Platform (fetched 25 September 2026)](https://developers.facebook.com/docs/whatsapp/pricing) — Meta for Developers, 2026
2. [USD rate card: cost per message on the WhatsApp Business Platform, effective July 1, 2026 and October 1, 2026 (CSV/XLSX linked from the pricing page)](https://developers.facebook.com/docs/whatsapp/pricing#rate-cards) — Meta, 2026
3. [Authentication-international rates (fetched 25 September 2026)](https://developers.facebook.com/docs/whatsapp/pricing/authentication-international-rates) — Meta for Developers, 2026
4. [SMS pricing by country (United Kingdom, India, Brazil, Indonesia, Germany, United States pages)](https://www.plivo.com/sms/pricing/gb/) — Plivo, 2026

## Frequently asked questions

### How much does a WhatsApp OTP cost?

Meta charges per delivered authentication template message, at a rate set by the recipient's country calling code. On the USD rate card effective 1 July 2026, rates range from $0.0008 (Colombia) to $0.0550 (Germany), for example $0.0014 for India and $0.0220 for the United Kingdom. Volume tiers can lower these rates.

### What is the WhatsApp authentication-international rate?

A higher authentication rate that applies in some markets when an eligible business based in another country sends codes there. Eligibility starts above 750,000 qualifying messages in a moving 30-day period, with 30 days' notice. Nine markets have it today and nine more are added on 1 October 2026.

### Is WhatsApp OTP always cheaper than SMS?

No. In many markets the WhatsApp authentication rate is well below public SMS prices, but the gap varies by country, by your SMS contract and by whether authentication-international rates apply to you. Users without WhatsApp still need SMS, so compare cost per verified user, not price per message.

### Do I pay for a WhatsApp OTP sent to a number without WhatsApp?

Meta's pricing page says you are only charged when a template message is delivered. A message to a number with no WhatsApp account isn't delivered, so it isn't charged, but the user waits for the failure before your SMS fallback starts.

### What does a WhatsApp pre-check add?

It tells you before the send whether the number has a WhatsApp account, so you can offer the right channel at once instead of waiting for a failed delivery. Results are registered, not registered or unknown; unknown results are free and shouldn't block anyone.
