Guide

Understanding WhatsApp Delivery Statuses: Sent, Delivered, Read, and Failed

Every WhatsApp message moves through a small set of status updates on its way to a recipient. Here's what each one actually means, and which ones you can safely build logic around.

The Wevlix Team

Building Wevlix

5 min read

When you send a WhatsApp message through the API, you don't just get a single success or failure response. The message moves through a small set of status updates, delivered to your system as webhook events, and each one tells you something different about where the message actually is.

The four statuses

  • Sent. WhatsApp's servers have accepted the message and are attempting to forward it to the recipient's device. This confirms your request went through, not that anyone received anything yet.
  • Delivered. The message reached the recipient's device. This is the status that matters most for verification and transactional messaging: it's the closest confirmation you get that the message is actually sitting in someone's chat.
  • Read. The recipient opened the chat and viewed the message, the blue double-check most people recognize from regular WhatsApp.
  • Failed. The message could not be delivered, along with an error code explaining why: an invalid or unreachable number, a paused template, a blocked sender, or a rate limit, among other reasons.

Why "read" is the one status you can't rely on

Read receipts depend on a setting the recipient controls. Many people turn read receipts off in their WhatsApp privacy settings, which means their messages can sit as delivered forever even though they were genuinely opened and read. If your OTP flow or notification logic waits for a read confirmation before doing anything, a meaningful share of your users will never trigger it. Build against delivered, not read.

What to actually do with each status

  1. Use delivered as your billing and success signal. This is exactly how Wevlix bills: only delivered messages are charged. Sent-but-not-delivered attempts don't appear on your invoice.
  2. Use failed to trigger a fallback, not a silent retry loop. A failed OTP is a good trigger for a fallback channel. Wevlix can automatically resend a failed WhatsApp OTP through Telegram when fallback is enabled on a project, rather than leaving the user stuck.
  3. Log the failure reason, not just the failure. An invalid number and a rate limit call for different fixes; the error code tells you which one you're looking at.
  4. Treat read as a nice-to-have display detail. Fine to show in a support dashboard, not fine to gate business logic on.

Together with WhatsApp Message Categories Explained and Why we charge per delivered message, not per send elsewhere on this blog, this covers most of what determines both the reliability and the cost of a WhatsApp integration: what you send, and what actually happens to it after you send it.

The Wevlix Team

Ready to try it?

Sign up, get free credit, and send your first WhatsApp OTP in five minutes, with direct help from the Wevlix team.