The rate card is the easy part. An Indian OTP costs ₹0.115 over WhatsApp and roughly ₹0.15–₹0.25 over SMS — and almost nobody’s bill matches those numbers, because two things decide the total that no rate card mentions.
The advertised numbers
- WhatsApp authentication template — ₹0.115 per delivered message. No DLT registration, no sender ID, no template approval queue with a telecom operator.
- SMS — ₹0.15 to ₹0.25 depending on route and volume, plus DLT registration and per-template scrutiny. Transactional routes cost more than promotional ones and are the only ones you should use for a login code.
- Voice OTP — several times either, and worth reserving for accessibility and for numbers that have failed both channels.
What actually moves the bill
1. The category your messages went out under
Meta prices marketing several times above utility and authentication. An order update, a delivery alert or a login code usually qualifies as utility or authentication — but only if someone categorises it that way. Sent as marketing by default, you pay the marketing rate for content that was never marketing, on every message, indefinitely.
This is the single largest line-item difference between two invoices for identical volume, and it is invisible on both of them. The messages were delivered, the charges are real, and nothing on the statement says the category was wrong.
2. Messages you were charged for that never arrived
On most platforms the charge lands when the provider accepts the message, not when it is delivered. Roughly one in twenty WhatsApp sends is accepted and then never reaches a handset — an unreachable device, a per-user frequency cap, a policy block. Every one of those is billed.
Across a month of real traffic that is a few percent of spend, and it is undetectable from a statement, because a charge for an accepted message looks exactly like a charge for a delivered one.
QuickAuth holds the price when a message is sent and only makes the charge final once Meta confirms delivery. Anything that never arrives is returned automatically. You are billed for messages that reached a handset.
What a real month looks like
Take 100,000 authentication messages, WhatsApp-first with SMS fallback, on typical Indian delivery rates:
- ~92,000 delivered over WhatsApp at ₹0.115 — about ₹10,580.
- ~8,000 fall back to SMS at ₹0.18 — about ₹1,440.
- Total ≈ ₹12,020, against ₹18,000 for the same volume sent entirely over SMS.
The saving is real but it is not the interesting number. The interesting number is the ~5% that Meta accepted and never delivered: on charge-at-send billing you pay for those too, and on charge-on-delivery you do not.
Questions worth asking any provider
- Am I charged on acceptance or on confirmed delivery? Worth a few percent of spend, and most answers are vague for a reason.
- Who decides the message category, and can I see it? If nobody is actively keeping eligible content in the utility lane, you are paying the marketing rate by default.
- Is DLT registration handled, or is it my homework? The TRAI portal is slow and easy to get wrong — see the DLT guide.
- What happens when WhatsApp does not deliver? Without automatic SMS fallback, that is a user who cannot log in.
- Am I billed in INR, on Indian routes? USD billing on globally-aggregated routes rarely gives the best Indian per-message cost.
The short version
WhatsApp at ₹0.115 with SMS fallback is the cheapest reliable way to send an OTP in India today, and the full comparison goes through deliverability and DLT as well as cost. But the rate is the part everyone quotes and the smallest part of the difference. Ask about category and about delivery-based billing — that is where the money actually is.