The cheapest way to send phone OTPs in India while still reaching every user is WhatsApp authentication OTP first, at about ₹0.23 per delivered OTP (₹0.13 Meta rate plus ₹0.10 RichAutomate Client Pay fee, with ₹0 setup and ₹0 monthly), and SMS sent only for the OTPs WhatsApp cannot deliver. At 1 lakh logins a month that works out to roughly ₹23,600, against about ₹39,400 for sending every OTP on both channels.
This page shows the full maths at 10,000, 1 lakh and 10 lakh OTPs a month, the fallback logic that keeps SMS spend small, and the honest case where SMS-only is still cheaper on paper. Every assumption is stated so you can replace it with your own quotes, or run your volumes through the WhatsApp API cost calculator.
The per-OTP rates used on this page
| Charge | Rate (India) | Who bills it |
|---|---|---|
| Meta authentication template | ₹0.13 per delivered message | Meta, directly to your card |
| RichAutomate Client Pay platform fee | ₹0.10 per message | RichAutomate |
| WhatsApp OTP, all-in | ≈ ₹0.23 per delivered OTP | Two invoices, no monthly fee |
| Transactional / OTP SMS on DLT routes | Typically ~₹0.12 to ₹0.25 per SMS, depending on volume and vendor | Your SMS vendor |
| DLT registration (entity, header, templates) | One-time, varies by operator | Telecom operator's DLT portal |
Meta rates above are the India figures on our pricing page (marketing is ₹0.8631, utility and authentication ₹0.13 per delivered message). Meta revises rates and offers volume tiers in some markets, so confirm the live rate card before you budget. SMS prices are a market range, not a quote: ask two or three vendors such as MSG91, Gupshup, Kaleyra, Exotel or Twilio for a written per-SMS price at your volume. Our SMS API pricing guide for India lists what to ask for.
RichAutomate itself is usage-only: ₹0 setup, ₹0 monthly, no per-seat fee. If you prefer one invoice, SaaS Pay is all-inclusive at ₹1.50 per marketing and ₹0.50 per utility message; for authentication on SaaS Pay, ask for a quote. For OTP traffic, Client Pay gives the lowest unit cost.
Monthly OTP cost at 10,000, 1 lakh and 10 lakh logins
To compare fairly, the table below uses four strategies and the same assumptions for each:
- SMS price: ₹0.18 per SMS, the middle of the typical range.
- Fallback rate: 12% of OTP requests cannot be delivered on WhatsApp, because the number is not on WhatsApp, the phone is offline, or delivery fails. Your real figure may be anywhere from about 10% to 15% depending on audience; B2C apps in metros will sit lower, rural or feature-phone-heavy audiences higher.
- Billing: Meta bills only delivered messages. To stay conservative, the ₹0.10 platform fee is counted on every WhatsApp attempt, including the ones that fail.
| Strategy (per month) | Per OTP request | 10,000 OTPs | 1,00,000 OTPs | 10,00,000 OTPs | Users reached |
|---|---|---|---|---|---|
| (a) SMS only | ₹0.180 | ₹1,800 | ₹18,000 | ₹1,80,000 | All with SMS delivery |
| (b) WhatsApp only | ₹0.214 | ₹2,144 | ₹21,440 | ₹2,14,400 | ~88%, the rest never get a code |
| (c) WhatsApp first, SMS fallback | ₹0.236 | ₹2,360 | ₹23,600 | ₹2,36,000 | All |
| (d) Both channels on every login | ₹0.394 | ₹3,944 | ₹39,440 | ₹3,94,400 | All, but you pay twice |
How the rows are built, per OTP request: (b) is ₹0.10 platform fee plus 88% × ₹0.13 Meta charge = ₹0.2144. (c) adds 12% × ₹0.18 for the SMS fallbacks = ₹0.236. (d) adds a full ₹0.18 SMS to every request = ₹0.3944.
Two things stand out. First, sending on both channels every time is the most expensive option by a wide margin, about 67% more than WhatsApp-first, and at 10 lakh OTPs that is roughly ₹1.58 lakh a month spent on duplicate codes nobody needed. Second, WhatsApp-only is not a real option for a login screen: a user who cannot receive the code cannot sign in, and a failed login costs more than any OTP.
A deeper breakdown of the authentication category, including how Meta counts a delivered OTP, is in our guide to WhatsApp OTP authentication template cost in India.
Is SMS-only cheaper? When it is, and when it is not
On a raw per-message quote, sometimes yes. Using the formula above, WhatsApp-first costs ₹0.2144 plus 12% of your SMS price. It breaks even with SMS-only at an SMS price of about ₹0.24:
- At ₹0.12 per SMS, SMS-only costs ₹12,000 per lakh OTPs and WhatsApp-first about ₹22,880. SMS-only wins on paper.
- At ₹0.18 per SMS, it is ₹18,000 against ₹23,600. SMS-only still looks cheaper.
- At ₹0.25 per SMS, it is ₹25,000 against ₹24,440. WhatsApp-first is now cheaper, and the gap grows with every paisa of SMS price.
The headline quote is rarely the whole cost of SMS, though. Before you decide on price alone, add the items that do not appear on the rate card:
- Resends. Every time a user taps "resend code", you pay again. Count your actual resend rate from your logs, on both channels, and multiply it in.
- Billing basis. Ask whether your SMS vendor bills per submitted SMS or per delivered SMS. Meta bills WhatsApp authentication only on delivery.
- DLT overhead. One-time entity registration and the ongoing work of keeping headers and templates approved with operators.
- Fraud exposure. SMS pumping can inflate a bill far beyond normal traffic (covered below).
- Conversion. One-tap autofill and copy-code buttons on WhatsApp shorten the login step. If even a small share of drop-offs turn into completed sign-ups, that is worth more than the per-OTP gap.
If your SMS quote is at the bottom of the range, your audience is mostly on SMS-friendly devices and fraud is not a concern, SMS-only can be the right call. For most consumer apps, WhatsApp-first is the better balance. We compare the two channels in detail in WhatsApp OTP vs SMS OTP in India.
Want to test WhatsApp OTP on your own users? Start a 14-day free trial with 100 free credits. No card, ₹0 setup, ₹0 monthly, and delivery status webhooks for every message.
How WhatsApp-first, SMS-fallback works
RichAutomate sends the WhatsApp OTP; your existing SMS vendor sends the fallback. RichAutomate does not send SMS itself. The glue is a small piece of logic in your backend, driven by the WhatsApp delivery status webhook (sent, delivered, read, failed) and a short timeout.
Get a 1-minute BSP audit on WhatsApp
Drop your WhatsApp number — we line-item your current invoice against Meta India rates in under 60 seconds. India-hosted, DPDP-compliant.
| What happens after the WhatsApp OTP is sent | Your backend does |
|---|---|
| Webhook reports delivered within the timeout | Nothing more. Cancel the fallback timer. |
| Webhook reports failed (for example, number not on WhatsApp) | Send the same code by SMS immediately. |
| No delivered status after 20 to 30 seconds | Send the same code by SMS. |
| User taps "resend" after a fallback | Resend by SMS, rate-limited, without a new WhatsApp attempt. |
| This user failed on WhatsApp last time | Go to SMS first for this user and save the WhatsApp attempt. |
In short pseudo-flow:
code = generate_otp(); store(code, ttl=5 min)
send_whatsapp_auth(phone, code)
wait for webhook up to 25 s:
delivered -> done
failed or timeout -> send_sms(phone, code)
remember channel result for this phone
Three rules keep this clean:
- Use one code for both channels. If the WhatsApp message arrives late, the user can still enter it. Generating a second code creates "wrong OTP" complaints.
- Keep the timeout short. 20 to 30 seconds is long enough for a normal WhatsApp delivery and short enough that the user does not abandon the screen.
- Store the per-number result. Over a few weeks, your fallback rate falls because known non-WhatsApp numbers go straight to SMS.
WhatsApp authentication template rules
Meta treats OTP messages as their own category with a fixed format. Knowing the rules in advance saves rejected templates:
- OTP only. The body is Meta's preset text ("
is your verification code"), with an optional security line telling users not to share the code and an optional expiry line. You cannot add marketing copy or offers. - No URLs, media or emojis in the authentication body. Links and promotional content belong in other template categories.
- Buttons: a copy-code button works everywhere; one-tap autofill and zero-tap work on Android once your app's package name and signature hash are configured.
- Code length: up to 15 characters, so a standard 4 to 8 digit numeric OTP is fine.
Autofill is where WhatsApp OTP pulls ahead on user experience. The setup steps for both button types are in WhatsApp one-tap and zero-tap OTP autofill.
SMS OTP in India: DLT and TRAI basics
Commercial SMS in India runs on the operators' DLT (Distributed Ledger Technology) system under TRAI's rules on unsolicited commercial communication. In practice, before your first OTP SMS goes out you will need to:
- Register your business as a principal entity on an operator's DLT portal. There is a one-time fee that varies by operator.
- Register a sender header, the short ID users see as the SMS sender.
- Register each OTP template, with variable parts marked. SMS that does not match an approved template can be blocked by operators.
- Link your SMS vendor so its traffic is tied to your entity and templates.
TRAI has also tightened rules on links and call-back numbers inside SMS content in recent years, so keep OTP templates plain. Most SMS vendors will walk you through registration; budget a few days for approvals. This setup is a one-off, but it is also why SMS fallback should stay a fallback: every new SMS template is another approval cycle.
Fraud: why SMS pumping changes the maths
SMS pumping, also called toll fraud or artificially inflated traffic, is when bots hit your "send OTP" endpoint with numbers controlled by the fraudster, often on premium or international ranges. The attacker earns a share of the termination fee and you pay for every SMS. A single unprotected sign-up page can burn through a month's OTP budget in a night.
WhatsApp changes the economics but does not remove the risk. Meta bills only delivered messages, and delivery needs a real WhatsApp account on the other end, which makes the classic pumping model less profitable. Bots can still trigger sends to real accounts, so keep the basics in place on every channel:
- Rate-limit OTP requests per phone number, per IP and per device.
- Add a CAPTCHA or proof-of-work step before the first OTP on web sign-ups.
- Block or challenge country codes you do not serve.
- Alert on sudden spikes in OTP volume or in fallback rate.
With WhatsApp-first, SMS fires only on failures, so an attacker has a much smaller SMS surface to abuse than on an SMS-only flow.
How to choose an OTP vendor: checklist
Whether you combine two vendors or buy a bundled CPaaS, ask each one the same questions in writing:
- All-in price per delivered OTP on each channel at your volume, including any markup on Meta's rate.
- Fixed fees: setup, monthly plan, minimum commitment, per-seat charges.
- Billing basis for SMS: submitted or delivered.
- Delivery status webhooks for WhatsApp, so you can trigger fallback within seconds.
- Autofill support: copy-code and one-tap buttons on authentication templates.
- DLT help for the SMS side: who handles entity, header and template registration.
- Fraud controls offered, and who pays for pumped traffic.
- Payment model: can you pay Meta directly (Client Pay style) for the lowest unit cost?
For a wider view of the market, see our roundup of the best CPaaS providers in India. Bundled CPaaS players are convenient when you want one contract for SMS, voice and WhatsApp; a WhatsApp-specialist platform plus a separate SMS vendor is usually cheaper per OTP when WhatsApp carries most of the traffic.
India-specific notes
- Reach: WhatsApp has over 500 million users in India, which is why the fallback share stays small for most consumer audiences.
- Dual-SIM phones: a user's WhatsApp is often on a different SIM from the number they type. Let users choose "send on SMS instead" after a failed attempt.
- Overseas users: OTPs to non-Indian numbers are billed at that country's rate, and Meta applies separate international authentication rates in some markets. Check the rate card if you have NRI or global users.
- GST: GST treatment depends on how each invoice is raised, so compare quotes on the same tax basis.
- Volume: at 10 lakh OTPs a month and above, ask about Meta's volume tiers for authentication and renegotiate your SMS rate; both move the totals above.
Bottom line
For most Indian apps, WhatsApp authentication OTP first, SMS only on failure is the cheapest setup that still reaches every user: about ₹0.23 per delivered WhatsApp OTP on RichAutomate Client Pay, roughly ₹23,600 per lakh logins with a 12% SMS fallback, against about ₹39,400 for sending on both channels every time. If your SMS quote is very low and fraud is not a concern, SMS-only can be cheaper on paper, so run your own numbers with your real resend and fallback rates. RichAutomate charges ₹0 setup, ₹0 monthly and ₹0.10 per message, with Meta billed at its own rate. Start your free trial to measure your fallback rate on real traffic, or compare plans on the pricing page.