# messages webhook reference | Developer Documentation

<div id="bkmrk-messages-webhook-ref">## messages webhook reference

<div><span>Updated: Oct 22, 2025</span></div><div>The **messages** webhook describes messages sent from a WhatsApp user to a business and the status of messages sent by a business to a WhatsApp user.</div><div id="bkmrk-payload-structures"><div id="bkmrk-payload-structures-1"><div>### Payload structures

</div></div></div><div id="bkmrk-incoming-messages"><div id="bkmrk-incoming-messages-1"><div>#### Incoming messages

</div></div></div><div>Messages webhooks describing a message sent by a WhatsApp user - either directly, via an ad, or via a UI component in a previously received message - all have the same common structure. You can easily identify these webhooks because they include a `messages` array. For example, this webhook describes a text message sent a business:</div><div>Objects in the `messages` array can vary greatly based on message type (indicated by the object's `type` property). For this reason, each incoming message type has a dedicated reference, linked in the menu on the left.</div><div id="bkmrk-outgoing-messages"><div id="bkmrk-outgoing-messages-1"><div>#### Outgoing messages

</div></div></div><div>Messages webhooks describing a message sent by a business to a WhatsApp user have a different structure. You can easily identify these because they include a `statuses` array. For example, this webhook describes a message that has been delivered to a WhatsApp user's device:</div><div>Note that these webhooks don't describe the contents of the outgoing message itself, only its status, and each outgoing message can have up to three separate webhooks (one for a status of sent, one for delivered, and one for read).</div><div>Status webhooks also have a [dedicated reference](/books/meta-whatsapp/page/status-messages-webhook-reference-developer-documentation).</div><div id="bkmrk-errors"><div id="bkmrk-errors-1"><div>### Errors

</div></div></div><div>Errors in messages webhooks can be surfaced in three places:</div><span>System-, app-, and account-level errors appear as a `value` object property (`entry.changes.value.errors`). See the [errors](/books/meta-whatsapp/page/errors-messages-webhooks-reference-developer-documentation) reference.</span><span>Incoming message errors appear in the `messages` array (`entry.changes.value.messages.errors`). These webhooks have `type` set to `unsupported`. See the [unsupported](/books/meta-whatsapp/page/unsupported-messages-webhook-reference-developer-documentation) reference.</span><span>Outgoing message errors appear in the `statuses` array (`entry.changes.value.statuses.errors`). See the [status](/books/meta-whatsapp/page/status-messages-webhook-reference-developer-documentation) reference.</span></div>