Deliverability

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.

By Published 7 min read

On this page

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).

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".

A sign-up form with a one-time code; one number passes the checks while a VoIP number and a risky number are stopped.A sign-up form with a one-time code; one number passes the checks while a VoIP number and a risky number are stopped.
Check the number before you send the code, and hold back VoIP and high-risk numbers.

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; Plivo SMS pricing, 2026):

MarketWhatsApp authentication (USD)Authentication-international (USD)Public SMS list price, outbound (USD)
India0.00140.03040.0800 (international route)
Brazil0.0068n/afrom 0.0484
United Kingdom0.0220n/afrom 0.0372
Germany0.0550n/afrom 0.0950
Indonesia0.02500.1360from 0.3333
North America (US, Canada)0.0034n/a0.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):

  • 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):

  • 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

SymbolMeaningWhere to get it
sShare of your users with a WhatsApp accountYour own data, or a pre-check on each number
WWhatsApp authentication rate for the countryMeta rate card (your volume tier)
SYour SMS price per OTP (all segments)Your SMS invoice
pShare of WhatsApp sends that need an SMS fallbackYour logs: codes not delivered or not entered in time
cPre-check cost per number, if you run oneOur pricing page; 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:

ScenarioWSCost per verified userPer 1,000 usersSMS-only per 1,000Difference
India, domestic sender0.00140.0800$0.0129$12.86$80.00−84%
India, auth-international0.03040.0800$0.0390$38.96$80.00−51%
Brazil0.00680.0484$0.0131$13.14$48.40−73%
United Kingdom0.02200.0372$0.0279$27.86$37.20−25%
Indonesia, domestic sender0.02500.3333$0.0708$70.83$333.30−79%
Indonesia, auth-international0.13600.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:

Shell
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.registeredRoute
trueOffer WhatsApp as the default, SMS as the alternative
falseSend 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 and SMS pumping.

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 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 and 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) — 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) — Meta, 2026
  3. Authentication-international rates (fetched 25 September 2026) — Meta for Developers, 2026
  4. SMS pricing by country (United Kingdom, India, Brazil, Indonesia, Germany, United States pages) — 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.

All articles

Know before you send.

Tell us about your use case. We review every request and set you up with test and live keys.