message.received). CRUD events use the contact-style payload envelope. Message delivery and inbound events use a simpler payload — see below.
CRUD events (contacts / statuses / sources)
Message delivery status events
Live as of 2026-05-28. Fires every time Meta reports a status change for a message you sent via the Send Message endpoints.
Mapping back to your record: the
data.message_id is the exact same wamid.* returned in the data.whatsapp_response.messages[0].id field of every successful send response. Keep a (message_id → your_record_id) table and match on it.
Headers for message delivery webhooks:
Example payload — message.sent
The first (sent) event also includes the outbound message content (text + type) when
available, so you can mirror messages sent from the dashboard — not just ones you sent via the
API. (delivered / read / failed events omit content; you already have it from sent.)
Example payload — message.delivered
Example payload — message.read
Example payload — message.failed
Idempotency: Meta occasionally retries status webhooks to us, which can result in duplicate POSTs to your URL. Dedupe on your end by the
(message_id, status) pair — ignore the second if you’ve already processed it.Ordering is best-effort. Network latency means
delivered may occasionally arrive before sent, or read before delivered. Compare timestamps if order matters to you.Inbound message events
Fires every time a contact sends a message to your WhatsApp number. Lets you mirror the full two-way conversation on your side.
Headers — same as delivery events (
X-Webhook-Signature, X-Webhook-Event: message.received, X-Webhook-Timestamp, User-Agent).
Example payload — text
Example payload — media (image/document/audio/video)
Enable inbound + delivery webhooks the same way (see Webhooks Overview) — set Webhook URL and turn webhook access on. Inbound events fire automatically; no per-event toggle.
Distinguishing events
Usemodel + event together. For example, a contact deletion is model: "App\\Models\\Tenant\\Contact" plus event: "deleted".
Example payloads
Contact created
Contact updated
Contact deleted
Status created
Status updated
Status deleted
Source created
Source updated
Source deleted
Next
Webhook Security
Verify every request with the HMAC-SHA256 signature.