# Webhook Events (Partner & Messaging API)

## Partner Webhook Events (associated with Partner API)

Real-time notifications sent to your Partner Webhook about the management of WABAs and phone numbers associated with your Partner Account.&#x20;

After your Partner Hub [Webhook URL](/partner/get-started/partner-api-integration.md#setting-up-your-webhook-url) is configured, you will start receiving these Webhook events.

The events shared today are:

### Client Account created <a href="#client-created-event" id="client-created-event"></a>

This event is submitted to a partner's webhook when a new client registers under their hub.

The field event will have `client_created` value set.

<details>

<summary>Example payload</summary>

![](/files/sIabQGJ4SxuqNjcfkcSj)

</details>

### Channel created

This event is triggered every time a new channel is created under your 360dialog Partner Hub. This is the first event created after the client finishes signup.

The field `event` will have `channel_created` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

Under the field created\_at you can see when was the account created and under billing\_started\_at you can see when the billing started.

You can also see the current Business Manager status of this account under `fb_account_status` and the account status under `status` and `account_mode`.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Channel ready

This event is submitted to a partner's webhook when a number is ready to be registered.

Field event will have `channel_ready` value set.

<details>

<summary>Example Payload</summary>

<img src="/files/Z6SJMPn6lWRvEhyjg0Uj" alt="" data-size="original">

</details>

### Channel running

This event is submitted to a partner's webhook when a new number transitions into running state.

Field **event** will have `channel_running` value set.

<details>

<summary>Example Payload</summary>

<img src="/files/QQtPa6Jag5m1wSzWwGey" alt="" data-size="original">

</details>

### Channel live

This event is triggered every time a new channel submitted under your 360 Partner Hub goes live.

The field `event` will have `channel_live` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

Under the field created\_at you can see when was the account created and under billing\_started\_at you can see when the billing started.

You can also see the current Business Manager status of this account under `fb_account_status` and the account status under `status` and `account_mode`.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Channel permission granted

This event is triggered every time a client grants permission for their number, meaning that you can now request the API Key for this specific channel.

The field `event` will have `channel_permission_granted` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Channel permission revoked

This event is triggered every time a client revokes permission for their number.

The field `event` will have `channel_permission_revoked` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Channel subscription was set

This event is triggered when a channel subscription is set, meaning when the billing starts for this channel.

The field `event` will have `channel_subscription_set` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Cancellation request

This event is triggered every time a client requests a channel cancellation.

The field `event` will have `cancellation_request` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Cancellation revoked

This event is triggered every time a client revokes a channel cancellation.

The field `event` will have `cancellation_revoke` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Cancellation processed

This event is triggered every time a client cancellation request is processed and the phone number is deleted.

The field `event` will have `cancellation_processed` value set.

You will be able to identify which client created this channel in the `client_id` and `client` fields. You are also able to see the phone number (`phone_number` field) and display name (`phone_name` field) registered in this channel.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Channel enabled for template messaging

Right after signup, after the channel is live, it is temporarily disabled for template message sending. Each channel goes through internal 360dialog review and, if valid, will have template messaging enabled in up to 2 hours.

When a channel is enabled for template messaging, the partner will receive this event.

Field `event` will have `template_messaging_enabled` value set.

<details>

<summary>Example payload</summary>

![](/files/d0pEoybGbfyLQAlbsD9w)

</details>

### Account violation

This event is submitted to a partner's webhook when a client's account is restricted.

The field `event` will have `account_violation` value set.

You will be able to identify which account was restricted by the value `phone_number`. There will also be `violation_type` and `violation_info`, which indicates what made the account be restricted.

<details>

<summary>Example payload</summary>

![](/files/0r7KdrIj5iOi0eJFUp4k)

</details>

### **Account banned**

This event is submitted to a partner's webhook when a client's account is banned.

The field `event` will have `DISABLED_UPDATE` value set.

<details>

<summary>Example payload</summary>

```
{
      "id": "string",
      "event": "DISABLED_UPDATE",
      "data": {
        "id": "string",
        "setup_info": {
          "phone_number": "string",
          "phone_name": "string"
        },
        "status": "string",
        "account_mode": "live",
        "created_at": "string",
        "billing_started_at": null,
        "cancelled_at": null,
        "terminated_at": null,
        "client_id": "string",
        "current_quality_rating": null,
        "current_limit": null,
        "has_inbox": false,
        "is_oba": false,
        "availability_status": "string",
        "version": 1,
        "is_migrated": false,
        "settings": null,
        "client": {
          "id": "string",
          "name": "0",
          "contact_info": {},
          "partner_payload": null
        },
        "waba_account": {
          "id": "string",
          "on_behalf_of_business_info": null,
          "fb_account_status": "string",
          "namespace": null,
          "external_id": "string",
          "fb_business_id": "string"
        }
      }
    }
```

</details>

### Account restriction

This event is submitted to a partner's webhook when a client's account is restricted.

The field `event` will have `account_restriction` value set.

You will be able to identify which account was restricted by the value `phone_number`. There will also be `violation_type`, which indicates what made the account be restricted.

<details>

<summary>Example payload</summary>

![](/files/0r7KdrIj5iOi0eJFUp4k)

</details>

### &#x20;Business Capability Update event

The field `event` will have `business_capability_update` value set.

This webhook notifies you of changes to a business's capabilities. This can include changes to the maximum number of business phone numbers your WhatsApp Business Account can have (`max_daily_conversation_per_phone`) or a change to the[ messaging limit](/partner/messaging/messaging-limits-and-quality-rating.md) for all of the WhatsApp Business Account's business phone numbers (`max_phone_numbers_per_business, max_phone_numbers_per_waba`).

{% hint style="warning" %}
**Starting October 7, 2025:**

* A new `max_daily_conversations_per_business` parameter will be included, which indicates the business portfolio's messaging limit (`2000`, `10000`, `100000`, or `UNLIMITED`).
* The existing `max_daily_conversation_per_phone` parameter will now indicate the business portfolio's messaging limit (values same as above). The parameter will be removed in **February, 2026**.
  {% endhint %}

<details>

<summary>Example payload</summary>

<img src="/files/xmVEHKy4OSoG75hvePKX" alt="" data-size="original">

</details>

### Quality-rating event

This event is submitted to a partner's webhook when numbers quality rating changes and we receive a callback from Meta.

Field **event** will have `phone_number_quality_changed` value set. Also in data object, there will be an extra property called `current_quality_update_event` to tell the type of event received from FB. Examples of events are `flagged`, etc.

{% hint style="warning" %}
**Starting October 7, 2025:**

* A new `max_daily_conversations_per_business` parameter will be included that describes the portfolio's messaging limit (values same as above).
* The existing `current_limit` value will now indicate the business portfolio's messaging limit or the business phone number's [throughput level](https://developers.facebook.com/docs/whatsapp/cloud-api/overview#throughput). The parameter will be removed in **February**, 2026.
  {% endhint %}

<details>

<summary>Example payload</summary>

![](/files/AfHuFHhMrZvaeusbbiL9)

</details>

### Message Template Status Update <a href="#message-template-updates" id="message-template-updates"></a>

A template status can change automatically, based on a review decision, appeal outcome, or a change to its quality rating. Webhooks are sent with the following structure:

<pre class="language-json"><code class="lang-json">{
  "id": "string",
  "event": "string",
  "data": {
    "id": "string",
    "setup_info": {
      "phone_number": "string",
      "phone_name": "string"
    },
    "status": "string",
    "account_mode": "string",
    "created_at": "string",
    "billing_started_at": "string",
    "cancelled_at": "null",
    "terminated_at": "null",
    "client_id": "string",
    "current_quality_rating": "string",
    "current_limit": "string",
    "has_inbox": "boolean",
    "is_oba": "boolean",
    "availability_status": "string",
    "version": "number",
    "is_migrated": "boolean",
    "settings": {
      "tier": "string"
    },
    "client": {
      "id": "string",
      "name": "string",
      "contact_info": {
        "email": "string",
        "country": "string",
        "street_name": "string"
      },
      "partner_payload": "null"
    },
    "waba_account": {
      "id": "string",
      "on_behalf_of_business_info": {
        "id": "string",
        "name": "string",
        "type": "string",
        "status": "string"
      },
      "fb_account_status": "string",
      "namespace": "string",
      "external_id": "string",
      "fb_business_id": "string"
    },
    "integration": {
      "enabled": "boolean",
      "state": "string",
      "app_id": "string",
      "hosting_platform_type": "string"
    },
<strong>    "template": { //template payload
</strong>    }
  }
}

</code></pre>

The `template payload` structure depends on the type of the template update:<br>

**Template Quality Score Changed**

The field `event` will have `waba_template_quality_score_changed` value set. See [Quality Rating](/partner/messaging/messaging-limits-and-quality-rating.md#quality-rating).&#x20;

<details>

<summary>Example payload</summary>

```json
"template": {
            "id": "<template_id>",
            "external_id": "<external_id>",
            "name": "<name>",
            "previous_quality_score": "<old_quality>",
            "new_quality_score": "<new_quality>",
            "language": "<language>",
        }
```

</details>

**Template Status Changed**

The field `event` will have `waba_template_status_changed` value set. See [Template Statuses](/partner/messaging/template-messages.md#template-statuses).

<details>

<summary>Example payload</summary>

```json
"template": {
      "id": "<template_id>",
      "external_id": "<external_id>",
      "name": "<name>",
      "new_status": "<new_status>",
      "language": "<language>",
      "rejected_reason": "<rejected_reason>",
      "other_info": "<other_info>"
    }
```

The status of the message template can be: `APPROVED`, `IN_APPEAL`, `PENDING`, `REJECTED`, `PENDING_DELETION`, `DELETED`, `DISABLED`, `PAUSED`, `LIMIT_EXCEEDED`.&#x20;

The `rejection_reason`  can be:  `ABUSIVE_CONTENT`, `INVALID_FORMAT`, `NONE`, `PROMOTIONAL`, `TAG_CONTENT_MISMATCH`, `SCAM`

</details>

**Template Category Changed**

The field `event` will have `waba_template_category_changed` value set. See [Template Categories](/partner/messaging/template-messages.md#template-categories).

<details>

<summary>Example payload</summary>

<pre class="language-json"><code class="lang-json"><strong>"template": {
</strong>            "id": "&#x3C;template_id>",
            "external_id": "&#x3C;external_id>",
            "name": "&#x3C;name>",
            "previous_category": "&#x3C;old_category">,
            "new_category": "&#x3C;new_category>",
            "language": "&#x3C;language>"
        }
</code></pre>

</details>

### Flow endpoint availability event <a href="#flow-endpoint-availability-event" id="flow-endpoint-availability-event"></a>

This event is submitted to partner's webhook when flow's endpoint availability reaches the threshold.

Field **event** will have `ENDPOINT_AVAILABILITY` value set.

<details>

<summary>Example Payload</summary>

<img src="/files/06fNKyt5rN4HZ8MouS9F" alt="" data-size="original">

</details>

### Flow client error rate event <a href="#flow-client-error-rate-event" id="flow-client-error-rate-event"></a>

This event is submitted to partner's webhook when flow's client error rate reaches the threshold.&#x20;

Field **event** will have `CLIENT_ERROR_RATE` value set.

<details>

<summary>Example Payload</summary>

<img src="/files/9gyPeAJ8je94ggemORPC" alt="" data-size="original">

</details>

### Flow endpoint error rate event <a href="#flow-endpoint-error-rate-event" id="flow-endpoint-error-rate-event"></a>

This event is submitted to partner's webhook when flow's endpoint error rate reaches the threshold.

Field **event** will have `ENDPOINT_ERROR_RATE` value set.

<details>

<summary>Example Payload</summary>

<img src="/files/tgHFfic4UdIkEV4A08rI" alt="" data-size="original">

</details>

### Flow endpoint latency event <a href="#flow-endpoint-latency-event" id="flow-endpoint-latency-event"></a>

This event is submitted to partner's webhook when flow's endpoint latency reaches the threshold.

Field **event** will have `ENDPOINT_LATENCY` value set.

<details>

<summary>Example Payload</summary>

<img src="/files/2vQ4cXBffC7wMHWSaGXg" alt="" data-size="original">

</details>

### Flow status change event <a href="#flow-status-change-event" id="flow-status-change-event"></a>

This event is submitted to partner's webhook when flow's status is changed.

Field **event** will have `FLOW_STATUS_CHANGE` value set.

<details>

<summary>Example Payload</summary>

<img src="/files/YroUnPelsqbGa765mjxw" alt="" data-size="original">

</details>

### History webhook <a href="#flow-status-change-event" id="flow-status-change-event"></a>

This event is submitted to partner's webhook when the business approves or declines sharing of their chat history

Field **event** will have `HISTORY` value set

<details>

<summary>Example Payload</summary>

```
"id": "<EVENT_ID>",
  "event": "history",
  "data": {
    "id": "<WABA_ID>",
    "messaging_product": "whatsapp",
    "metadata": {
      "display_phone_number": "<BUSINESS_PHONE_NUMBER>",
      "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>"
    },
    "history": [
      {
        "metadata": {
          "phase": "<PHASE>", // Add appropriate phase value
          "chunk_order": <CHUNK_ORDER>,
          "progress": "<PROGRESS_VALUE>" // Add appropriate progress value
        },
        "threads": [
          {
            "id": "<WHATSAPP_USER_PHONE_NUMBER>",
            "messages": [
              {
                "from": "<BUSINESS_OR_WHATSAPP_USER_PHONE_NUMBER>",
                "to": "<WHATSAPP_USER_PHONE_NUMBER>", // Only included if SMB message echo
                "id": "<WHATSAPP_MESSAGE_ID>",
                "timestamp": "<DEVICE_TIMESTAMP>",
                "type": "<MESSAGE_TYPE>",
                "<MESSAGE_TYPE>": {
                  "<MESSAGE_CONTENTS>" // Fill in message contents specifics
                },
                "history_context": {
                  "status": "<MESSAGE_STATUS>"
```

</details>

### SMB App State sync webhook <a href="#flow-status-change-event" id="flow-status-change-event"></a>

This event provides updates about the business customer's contacts, including future additions or changes

Field **event** will have `SMB_APP_STATE_SYNC` value set

<details>

<summary>Example payload</summary>

```
"id": "DM3",
      "event": "smb_app_state_sync",
      "data": {
        "id": "<WABA_ID>",
        "messaging_product": "whatsapp",
        "metadata": {
          "display_phone_number": "<BUSINESS_PHONE_NUMBER>",
          "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>"
        },
        "state_sync": [{
          "type": "contact",
          "contact": {
            "full_name": "<CONTACT_FULL_NAME>",
            "first_name": "<CONTACT_FIRST_NAME>",
            "phone_number": "<CONTACT_PHONE_NUMBER>"
          },
          "action": "<ACTION>",
          "metadata": {
            "timestamp": "<WEBHOOK_TIMESTAMP>"
```

</details>

### Template correct category detected

Emitted when a `template_correct_category_detection` Meta webhook occurs.

<details>

<summary>Example payload</summary>

```json
{
  "id": "PW0",
  "event": "waba_template_correct_category_detected",
  "data": {
    "message_template_name": "some_name",
    "category": "MARKETING",
    "correct_category": "UTILITY",
    "message_template_id": "45678",
    "message_template_language": "en",
    "external_waba_id": "12345",
    "waba_account_id": "WA0"
  }
}
```

</details>

### Template components changed

Emitted when a `message_template_components_update` Meta webhook occurs.

<details>

<summary>Example payload</summary>

```json
{
  "id": "DM0",
  "event": "waba_template_components_changed",
  "data": {
    "client_id": "C1",
    "language": "en",
    "message_template_element": "New component.",
    "message_template_id": "TFB1",
    "message_template_name": "some_name",
    "message_template_title": "Technician visit",
    "namespace": "namespace_abc",
    "partner_id": "P0",
    "time": "2020-10-15T08:40:59.304",
    "waba_account_id": "WA0",
    "waba_external_id": "E1"
  }
}
```

</details>

## Messaging Webhook (associated with Messaging API)

[After the webhook is set for the number,](https://docs.360dialog.com/partner/onboarding/webhook-events-and-setup/pages/KEjZTujuNtCqNNUrjS73#id-2.-set-waba-webhook-url) it will receive notifications about [messaging](broken://pages/GDFkrzImpDeal8X5B9fP) events. These events are grouped and can be used for:

* **Inbound Message Notifications:** Use it to get a notification when a customer performs an action, such as:

<table data-header-hidden><thead><tr><th width="374"></th><th></th></tr></thead><tbody><tr><td><ul><li>Sends a text message to the business</li><li>Sends an image, video, audio, document, or sticker to the business</li><li>Sends contact information to the business</li><li>Sends location information to the business</li><li>Clicks a reply button set up by the business</li></ul></td><td><ul><li>Clicks a call-to-actions button on an Ad that Clicks to WhatsApp</li><li>Clicks an item on a business' list</li><li>Updates their profile information such as their phone number</li><li>Asks for information about a specific product</li><li>Orders products being sold by the business</li></ul></td></tr></tbody></table>

**Message Status Notifications**: Use it to monitor the status of sent messages.

| <ul><li><code>delivered</code></li></ul> | <ul><li><code>read</code></li></ul> | <ul><li><code>sent</code></li></ul> |
| ---------------------------------------- | ----------------------------------- | ----------------------------------- |

If a webhook event isn't delivered for any reason (e.g., the client is offline) or if the webhook request returns a HTTP status code other than 200, we retry the webhook delivery. We continue retrying delivery with increasing delays up to a certain timeout (typically 24 hours, though this may vary), or until the delivery succeeds.

The object is always `whatsapp_business_account` but the `field` will be indicative of the type of information being sent.

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
      "value": {
        "messaging_product": "whatsapp",
        "metadata": {
          "display_phone_number": PHONE_NUMBER,
          "phone_number_id": PHONE_NUMBER_ID
        },
        "contacts": [{
          "profile": {
            "name": "NAME"
          },
          "wa_id": PHONE_NUMBER
        }],
        "messages": [{
          "from": PHONE_NUMBER,
          "id": "wamid.ID",
          "timestamp": TIMESTAMP,
          "text": {
            "body": "MESSAGE_BODY"
          },
          "type": "text"
        }]
      },
      "field": "messages"
    }]
  }]
}
```

### Text Messages <a href="#text-messages" id="text-messages"></a>

See [Text Messages](/partner/messaging/sending-and-receiving-messages/text-messages.md).

The following is an example of a text message you received from a customer:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [{
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                  "display_phone_number": PHONE_NUMBER,
                  "phone_number_id": PHONE_NUMBER_ID
              },
              "contacts": [{
                  "profile": {
                    "name": "NAME"
                  },
                  "wa_id": PHONE_NUMBER
                }],
              "messages": [{
                  "from": PHONE_NUMBER,
                  "id": "wamid.ID",
                  "timestamp": TIMESTAMP,
                  "text": {
                    "body": "MESSAGE_BODY"
                  },
                  "type": "text"
                }]
          },
          "field": "messages"
        }]
  }]
}
```

</details>

### Reaction Messages <a href="#reaction-messages" id="reaction-messages"></a>

See [Reaction Messages](/partner/messaging/sending-and-receiving-messages/text-messages/interactive-messages.md#reaction-messages).

The following is an example of a reaction message you received from a customer. You will not receive this webbook if the message the customer is reacting to is more than 30 days old.

<details>

<summary>Example Payload</summary>

<pre class="language-json"><code class="lang-json"><strong>{
</strong>"object": "whatsapp_business_account",
"entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
        "value": {
            "messaging_product": "whatsapp",
            "metadata": {
                "display_phone_number": PHONE_NUMBER,
                "phone_number_id": PHONE_NUMBER_ID
            },
            "contacts": [{
                "profile": {
                  "name": "NAME"
                },
                "wa_id": PHONE_NUMBER
              }],
            "messages": [{
                "from": PHONE_NUMBER,
                "id": "wamid.ID",
                "timestamp": TIMESTAMP,
                "reaction": {
                  "message_id": "MESSAGE_ID",
                  "emoji": "EMOJI"
                },
                "type": "reaction"
              }]
        },
        "field": "messages"
      }]
}]
}
</code></pre>

</details>

Note that for reactions, the `timestamp` value indicates when the customer sent the reaction, not when the webhook was generated.

### Media Messages <a href="#media-messages" id="media-messages"></a>

See[ Media Messages.](/partner/messaging/media-messages.md)

When a message with media is received, the WhatsApp Business Platform downloads the media. A notification is sent to the Webhook once the media is downloaded.

The Webhook notification contains information that identifies the media object and enables you to find and retrieve the object. [Use the media endpoints to retrieve the media](/partner/messaging/media-messages.md).

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [{
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                  "display_phone_number": PHONE_NUMBER,
                  "phone_number_id": PHONE_NUMBER_ID
              },
              "contacts": [{
                  "profile": {
                    "name": "NAME"
                  },
                  "wa_id": "WHATSAPP_ID"
                }],
              "messages": [{
                  "from": PHONE_NUMBER,
                  "id": "wamid.ID",
                  "timestamp": TIMESTAMP,
                  "type": "image",
                  "image": {
                    "caption": "CAPTION",
                    "mime_type": "image/jpeg",
                    "sha256": "IMAGE_HASH",
                    "id": "ID"
                  }
                }]
          },
          "field": "messages"
        }]
    }]
}
```

When you receive a sticker, you will get the following notification:

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "PHONE_NUMBER",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "contacts": [
              {
                "profile": {
                  "name": "NAME"
                },
                "wa_id": "ID"
              }
            ],
            "messages": [
              {
                "from": "SENDER_PHONE_NUMBER",
                "id": "wamid.ID",
                "timestamp": "TIMESTAMP",
                "type": "sticker",
                "sticker": {
                  "mime_type": "image/webp",
                  "sha256": "HASH",
                  "id": "ID"
                }
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Unknown Messages <a href="#unknown-messages" id="unknown-messages"></a>

It's possible to receive an unknown message callback notification. For example, a customer could send you a message that's not supported, such as a disappearing message (in which case Meta notifies the that the message type is not supported).

<details>

<summary>Example Payload</summary>

The following is an example of a message you received from a customer that is not supported.

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [{
          "value": {
              "messaging_product": "whatsapp",
              "metadata": { 
                "display_phone_number": "PHONE_NUMBER", 
                "phone_number_id": "PHONE_NUMBER_ID" 
              },
              "contacts": [{
                  "profile": { 
                    "name": "NAME" 
                  }, 
                  "wa_id": "WHATSAPP_ID"
                }],
              "messages": [{
                  "from": "PHONE_NUMBER",
                  "id": "wamid.ID", 
                  "timestamp": "TIMESTAMP",
                  "errors": [ 
                    { 
                      "code": 131051, 
                      "details": "Message type is not currently supported",
                      "title": "Unsupported message type"
                    }],
                   "type": "unknown"
                   }]
            }
            "field": "messages"
        }],
    }]
}
```

</details>

### Location Messages <a href="#location-messages" id="location-messages"></a>

See[ Location Messages](/partner/messaging/sending-and-receiving-messages/text-messages/contacts-and-location-messages.md#sending-location-messages).

The following is an example of a location message you received from a customer:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [{
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                  "display_phone_number": "PHONE_NUMBER",
                  "phone_number_id": "PHONE_NUMBER_ID"
              },
              "contacts": [{
                  "profile": {
                    "name": "NAME"
                  },
                  "wa_id": "WHATSAPP_ID"
                }],
              "messages": [{
                  "from": "PHONE_NUMBER",
                  "id": "wamid.ID",
                  "timestamp": "TIMESTAMP",
                 "location": {
                    "latitude": LOCATION_LATITUDE,
                    "longitude": LOCATION_LONGITUDE,
                    "name": LOCATION_NAME,
                    "address": LOCATION_ADDRESS,
                 }
                }]
          },
          "field": "messages"
        }]
    }]
}
```

</details>

### Contacts Messages <a href="#contacts-messages" id="contacts-messages"></a>

See [Contacts Messages](/partner/messaging/sending-and-receiving-messages/text-messages/contacts-and-location-messages.md).

The following is an example of a contact message you received from a customer:

<details>

<summary>Example Payload</summary>

```json
{
  "object":"whatsapp_business_account",
  "entry":[{
    "id":"WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes":[{
      "value":{
        "messaging_product":"whatsapp",
        "metadata": {
          "display_phone_number":"PHONE_NUMBER",
          "phone_number_id":"PHONE_NUMBER_ID"
          },
        "contacts": [{
          "profile":{
            "name":"NAME"
            },
          "wa_id":"WHATSAPP_ID"
          }],
        "messages":[{
          "from":"PHONE_NUMBER",
          "id":"wamid.ID",
          "timestamp":"TIMESTAMP",
          "contacts":[{
            "addresses":[{
              "city":"CONTACT_CITY",
              "country":"CONTACT_COUNTRY",
              "country_code":"CONTACT_COUNTRY_CODE",
              "state":"CONTACT_STATE",
              "street":"CONTACT_STREET",
              "type":"HOME or WORK",
              "zip":"CONTACT_ZIP"
            }],
            "birthday":"CONTACT_BIRTHDAY",
            "emails":[{
              "email":"CONTACT_EMAIL",
              "type":"WORK or HOME"
              }],
            "name":{
              "formatted_name":"CONTACT_FORMATTED_NAME",
              "first_name":"CONTACT_FIRST_NAME",
              "last_name":"CONTACT_LAST_NAME",
              "middle_name":"CONTACT_MIDDLE_NAME",
              "suffix":"CONTACT_SUFFIX",
              "prefix":"CONTACT_PREFIX"
              },
            "org":{
              "company":"CONTACT_ORG_COMPANY",
              "department":"CONTACT_ORG_DEPARTMENT",
              "title":"CONTACT_ORG_TITLE"
              },
            "phones":[{
              "phone":"CONTACT_PHONE",
              "wa_id":"CONTACT_WA_ID",
              "type":"HOME or WORK>"
              }],
            "urls":[{
              "url":"CONTACT_URL",
              "type":"HOME or WORK"
              }]
            }]
          }]
        },
      "field":"messages"
    }]
  }]
}
```

</details>

### Received Callback from a Quick Reply Button <a href="#received-callback-from-a-quick-reply-button" id="received-callback-from-a-quick-reply-button"></a>

See [Interactive Messages.](/partner/messaging/sending-and-receiving-messages/text-messages/interactive-messages.md)

When your customer clicks on a quick reply button in an [interactive message template](/partner/messaging/sending-and-receiving-messages/text-messages/interactive-messages.md), a response is sent. Below is an example of the callback format.

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [{
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                  "display_phone_number": PHONE_NUMBER,
                  "phone_number_id": PHONE_NUMBER_ID
              },
              "contacts": [{
                  "profile": {
                    "name": "NAME"
                  },
                  "wa_id": "WHATSAPP_ID"
                }],
              "messages": [{
                  "context": {
                    "from": PHONE_NUMBER,
                    "id": "wamid.ID"
                  },
                  "from": "16315551234",
                  "id": "wamid.ID",
                  "timestamp": TIMESTAMP,
                  "type": "button",
                  "button": {
                    "text": "No",
                    "payload": "No-Button-Payload"
                  }
                }]
          },
          "field": "messages"
        }]
    }]
}
```

</details>

### Received Answer From List Message <a href="#list-messages" id="list-messages"></a>

See [Interactive Messages.](/partner/messaging/sending-and-receiving-messages/text-messages/interactive-messages.md)

The following webhook notification is received when a user clicks on an item from a list message you sent:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
              "contacts": [
                {
                  "profile": {
                    "name": "NAME"
                  },
                  "wa_id": "PHONE_NUMBER_ID"
                }
              ],
              "messages": [
                {
                  "from": PHONE_NUMBER_ID,
                  "id": "wamid.ID",
                  "timestamp": TIMESTAMP,
                  "interactive": {
                    "list_reply": {
                      "id": "list_reply_id",
                      "title": "list_reply_title",
                      "description": "list_reply_description"
                    },
                    "type": "list_reply"
                  },
                  "type": "interactive"
                }
              ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Received Answer to Reply Button <a href="#reply-button" id="reply-button"></a>

See [Interactive Messages.](/partner/messaging/sending-and-receiving-messages/text-messages/interactive-messages.md)

The following webhook notification is received when a user clicks on a reply button you sent:

<details>

<summary>Example Payload</summary>

<pre class="language-json"><code class="lang-json"><strong>{
</strong>  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "PHONE_NUMBER",
                   "phone_number_id": PHONE_NUMBER_ID,
              },
              "contacts": [
                {
                  "profile": {
                    "name": "NAME"
                  },
                  "wa_id": "PHONE_NUMBER_ID"
                }
              ],
              "messages": [
                {
                  "from": PHONE_NUMBER_ID,
                  "id": "wamid.ID",
                  "timestamp": TIMESTAMP,
                  "interactive": {
                    "button_reply": {
                      "id": "unique-button-identifier-here",
                      "title": "button-text",
                    },
                    "type": "button_reply"
                  },
                  "type": "interactive"
                }
              ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
</code></pre>

</details>

### Received Message Triggered by Click to WhatsApp Ads <a href="#received-message-triggered-by-click-to-whatsapp-a-ds" id="received-message-triggered-by-click-to-whatsapp-a-ds"></a>

You get the following webhook when a conversation is started after a user clicks an ad with a Click to WhatsApp’s call-to-action:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "PHONE_NUMBER",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "contacts": [
              {
                "profile": {
                  "name": "NAME"
                },
                "wa_id": "ID"
              }
            ],
            "messages": [
              {
                "referral": {
                  "source_url": "AD_OR_POST_FB_URL",
                  "source_id": "ADID",
                  "source_type": "ad or post",
                  "headline": "AD_TITLE",
                  "body": "AD_DESCRIPTION",
                  "media_type": "image or video",
                  "image_url": "RAW_IMAGE_URL",
                  "video_url": "RAW_VIDEO_URL",
                  "thumbnail_url": "RAW_THUMBNAIL_URL",
                  "ctwa_clid": "CTWA_CLID"
                },
                "from": "SENDER_PHONE_NUMBERID",
                "id": "wamid.ID",
                "timestamp": "TIMESTAMP",
                "type": "text",
                "text": {
                  "body": "BODY"
                }
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Flow completed <a href="#product-inquiry-messages" id="product-inquiry-messages"></a>

When the user completes the flow, a message is sent to WhatsApp chat. You will receive that message through a webhook which you normally use to process chat messages from the user.&#x20;

<details>

<summary>Example Payload</summary>

```json
{
  "messages": [{
    "context": {
      "from": "16315558151",
      "id": "gBGGEiRVVgBPAgm7FUgc73noXjo"
    },
    "from": "<USER_ACCOUNT_NUMBER>",
    "id": "<MESSAGE_ID>",
    "type": "interactive",
    "interactive": {
      "type": "nfm_reply",
      "nfm_reply": {
        "name": "flow",
        "response_json": {
            "flow_token": "<FLOW_TOKEN>", 
            "optional_param1": "<value1>",
            "optional_param2": "<value2>"
        }
      }
    },
    "timestamp": "<MESSAGE_SEND_TIMESTAMP>"
  }]
}
```

</details>

### Request\_message

See [Conversational Components](/partner/messaging/sending-and-receiving-messages/text-messages/conversational-components.md).

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "<BUSINESS_DISPLAY_PHONE_NUMBER>",
              "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>"
            },
            "contacts": [
              {
                "profile": {
                  "name": "<WHATSAPP_USER_NAME>"
                },
                "wa_id": "<WHATSAPP_USER_ID>"
              }
            ],
            "messages": [
              {
                "from": "<WHATSAPP_USER_PHONE_NUMBER>",
                "id": "<WHATSAPP_MESSAGE_ID>",
                "timestamp": "<TIMESTAMP>",
                "type": "request_welcome"  // Indicates first time message from WhatsApp user
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Product Inquiry Messages <a href="#product-inquiry-messages" id="product-inquiry-messages"></a>

A Product Inquiry Message is received when a customer asks for more information about a product. These can happen when:

* a customer replies to [Single or Multi-Product Messages](/partner/messaging/sending-and-receiving-messages/text-messages/interactive-messages/single-and-multi-product-messages.md), or
* a customer accesses a business's catalog via another entry point, navigates to a **Product Details** page, and clicks **Message Business about this Product**.

A webhooks notification for a Product Inquiry Message looks like this:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
              "contacts": [
                {
                  "profile": {
                    "name": "NAME"
                  },
                  "wa_id": "PHONE_NUMBER_ID"
                }
              ],
              "messages": [
                {
                  "from": "PHONE_NUMBER",
                  "id": "wamid.ID",
                  "text": {
                    "body": "MESSAGE_TEXT"
                  },
                  "context": {
                    "from": "PHONE_NUMBER",
                    "id": "wamid.ID",
                    "referred_product": {
                      "catalog_id": "CATALOG_ID",
                      "product_retailer_id": "PRODUCT_ID"
                    }
                  },
                  "timestamp": "TIMESTAMP",
                  "type": "text"
                }
              ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Order Messages <a href="#order-messages" id="order-messages"></a>

See[ Order Details Template Messages](/partner/messaging/commerce-and-payments/payments-india-only/order-details-template-message.md)

A webhooks notification for when a customer places an order looks like this:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "8856996819413533",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "16505553333",
                   "phone_number_id": "phone-number-id",
              },
              "contacts": [
                {
                  "profile": {
                    "name": "Kerry Fisher"
                  },
                  "wa_id": "16315551234"
                }
              ],
              "messages": [
                {
                  "from": "16315551234",
                  "id": "wamid.ABGGFlCGg0cvAgo6cHbBhfK5760V",
                  "order": {
                    "catalog_id": "the-catalog_id",
                    "product_items": [
                      {
                        "product_retailer_id":"the-product-SKU-identifier",
                        "quantity":"number-of-item",
                        "item_price":"unitary-price-of-item",
                        "currency":"price-currency"
                      },
                      ...
                    ],
                    "text":"text-message-sent-along-with-the-order"
                  },
                  "context": {
                    "from": "16315551234",
                    "id": "wamid.gBGGFlaCGg0xcvAdgmZ9plHrf2Mh-o"
                  },
                  "timestamp": "1603069091",
                  "type": "order"
                }
              ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### User Changed Number Notification <a href="#user-changed-number-notification" id="user-changed-number-notification"></a>

When a user changes their phone number on WhatsApp, you receive a system message notification:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [{
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                  "display_phone_number": PHONE_NUMBER,
                  "phone_number_id": PHONE_NUMBER_ID
              },
              "messages": [{
                  "from": PHONE_NUMBER,
                  "id": "wamid.ID",
                  "system": {
                    "body": "NAME changed from PHONE_NUMBER to PHONE_NUMBER",
                    "new_wa_id": NEW_PHONE_NUMBER,
                    "type": "user_changed_number"
                  },
                  "timestamp": TIMESTAMP,
                  "type": "system"
                }]
          },
          "field": "messages"
        }]
    }]
}
```

</details>

### Template held for Pacing&#x20;

<details>

<summary><strong>Example Payload</strong> </summary>

Messages will have one of the following statuses which will be returned in each of the `messages` objects

* `"message_status":`**`"accepted"`** : means the message was sent to the intended recipient.
* `"message_status":`**`"held_for_quality_assessment"`**: means the message send was delayed until quality can be validated and it will either be sent or dropped at this point.

```json
      {
      "messaging_product": "whatsapp",
      "contacts": [
        {
          "input": "16505555555",
          "wa_id": "16505555555"
        }
      ],
      "messages": [
        {
          "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA",
          "message_status": "Message has been held because quality assessment is pending",
          //"message_status": "accepted",
        }
      ]
    }
```

</details>

### SMB Message Echoes&#x20;

This webhook captures new messages sent by the business customer using the WhatsApp Business app after onboarding.

<details>

<summary>Example Payload</summary>

```
"object": "whatsapp_business_account",
  "entry": [
    {
      "id": "<WABA_ID>",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "<BUSINESS_PHONE_NUMBER>",
              "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>"
            },
            "message_echoes": [
              {
                "from": "<BUSINESS_PHONE_NUMBER>",
                "to": "<WHATSAPP_USER_PHONE_NUMBER>",
                "id": "<WHATSAPP_MESSAGE_ID>",
                "timestamp": "<WEBHOOK_TIMESTAMP>",
                "type": "<MESSAGE_TYPE>",
                "<MESSAGE_TYPE>": {
                  <MESSAGE_CONTENTS>
                }
              }
            ]
          },
          "field": "smb_message_echoes"
```

</details>

## Message Status Updates <a href="#message-status-updates" id="message-status-updates"></a>

The [Messaging webhook](/partner/onboarding/webhook-events-and-setup/webhook-events-partner-and-messaging-api.md#messaging-webhook-associated-with-messaging-api) receives an event when the message is sent, delivered, and read.&#x20;

The order of these events may not reflect the actual timing of the message status. View the timestamp to determine the timing, if necessary.

### Status: Message Sent <a href="#status--message-sent" id="status--message-sent"></a>

The following notification is received when a business sends a message as part of a [user-initiated conversation](broken://pages/fTKB5o8I8KjMhhkw0tsy) (if that conversation did not originate in a free entry point):

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
    "value": {
    "messaging_product": "whatsapp",
    "metadata": {
      "display_phone_number": "PHONE_NUMBER",
      "phone_number_id": "PHONE_NUMBER_ID"
      },
    "statuses": [{
      "id": "wamid.ID",
      "status": "sent",
      "timestamp": TIMESTAMP,
      "recipient_id": PHONE_NUMBER,
      "conversation": {
        "id": "CONVERSATION_ID",
        "expiration_timestamp": TIMESTAMP,
        "origin": {
          "type": "referral_conversion"
          }
      },
      "pricing": {
        "billable": false,
        "pricing_model": "CBP",
        "category": "referral_conversion"
        }
     }]
    },
    "field": "messages"
   }]
 }]
}
```

</details>

The following notification is received when a business sends a message in reply to a [user-initiated conversation ](broken://pages/fTKB5o8I8KjMhhkw0tsy)originating from [free entry points](broken://pages/fTKB5o8I8KjMhhkw0tsy#free-entry-points):

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
    "value": {
    "messaging_product": "whatsapp",
    "metadata": {
      "display_phone_number": "PHONE_NUMBER",
      "phone_number_id": "PHONE_NUMBER_ID"
      },
    "statuses": [{
      "id": "wamid.ID",
      "recipient_id": "PHONE_NUMBER",
      "status": "sent",
      "timestamp": "TIMESTAMP",
      "conversation": {
        "id": "CONVERSATION_ID",
        "expiration_timestamp": TIMESTAMP,
        "origin": {
          "type": "business_initated"
          }
        },
      "pricing": {
        "pricing_model": "CBP",
        "billable": true,
        "category": "business_initated"
        }
      }] 
    },
    "field": "messages"
    }]
 }]
}
```

</details>

The following notification is received when a business sends a message as part of [a business-initiated conversation](broken://pages/fTKB5o8I8KjMhhkw0tsy):

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "statuses": [
              {
                "id": "WHATSAPP_MESSAGE_ID",
                "status": "sent",
                "timestamp": "TIMESTAMP",
                "recipient_id": "CUSTOMER_PHONE_NUMBER",
                "conversation": {
                  "id": "CONVERSATION_ID",
                  "expiration_timestamp": "CONVERSATION_EXPIRATION_TIMESTAMP",
                  "origin": {
                    "type": "user_initiated"
                  }
                },
                "pricing": {
                  "billable": true,
                  "pricing_model": "CBP",
                  "category": "service"
                }
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Status: Message Delivered

The following notification is received when a business’ message is delivered and that message is part of a [user-initiated conversation](broken://pages/fTKB5o8I8KjMhhkw0tsy) (if that conversation did not originate in a [free entry point](broken://pages/fTKB5o8I8KjMhhkw0tsy#free-entry-points)):

<details>

<summary>Example Payload</summary>

```reason
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
    "value": {
    "messaging_product": "whatsapp",
    "metadata": {
      "display_phone_number": "PHONE_NUMBER",
      "phone_number_id": "PHONE_NUMBER_ID"
      },
    "statuses": [{
      "id": "wamid.ID",
      "recipient_id": "PHONE_NUMBER",
      "status": "delivered",
      "timestamp": "TIMESTAMP",
      "conversation": {
        "id": "CONVERSATION_ID",
        "expiration_timestamp": TIMESTAMP,
        "origin": {
          "type": "user_initiated"
         }
        },
      "pricing": {
        "pricing_model": "CBP",
        "billable": true,
        "category": "service"
        }
      }]
     },
    "field": "messages"
  }]
 }]

```

</details>

The following notification is received when a business’ message is delivered and that message is part of a [business-initiated conversation](broken://pages/fTKB5o8I8KjMhhkw0tsy):

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
    "value": {
    "messaging_product": "whatsapp",
    "metadata": {
      "display_phone_number": "PHONE_NUMBER",
      "phone_number_id": "PHONE_NUMBER_ID"
      },
    "statuses": [{
      "id": "wamid.ID",
      "recipient_id": "PHONE_NUMBER",
      "status": "delivered",
      "timestamp": "TIMESTAMP",
      "conversation": {
        "id": "CONVERSATION_ID",
        "expiration_timestamp": TIMESTAMP,
        "origin": {
          "type": "business_initiated"
        }
      },
      "pricing": {
        "pricing_model": "CBP",
        "billable": true,
        "category":"business-initiated"
      }
    }]
    },
    "field": "messages"
  }]
 }]
}
```

</details>

The following notification is received when a business’ message is delivered and that message is part of a [user-initiated conversation](https://developers.facebook.com/docs/whatsapp/pricing/conversationpricing#how-it-works) originating from a [free entry point](https://developers.facebook.com/docs/whatsapp/pricing/conversationpricing#free-entry-points):

<details>

<summary>Example Payload</summary>

<pre class="language-json"><code class="lang-json"><strong>{
</strong>  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
    "value": {
    "messaging_product": "whatsapp",
    "metadata": {
      "display_phone_number": "PHONE_NUMBER",
      "phone_number_id": "PHONE_NUMBER_ID"
      },
    "statuses": [{
      "id": "wamid.ID",
      "status": "sent",
      "timestamp": "TIMESTAMP",
      "recipient_id": "PHONE_NUMBER",
      "conversation": {
        "id": "CONVERSATION_ID",
        "expiration_timestamp": TIMESTAMP,
        "origin" {
          "type": "referral_conversion"
          }
        },
      "pricing": {
        "billable": false,
        "pricing_model": "CBP",
        "category": "referral_conversion"
      }
    }]
    },
    "field": "messages"
  }]
 }]
}
</code></pre>

</details>

### Status: Message Read <a href="#status--message-read" id="status--message-read"></a>

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "statuses": [
              {
                "id": "WHATSAPP_MESSAGE_ID",
                "status": "read",
                "timestamp": "TIMESTAMP",
                "recipient_id": "CUSTOMER_PHONE_NUMBER"
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Status: Message Deleted <a href="#status--message-deleted" id="status--message-deleted"></a>

Currently, the Cloud API does not support webhook status updates for deleted messages. If a user deletes a message, you will receive a webhook with an error code for an unsupported message type:

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
    "changes": [{
      "value": {
      "messaging_product": "whatsapp",
      "metadata": {
        "display_phone_number": PHONE_NUMBER,
        "phone_number_id": PHONE_NUMBER
      },
      "contacts": [{
        "profile": {
          "name": "NAME"
          },
        "wa_id": PHONE_NUMBER
        }],
    "messages": [{
      "from": PHONE_NUMBER,
      "id": "wamid.ID",
      "timestamp": TIMESTAMP,
      "errors": [{
        "code": 131051,
        "details": "Message type is not currently supported",
        "title": "Unsupported message type"
        }],
      "type": "unsupported"
      }]
    },
    "field": "messages"
    }]
  }]
}
```

</details>

Please note that there are other user behaviors that can trigger this same error message. See [Error Messages](broken://pages/-MNcrLvdW3fbJD7J3Wif).&#x20;

### Status: Message Failed <a href="#status--message-failed" id="status--message-failed"></a>

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "15550783881",
              "phone_number_id": "106540352242922"
            },
            "statuses": [
              {
                "id": "wamid.HBgLMTIxMTU1NTc5NDcVAgARGBIyRkQxREUxRDJFQUJGMkQ3NDIA",
                "status": "failed",
                "timestamp": "1689380458",
                "recipient_id": "15551234567",
                "errors": [
                  {
                    "code": 131014,
                    "title": "Request for url https://URL.jpg failed with error: 404 (Not Found)"
                  }
                ]
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>

### Status: Message Undeliverable (Experiments) <a href="#status--message-undeliverable" id="status--message-undeliverable"></a>

See [Experiments in Marketing Messages.](broken://pages/fTKB5o8I8KjMhhkw0tsy#experiments)&#x20;

<details>

<summary>Example Payload</summary>

```json
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "102290129340398 ",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "15550783881",
              "phone_number_id": "106540352242922"
            },
            "statuses": [
              {
                "id": "wamid.HBgLMTIxMTU1NTc5NDcVAgARGBIyRkQxREUxRDJFQUJGMkQ3NDIA",
                "status": "failed",
                "timestamp": "1689380458",
                "recipient_id": "15551234567",
                "errors": [
                  {
                    "code": 130472,
                    "title": "User's number is part of an experiment",
                    "message": "User's number is part of an experiment",
                    "error_data": {
                      "details": "Failed to send message because this user's phone number is part of an experiment"
                    },
                    "href": "https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/"
                  }
                ]
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}
```

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.360dialog.com/partner/onboarding/webhook-events-and-setup/webhook-events-partner-and-messaging-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
