The following is an example of a text message you received from a customer:
{ "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" }] }] }
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.
{ "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" }] }] }
Note that for reactions, the timestamp
value indicates when the customer sent the reaction, not when the webhook was generated.
When a message with media is received, the WhatsApp Business Platform downloads the media. A notification is sent to your 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.
{ "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:
{ "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" } ] } ] }
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 we'd notify the customer that the message type is not supported).
The following is an example of a message you received from a customer that is not supported.
{ "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" }], }] }
The following is an example of a location message you received from a customer:
{ "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" }] }] }
The following is an example of a contact message you received from a customer:
{ "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" }] }] }
When your customer clicks on a quick reply button in an interactive message template, a response is sent. Below is an example of the callback format.
{ "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" }] }] }
The following webhook notification is received when a user clicks on an item from a list message you sent:
{ "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" } ] } ] }
The following webhook notification is received when a user clicks on a reply button you sent:
{ "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" } ] } ] }
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:
{ "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" } ] } ] }
A Product Inquiry Message is received when a customer asks for more information about a product. These can happen when:
A webhooks notification for a Product Inquiry Message looks like this:
{ "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" } ] } ] }
A webhooks notification for when a customer places an order looks like this:
{ "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" } ] } ] }
When a user changes their phone number on WhatsApp, you receive a system message notification:
{ "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" }] }] }
Conversation-based pricing has changed. See Pricing to learn how our new conversation-based pricing model works.
In addition, visibility of metric_types
have changed effective July 1, 2023. Please see the Conversation Analytics table for more details.
The WhatsApp Business Platform sends notifications to inform you of the status of the messages between you and users. When a message is sent successfully, you receive a notification when the message is sent, delivered, and read. The order of these notifications in your app may not reflect the actual timing of the message status. View the timestamp to determine the timing, if necessary.
The following notification is received when a business sends a message as part of a user-initiated conversation (if that conversation did not originate in a free entry point):
{ "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" } ] } ] }
The following notification is received when a business sends a message as part of a business-initiated conversation:
{ "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" }] }] }
The following notification is received when a business sends a message in reply to a user-initiated conversation originating from free entry points:
{ "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" }] }] }
The following notification is received when a business’ message is delivered and that message is part of a user-initiated conversation (if that conversation did not originate in a free entry point):
{ "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" }] }] }
The following notification is received when a business’ message is delivered and that message is part of a business-initiated conversation:
{ "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" }] }] }
The following notification is received when a business’ message is delivered and that message is part of a user-initiated conversation originating from a free entry point:
{ "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" }] }] }
{ "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" } ] } ] }
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:
{ "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" }] }] }
Note that there are other user behaviors that can trigger this same error message.
Note difference in payload structure from message undeliverable payload.
{ "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": "failed", "timestamp": TIMESTAMP, "recipient_id": PHONE_NUMBER, "errors": [{ "code": 131014, "title": "Request for url https://URL.jpg failed with error: 404 (Not Found)" }] }] }, "field": "messages" }] }] }
Example webhook for v12.0 and later.
{ "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" } ] } ] }