WhatsApp Business API & Cloud API
WhatsApp Cloud API Message Statuses Explained
Understand sent, delivered, read, and failed WhatsApp message status events and how to process them through webhooks.
Step 1
How WhatsApp Message Statuses Work
Cloud API message status updates arrive asynchronously through webhooks. A successful send request gives you a message ID, while later webhook events tell your application whether that message moved through sent, delivered, read, or failed states.
Store status changes against the exact WhatsApp message ID and keep the event timestamp when available. This gives you a reliable audit trail for customer support, campaign reporting, automation decisions, and debugging.
Implementation Checklist
- Persist the WhatsApp message ID returned by the send request.
- Update the matching message record instead of relying on customer phone number alone.
- Keep status processing idempotent so duplicate webhook events are safe.
- Store failure details separately from the human friendly status label.
Step 2
Sent
A sent status means WhatsApp accepted the outbound message into its delivery process. It is useful as an intermediate state, but it does not prove that the recipient's device received the message.
Always match this status to the original outbound message ID rather than updating the latest message for a customer. Multiple messages can be in flight at the same time, and status events can arrive asynchronously.
Implementation Checklist
- Persist the WhatsApp message ID returned by the send request.
- Update the matching message record instead of relying on customer phone number alone.
- Keep status processing idempotent so duplicate webhook events are safe.
- Store failure details separately from the human friendly status label.
Step 3
Delivered
A delivered status indicates that the message reached the recipient's device or another delivery endpoint recognized by WhatsApp. It is a stronger delivery signal than sent, but it is still different from read.
Always match this status to the original outbound message ID rather than updating the latest message for a customer. Multiple messages can be in flight at the same time, and status events can arrive asynchronously.
Implementation Checklist
- Persist the WhatsApp message ID returned by the send request.
- Update the matching message record instead of relying on customer phone number alone.
- Keep status processing idempotent so duplicate webhook events are safe.
- Store failure details separately from the human friendly status label.
Step 4
Read
A read status indicates that WhatsApp reported the message as read when read receipts and the message context allow that status to be produced. Your application should treat it as an engagement signal, not as proof that a customer understood or acted on the message.
Always match this status to the original outbound message ID rather than updating the latest message for a customer. Multiple messages can be in flight at the same time, and status events can arrive asynchronously.
Implementation Checklist
- Persist the WhatsApp message ID returned by the send request.
- Update the matching message record instead of relying on customer phone number alone.
- Keep status processing idempotent so duplicate webhook events are safe.
- Store failure details separately from the human friendly status label.
Step 5
Failed
A failed status means the message did not complete delivery. The webhook status object can include error information that should be stored with the message record so support and retry logic can distinguish temporary failures from configuration or policy problems.
Always match this status to the original outbound message ID rather than updating the latest message for a customer. Multiple messages can be in flight at the same time, and status events can arrive asynchronously.
Implementation Checklist
- Persist the WhatsApp message ID returned by the send request.
- Update the matching message record instead of relying on customer phone number alone.
- Keep status processing idempotent so duplicate webhook events are safe.
- Store failure details separately from the human friendly status label.
Step 6
Webhook Payload Structure
Webhooks are the event input for a WhatsApp integration. Meta verifies a public HTTPS callback URL, then sends incoming messages and message status events to that endpoint. Your app also needs the correct WhatsApp Business Account subscription so events reach the callback.
Implementation Checklist
- Use a public HTTPS callback and a separate verify token.
- Subscribe the app to the correct WABA and required webhook fields.
- Acknowledge events quickly and process them idempotently.
This guide only covers the part needed for the current workflow. For the complete setup, examples, and troubleshooting, continue with How to Set Up WhatsApp Webhooks.
Step 7
Match Statuses to Message IDs
Match Statuses to Message IDs belongs to the delivery tracking layer. Status events should update the exact outbound message identified by the WhatsApp message ID, not simply the most recent message for a customer.
Keep both the current status and enough history to explain how the message progressed. In reporting, distinguish API acceptance from device delivery and reading, and keep failed messages visible with their error details instead of dropping them from the dataset.
Implementation Checklist
- Match status events using the WhatsApp message ID.
- Store event timestamps and failure details where available.
- Make repeated status events safe to process more than once.
- Use delivery reporting as an operational signal, not as a substitute for customer consent or engagement quality.
Step 8
Store Status Updates
Store Status Updates belongs to the delivery tracking layer. Status events should update the exact outbound message identified by the WhatsApp message ID, not simply the most recent message for a customer.
Keep both the current status and enough history to explain how the message progressed. In reporting, distinguish API acceptance from device delivery and reading, and keep failed messages visible with their error details instead of dropping them from the dataset.
Implementation Checklist
- Match status events using the WhatsApp message ID.
- Store event timestamps and failure details where available.
- Make repeated status events safe to process more than once.
- Use delivery reporting as an operational signal, not as a substitute for customer consent or engagement quality.
Step 9
Handle Failed Messages
AI works best in a WhatsApp chatbot when it handles language understanding or flexible answers while deterministic business rules control sensitive actions. Do not let a model decide whether to refund an order, change account data, or move a high value lead without explicit application checks.
Build the AI layer around bounded context. Give it the minimum business information required for the current request, define what it can and cannot answer, and provide tools or API functions only for approved actions. When confidence is low or the request is outside scope, hand the conversation to a human or a structured fallback flow.
Implementation Checklist
- Define which questions AI may answer and which actions remain deterministic.
- Pass relevant business context instead of the entire customer database.
- Validate tool inputs and outputs before changing business records.
- Add human handoff for uncertainty, sensitive requests, and repeated failures.
Step 10
Build Delivery Reporting
Build Delivery Reporting belongs to the delivery tracking layer. Status events should update the exact outbound message identified by the WhatsApp message ID, not simply the most recent message for a customer.
Keep both the current status and enough history to explain how the message progressed. In reporting, distinguish API acceptance from device delivery and reading, and keep failed messages visible with their error details instead of dropping them from the dataset.
Implementation Checklist
- Match status events using the WhatsApp message ID.
- Store event timestamps and failure details where available.
- Make repeated status events safe to process more than once.
- Use delivery reporting as an operational signal, not as a substitute for customer consent or engagement quality.
Related Guides
Continue Learning
Need Implementation Help?
Need Help With Your WhatsApp or Automation Project?
If you need help building, integrating, troubleshooting, or improving a production system, you can discuss the project with me directly.
