Msg91 Help Doc
Webhook (New)

Webhook (New)

What is a Webhook?

A webhook is a way for one application to automatically send real-time data to another when a specific event occurs. It works by making an HTTP POST request to a predefined URL (called a webhook endpoint). This allows systems to stay updated without manual checks. Webhooks are commonly used for sending message delivery updates.

At MSG91, you can add your webhook URL and receive real-time delivery reports for your SMS, WhatsApp, and RCS messages, as well as emails and voice calls.

Why Choose Webhook (New) Over Webhook (Old)?

The Webhook (New) option offers greater flexibility, control, and efficiency compared to the older version. Key advantages include:

  1. Customizable Parameters: Choose only the specific parameters you want to receive, reducing payload size and eliminating unnecessary data.

  2. Event Type Filtering: Select the exact event types you want to monitor, no more clutter from irrelevant events.

  3. Unified Management: Manage webhooks for all services (SMS, WhatsApp, RCS, Email, Voice) from a single interface, streamlining configuration and maintenance.

How to set up your Webhook on MSG91

  1. Go to the MSG91 Dashboard.

  2. Open the microservice (SMS/Email/WhatsApp/Voice/RCS).

  3. Go to Webhook (New) from the Left Sidebar.

Refer to the articles below to set up the Webhook for your desired service.

For SMS: https://msg91.com/help/webhook-new/how-to-receive-sms-delivery-reports-via-webhook-new

For WhatsApp: https://msg91.com/help/webhook-new/how-to-receive-whatsapp-delivery-reports-via-webhook-new

Please follow the steps below to configure the Webhook to receive real-time delivery reports (logs) on your Webhook (callback URL).

1. Go to MSG91 Dashboard » WhatsApp » Click on Webhook (New) » Click on Create Webhook.

image

2. Configure Your Webhook.

image

Step 1: Give your webhook a name for easy identification.

Step 2: Select WhatsApp Service & Event Type

On Request Received: Triggers when a message request is sent from your account. Includes "Sent" status logs, but does not share any data on delivery/failure status.

On Report Received: Sends real-time delivery reports, including delivery status (Sent, Failed, Delivered, and Read) and other details.

Note: Both event types send data for inbound and outbound messages.

Step 3: Enter Your Webhook (Callback) URL

  • When you send bulk WhatsApp messages, the webhook will still send one log (payload) per recipient number. This means for each mobile number, you will receive a separate webhook event, even if all messages are sent in a single batch.

  • The value of a few parameters ( such as messages, content, button etc)  is a stringified JSON array so make sure your Webhook is capable of receiving such data.

Step 4: The content type will be JSON. Make sure your endpoint can parse JSON data.

Step 5. Customize Parameters

Include only the fields that you want to receive on your Webhook. Below is the sample payload, which has all the parameters; you can remove the parameters that are not of your use.

{

  "CRQID": "{{CRQID}}",

  "companyId": "{{companyId}}",

  "requestedAt": "{{requestedAt}}",

  "mobile": "{{mobile}}",

  "content": "{{content}}",

  "requestId": "{{requestId}}",

  "failureReason": "{{failureReason}}",

  "status": "{{status}}",

  "uuid": "{{uuid}}",

  "integratedNumber": "{{integratedNumber}}",

  "messageType": "{{messageType}}",

  "direction": "{{direction}}",

  "templateName": "{{templateName}}",

  "campaignName": "{{campaignName}}",

  "campaignRequestId": "{{campaignRequestId}}",

  "nodeId": "{{nodeId}}",

  "templateLanguage": "{{templateLanguage}}",

  "replyMsgId": "{{replyMsgId}}",

  "accountManagerEmailId": "{{accountManagerEmailId}}",

  "oneApiRequestId": "{{oneApiRequestId}}",

  "emailId": "{{emailId}}",

  "conversationExpTimestamp": "{{conversationExpTimestamp}}",

  "moengageMsgId": "{{moengageMsgId}}",

  "webengageMsgId": "{{webengageMsgId}}",

  "clevertapMsgId": "{{clevertapMsgId}}",

  "telecomCircle": "{{telecomCircle}}",

  "circleDescription": "{{circleDescription}}",

  "customerName": "{{customerName}}",

  "contentType": "{{contentType}}",

  "text": "{{text}}",

  "latitude": "{{latitude}}",

  "longitude": "{{longitude}}",

  "caption": "{{caption}}",

  "filename": "{{filename}}",

  "url": "{{url}}",

  "button": "{{button}}",

  "contacts": "{{contacts}}",

  "reaction": "{{reaction}}",

  "interactive": "{{interactive}}",

  "orderBy": "{{order}}",

  "messages": "{{messages}}",

  "price": "{{price}}",

  "origin": "{{origin}}",

  "statusUpdatedAt": "{{statusUpdatedAt}}"

}

Description of the parameters:

  • requestId
    Unique ID generated for each message request.
    Example: "requestId": "87b3c7e4d9914fffa8ccb85ca13e6c8e"

  • mobile
    User’s mobile number.
    Example: "mobile": "91774884090"

  • status
    Message status – Sent / Delivered / Failed / Read.
    Example: "status": "delivered"

  • content
    Content of the message.

    • Inbound: You will receive the complete message text.
      Example: "content": "{\"text\":\"Hi, I have a query\"}"

    • Outbound: You will receive the data you passed in the variables.
      Example: "content": "{\"header_1\":{\"type\":\"document\",\"document\":{\"link\":\"

      https://files.msg91.com/377775/nronwttaaa\",\"filename\":\"Test1\"}},\"body_1\":{\"type\":\"text\",\"text\":\"Test2\"},\"body_2\":{\"type\":\"text\",\"text\":\"Test3\"},\"body_3\":{\"type\":\"text\",\"text\":\"Test4\"}

      }"

  • messages
    Provides inbound message details such as the sender number, WhatsApp message ID, content type, and actual text received. It will be blank for outbound messages.
    Example: "messages": "[{\"context\":{\"from\":\"917316914325\",\"id\":\"wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAERgSQ0Q1MDZGMDQ4OEZBNjRGRTE5AA==\"},\"from\":\"917748847990\",\"id\":\"wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAEhggN0M0MzBBRTg3NjAyQ0E4RDhDQTU5MDA1QkJFQzI2NEMA\",\"timestamp\":\"1751878238\",\"type\":\"button\",\"button\":{\"payload\":\"Stop\",\"text\":\"Stop\"}}]"

  • failureReason
    If a message fails, this field shows the reason including error code and description.
    Example: "failureReason": "131049: This message was not delivered to maintain healthy ecosystem engagement."

  • button
    Response text for quick reply buttons.
    Example: "button": "{\"payload\":\"Stop\",\"text\":\"Stop\"}"

  • integratedNumber
    Your integrated WhatsApp business number.
    Example: "integratedNumber": "917316914325"

  • direction
    Message direction – 1 for Outbound, 0 for Inbound.
    Example: "direction": "0"

  • templateName
    Name of the WhatsApp message template used.
    Example: "templateName": "order_status"

  • CRQID
    A custom parameter you can pass in the API payload. You will receive the same value in the webhook.
    Example: "CRQID": "Inactive_users"

  • companyId
    Unique ID of your company for identifying your MSG91 account.
    Example: "companyId": "384905"

  • requestedAt
    Timestamp of when the message request was initiated from your end.
    Example: "requestedAt": "2025-07-08 08:20:26.259000"

  • statusUpdatedAt
    Timestamp of the latest message status update.

    • If the status is Delivered, this is the delivery time.

      Example: "statusUpdatedAt": "2025-07-08 07:41:13"

    • If the status is Sent, this reflects the sent time.
      Example: "statusUpdatedAt": "2025-07-08 07:41:13"

  • messageType
    Type of message received – text, interactive, or template.
    Example: "messageType": "text"

  • Uuid
    Unique ID for every message generated by Meta.
    Example: "Uuid": "wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAERgSMEE4MjFCNkI5QkU4RTY5NEM5AA=="

  • campaignName
    Name of your campaign if sent via MSG91’s Campaign service.
    Example: "campaignName": "jul8test1"

  • campaignRequestId
    Unique request ID of your campaign.
    Example: "campaignRequestId": "1751960463_0b863cfb12a2293657f1f46ebf1cc546"

  • templateLanguage
    Language of your WhatsApp template.
    Example: "templateLanguage": "en_US"

  • accountManagerEmailId
    Email ID of your MSG91 account manager.
    Example: "accountManagerEmailId": "

    [email protected]

    "

  • telecomCircle
    The telecom circle of the customer’s mobile number.
    Example: "telecomCircle": "Madhya Pradesh & Chhattisgarh"

  • circleDescription
    Description of the telecom circle.
    Example: "circleDescription": "State of Madhya Pradesh and State of Chhattisgarh"

  • customerName
    Name of the customer who has sent the message.
    Example: "customerName": "Manas"

  • price
    Charge deducted for sending the template.
    Example: "price": "0.115"

  • origin
    Category of your WhatsApp template.
    Example: "origin": "utility"

  • replyMsgId
    Unique WhatsApp message ID of the template the user replied to or interacted with.
    Example: "replyMsgId": "wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAERgSRUJGN0JCOTBBMUY5RUJGMEY3AA=="

  • contentType
    Type of content received in inbound messages – text, image, interactive, etc.

  • contacts
    Contact details of the user stored in your Segmento phonebook.
    Example: "contacts": "[{\"profile\":{\"name\":\"Manas\"},\"wa_id\":\"91774884730\"}]"

  • text
    Exact text of the message received on your number.
    Example: "text": "Contact store"

  • latitude
    Latitude of the location shared in an inbound message.
    Example: "latitude": "22.7252947"

  • longitude
    Longitude of the location shared in an inbound message.
    Example: "longitude": "75.8905714"

  • filename
    The file name of the attachment.
    Example: "filename": Invoice June 2025"

  • nodeId
    Node ID of your MSG91 campaign.
    Example: "nodeId": "88353"

  • reaction
    The user’s reaction to your message or template.

    The Emoji will be sent in Unicode, so please ensure your webhook is capable of receiving

    such data.
    Example: "reaction": "👍🏻"

  • emailId
    Registered email ID of your MSG91 account
    Example: ”emailId": "

    [email protected]

    "

  • oneApiRequestId
    Request ID if you sent it via One API.

  • webengageMsgId
    Unique ID of the message if the message was sent via WebEngage

  • clevertapMsgId
    Unique ID of the message if the message was sent via Clevertap.

  • moengageMsgId:
    Unique ID of the message if the message was sent via MoEngage.

Sample Webhook payload of an Outbound message:

{

  "CRQID": "",

  "companyId": "384905",

  "requestedAt": "2025-07-08 07:41:12.697000",

  "mobile": "9179993700",

  "content": "{\"body_1\":{\"type\":\"text\",\"text\":\"Aniket\"}}",

  "requestId": "e0168ppab9e4c80b7bbb7705ad915c5",

  "failureReason": "",

  "status": "Delivered",

  "uuid": "wamid.HBgMOTE3OTk5MzcwODU4FQIAERgSNkI2RjBCQTk1QTc5Mjc0N0U5AA==",

  "integratedNumber": "917316914325",

  "messageType": "template",

  "direction": "1",

  "templateName": "order_status",

  "campaignName": "jul8test1",

  "campaignRequestId": "1751960463_0b863cfb12a2293657f1f46ebf1cc546",

  "nodeId": "88353",

  "templateLanguage": "en_US",

  "replyMsgId": "",

  "accountManagerEmailId": "

[email protected]

",

  "oneApiRequestId": "",

  "emailId": "

[email protected]

",

  "conversationExpTimestamp": "",

  "moengageMsgId": "",

  "webengageMsgId": "",

  "clevertapMsgId": "",

  "telecomCircle": "Madhya Pradesh & Chhattisgarh",

  "circleDescription": "State of Madhya Pradesh and State of Chhattisgarh",

  "customerName": "",

  "contentType": "",

  "text": "",

  "latitude": "",

  "longitude": "",

  "caption": "",

  "filename": "",

  "url": "",

  "button": "",

  "contacts": "",

  "reaction": "",

  "interactive": "",

  "order": "",

  "messages": "",

  "price": "0.115",

  "origin": "utility",

  "statusUpdatedAt": "2025-07-08 07:41:13"

}

Sample Webhook payload for an Inbound message:

{

  "CRQID": "",

  "companyId": "384905",

  "requestedAt": "2025-07-08 08:06:38.064000",

  "mobile": "91774841190",

  "content": "{\"button_reply\":\"Contact store\"}",

  "requestId": "87b3c7e4d9914fffa8ccb85ca13e6c8e",

  "failureReason": "",

  "status": "delivered",

  "uuid": "wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAEhggNENGQzYxMDk5NTg2MUQ5NjQ1REMzQzNBODRBMDM1RkMA_hello",

  "integratedNumber": "917316914325",

  "messageType": "interactive",

  "direction": "0",

  "templateName": "",

  "campaignName": "",

  "campaignRequestId": "",

  "nodeId": "",

  "templateLanguage": "",

  "replyMsgId": "wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAERgSNDQ1N0RCRjJGRTA3NThEMzE3AA==",

  "accountManagerEmailId": "",

  "oneApiRequestId": "",

  "emailId": "",

  "conversationExpTimestamp": "",

  "moengageMsgId": "",

  "webengageMsgId": "",

  "clevertapMsgId": "",

  "telecomCircle": "Madhya Pradesh & Chhattisgarh",

  "circleDescription": "State of Madhya Pradesh and State of Chhattisgarh",

  "customerName": "Manas ",

  "contentType": "interactive",

  "text": "Contact store",

  "latitude": "",

  "longitude": "",

  "caption": "",

  "filename": "",

  "url": "",

  "button": "",

  "contacts": "[{\"profile\":{\"name\":\"Manas \"},\"wa_id\":\"917748847990\"}]",

  "reaction": "",

  "interactive": "",

  "order": "",

  "messages": "[{\"context\":{\"from\":\"917316914325\",\"id\":\"wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAERgSNDQ1N0RCRjJGRTA3NThEMzE3AA==\"},\"from\":\"917748847990\",\"id\":\"wamid.HBgMOTE3NzQ4ODQ3OTkwFQIAEhggNENGQzYxMDk5NTg2MUQ5NjQ1REMzQzNBODRBMDM1RkMA\",\"timestamp\":\"1751961996\",\"type\":\"interactive\",\"interactive\":{\"type\":\"button_reply\",\"button_reply\":{\"id\":\"0670fbb8-46c7-4bca-9c2f-687243ee751c\",\"title\":\"Contact store\"}}}]",

  "price": "",

  "origin": "",

  "statusUpdatedAt": ""

}

You can also add the Headers in the key-value pairs, and then we will send all the reports including these Headers:

Headers In Webhook.png

Step 6: Click Create to save your webhook configuration.

Still have questions?

Feel free to reach us at +91 8818888733 via call or WhatsApp or drop an email to

[email protected]

.

How to Receive WhatsApp Delivery Reports via Webhook (New)
Webhook configurationreal-time delivery reportsMSG91 WhatsAppcallback URLWebhooks payload
Jul 28, 2025

To receive delivery reports for your SMS, you can use the Webhook (New) feature on the MSG91 platform. Follow the steps below to set it up.

1. Log in to your MSG91 Dashboard » SMS » Webhook (New) » Click on Create Webhook.

Mystic2-MSG91-07-09-2025_01_11_PM.png

2. Configure Your Webhook.

WebhookSMS1 (1).png

Step 1: Provide a name to your webhook.

Step 2: Select SMS and the event type you wish to receive:

On Request Received: Triggers when an SMS request is sent from your account.

Provides logs, but does not include delivery status.

On Report Received: Provides real-time delivery reports, including success/failure status and additional details.

Note: To receive both event types, you must create two separate webhooks.

Step 3: Enter your Webhook URL (Callback URL) where data should be sent.

  • When you send bulk messages, the webhook will still send one log (payload) per recipient number. This means for each mobile number, you will receive a separate webhook event, even if all messages are sent in a single batch.

  • The value of a few parameters is a stringified JSON array, so make sure your Webhook is capable of receiving such data.

Content-Type: Only JSON is supported. Ensure your endpoint can parse JSON data in any format.

Step 4. Customize Data Parameters

Use { to add fields/ parameters you want to receive.

You can include or exclude fields as needed. Ensure parameters follow valid JSON formatting.

Below is the sample payload, which has all the fields:

{

  "requestedAt": "{{requestedAt}}",

  "status": "{{status}}",

  "deliveryTime": "{{deliveryTime}}",

  "requestId": "{{requestId}}",

  "telNum": "{{telNum}}",

  "credit": "{{credit}}",

  "senderId": "{{senderId}}",

  "campaignName": "{{campaignName}}",

  "scheduleDateTime": "{{scheduleDateTime}}",

  "msgData": "{{msgData}}",

  "route": "{{route}}",

  "DLT_TE_ID": "{{DLT_TE_ID}}",

  "campaign_pid": "{{campaign_pid}}",

  "nodeId": "{{nodeId}}",

  "userIp": "{{userIp}}",

  "clientId": "{{clientId}}",

  "UUID": "{{UUID}}",

  "INMSID": "{{INMSID}}",

  "CRQID": "{{CRQID}}",

  "countryName": "{{countryName}}",

  "failureReason": "{{failureReason}}",

  "smsLength": "{{smsLength}}",

  "telecomCircle": "{{telecomCircle}}",

  "circleDescription": "{{circleDescription}}",

  "user_pid": "{{user_pid}}"

}

Description of the parameters:

  • requestId
    Unique ID generated for each message request.
    Example: "requestId": "686e0471d6fc0577de5d4462"

  • telNum
    The user’s mobile number.
    Example: "telNum": "91774884090"

  • deliveryTime
    Timestamp indicating when the SMS was delivered.
    Example: "deliveryTime": "2025-07-09 11:29:46"

  • requestedAt
    Timestamp of when the message request was initiated from your end.
    Example: "requestedAt": "2025-07-08 08:20:26.259000"

  • status
    Message status – Sent / Delivered / Failed / Read.

0 = Sent

1 = Delivered

2 = Failed
Example: "status": "1"

  • credit
    Total charges deducted for the SMS sent.
    Example: "credit": "0.20"

  • senderId
    Sender ID used to send the SMS.
    Example: "senderId": "txtapi

  • campaignName
    Name of your campaign. It will show the Sender ID if there is no campaign name.
    Example: "campaignName": "TXTAPI"

  • scheduleDateTime
    The date and time of the message when it was scheduled. You will receive this field only when the message has been scheduled.
    Example: "scheduleDateTime": "2025-07-09 11:57:34"

  • route
    The route of the message through which the message was sent. 4 is for Transactional and 1 for Promotional
    Example: "route": "4"

  • DLT_TE_ID
    DLT Template ID of your message.
    Example: "DLT_TE_ID": "1748558999665865"

  • CRQID
    A custom parameter you can pass in the API payload. You will receive the same value in the webhook.
    Example: "CRQID": "Inactive_users"

  • failureReason
    The reason for the failure of your SMS.
    Example: "failureReason": "Template Id not found on DLT"

  • smsLength
    Number of credits deducted based on the character count of your SMS
    Example: "smsLength": "2"

  • telecomCircle
    The telecom circle of the customer’s mobile number.
    Example: "telecomCircle": "Madhya Pradesh & Chhattisgarh"

  • circleDescription
    Description of the telecom circle.
    Example: "circleDescription": "State of Madhya Pradesh and State of Chhattisgarh"

  • countryName
    Name of the country to which the SMS was sent.
    Example: "countryName": "India"

  • user_pid
    Unique company ID of your MSG91 account.
    Example: "user_pid": "390635"

  • campaign_pid
    Unique ID generated at our end for every campaign name.
    Example: "campaign_pid": "63ede36abb011b34dd35800c"

  • msgData
    It is only for the event type “Request Received” (Request Sent), it will show all the details related to the message.
    Example: "msgData": "{\n  \"requestedAt\": \"\",\n  \"status\": \"1\",\n  \"deliveryTime\": \"2025-07-09 11:27:17\",\n  \"requestId\": \"686e04777d6fc0577de5d4462\",\n  \"telNum\": \"91774817990\",\n  \"credit\": \"0.01\",\n  \"senderId\": \"txtapi\",\n  \"campaignName\": \"\",\n  \"scheduleDateTime\": \"\",\n  \"msgData\": \"\",\n  \"route\": \"931\",\n  \"DLT_TE_ID\": \"\",\n  \"campaign_pid\": \"\",\n  \"nodeId\": \"\",\n  \"userIp\": \"\",\n  \"clientId\": \"\",\n  \"UUID\": \"0\",\n  \"INMSID\": \"0\",\n  \"CRQID\": \"0\",\n  \"countryName\": \"India\",\n  \"failureReason\": \"\",\n  \"smsLength\": \"1\",\n  \"telecomCircle\": \"Madhya Pradesh & Chhattisgarh\",\n  \"circleDescription\": \"State of Madhya Pradesh and State of Chhattisgarh\",\n  \"user_pid\": \"390635\"\n}"

  • UUID
    It’s a custom parameter; whatever data you pass in the API under this field, we will deliver the same key-value pair on the webhook.
    Example: "UUID": "Campaign_July"

  • clientId
    It’s also a custom parameter; whatever data you pass in the API under this field, the same data will be pushed to the Webhook.
    Example: "clientId": "4343878"

  • INMSID
    This parameter is for back-end tracking on our end; kindly ignore this parameter.
    Example: "INMSID": ""

  • nodeId
    Node ID of the campaign if you used the Campaign service to launch the campaign.
    Example: "nodeId": "88449"

  • userIp
    IP address from which the request was sent.
    Example: "userIp": "2600:1700:0:3002::900"

Sample payload of the data received on Webhook:

{

  "requestedAt": "",

  "status": "1",

  "deliveryTime": "2025-07-09 11:21:54",

  "requestId": "686e0376d6fc0523f4226eb2",

  "telNum": "917748847990",

  "credit": "0.25",

  "senderId": "txtapi",

  "campaignName": "",

  "scheduleDateTime": "",

  "msgData": "",

  "route": "4",

  "DLT_TE_ID": "17558945588965886",

  "campaign_pid": "",

  "nodeId": "",

  "userIp": "",

  "clientId": "",

  "UUID": "0",

  "INMSID": "0",

  "CRQID": "0",

  "countryName": "India",

  "failureReason": "",

  "smsLength": "1",

  "telecomCircle": "Madhya Pradesh & Chhattisgarh",

  "circleDescription": "State of Madhya Pradesh and State of Chhattisgarh",

  "user_pid": "390635"

}

Headers:

You can also add the Headers in the key-value pairs, and then we will send all the reports including these Headers. You can also filter the data on your webhook based on a Header.

Headers.png

3. Click Create to save your Webhook configuration.

Still have questions?

Call or WhatsApp: +91 8818888733
Email:

[email protected]

How to Receive SMS Delivery Reports via Webhook (New)
SMS delivery reportsSMS webhook configurationMSG91Callback URLMSG91 SMS Webhook Set up
Jul 19, 2025

You can use the Webhook feature on the MSG91 platform to receive delivery reports for your Outbound and Inbound Voice calls. Follow the steps below to set it up.

1. Log in to your MSG91 Dashboard » Voice » Webhook » Click on Create Webhook.

VoiceDashboard.png

2. Configure Your Webhook

VoiceSteps (1).png

Step 1. Provide a name to your webhook.

Step 2. Select Voice and the event type “Report Received.”

This event type will provide real-time delivery reports of your outbound and inbound calls, including success/failure status and additional details.

Step 3. Select the Method as Post and enter your Webhook URL (Callback URL) where you want to receive reports.

Step 4. Customize Data Parameters:

Use { to add fields/ parameters you want to receive.

You can include or exclude fields as needed. Ensure parameters follow valid JSON formatting.

Example JSON payload that has all the available parameters:

{

  "uuid": "{{uuid}}",

  "CRQID": "{{CRQID}}",

  "requestedAt": "{{requestedAt}}",

  "status": "{{status}}",

  "duration": "{{duration}}",

  "charged": "{{charged}}",

  "startTime": "{{startTime}}",

  "endTime": "{{endTime}}",

  "destination": "{{destination}}",

  "type": "{{type}}",

  "ivrInputs": "{{ivrInputs}}",

  "callerId": "{{callerId}}",

  "agentId": "{{agentId}}",

  "destinationB": "{{destinationB}}",

  "failureReason": "{{failureReason}}",

  "direction": "{{direction}}",

  "agentName": "{{agentName}}",

  "source": "{{source}}"

}

Description of the parameters:

  • uuid
    Unique reference ID that gets generated at our end for every call request.
    Example: "uuid": "8ee1c0bcd7664939a3c92359b3328272"

  • CRQID
    A custom parameter you can pass in the API body. You will receive the same value in the webhook.
    Example: "CRQID": "MSG91_Voice"

  • requestedAt
    Timestamp when an outbound or inbound call was initiated.
    Example: "requestedAt": "2025-07-14 09:23:27"

  • status
    Status of your call - Queued/ Completed/ Ringing/ Failed/ Busy
    Example: "status": "delivered"

  • duration
    Duration of the call in seconds.
    Example: "duration": "19"

  • charged
    Charge deducted for your voice call.
    Example: "charged": "0.500000"

  • startTime
    Timestamp when the call (ring) was started.
    Example: "startTime": "2025-07-14 08:49:06”

  • endTime
    Timestamp when the call was ended.
    Example: "endTime": "2025-07-14 08:49:29"

  • destination
    The number to which the call was initiated. If you have used the click-to-call API, then it will show the number passed under destination A.
    Example: "destination": "91774884XXXX”

  • type
    The mode you used to call - Hello/API.
    Example: "type": "api”

  • ivrInputs
    Sequence of the IVR Inputs (numbers) pressed by the user.
    Example: "ivrInputs": " 1 9 4 99266036XX"

  • callerId
    MSG91 Caller ID (Number) you used to make a call.
    Example: "callerId": "917316914325"

  • agentId
    ID of the agent (member in Hello) who either initiated the call or received it.
    Example: "agentId": "395729"

  • destinationB
    If you used the click-to-call API, then it will show the number passed under the destination B.
      Example: "destinationB": "918818888733"

  • failureReason
    The reason due to which the call failed.
    Example: "failureReason": "User Unreachable"

  • direction
    Direction of the call - Outbound/Inbound
    Example: "direction": "outbound"

  • agentName
    Name of the agent (member’s name in Hello) who either initiated the call or received it.
    Example: "agentName": "Manas Patel"

  • source
    For outbound calls:

"0" indicates the call was initiated from the Panel (Dashboard)

"1" indicates the call was initiated via API
Example: "source": "1"

          For inbound calls:

Displays the user’s mobile number who initiated the call
Example: "source": "917748847XXX"

Sample payload of the data received on Webhook:

{

  "uuid": "8ee1c0bcd7664939a3c92359b3328272",

  "CRQID": "MSG91_voice",

  "requestedAt": "2025-07-14 08:49:06",

  "status": "completed",

  "duration": "11",

  "charged": "0.500000",

  "startTime": "2025-07-14 08:49:06",

  "endTime": "2025-07-14 08:49:29",

  "destination": "917748847XXX",

  "type": "api",

  "ivrInputs": "",

  "callerId": "917316914325",

  "agentId": "410079",

  "destinationB": "",

  "failureReason": "",

  "direction": "outbound",

  "agentName": "Manas Patel",

  "source": "1"

}

You can also add the Headers in the key-value pairs, and we will send all the reports including these Headers:

Voice Headers.png

Step 5. Click Create to save the Webhook.

Still have questions?
Feel free to reach us at +91 8818888733 via call or WhatsApp, or drop an email to

[email protected]

.

How to Receive Voice Call Reports via Webhook
MSG91 Webhookdelivery reportshow to set up webhook for MSG91 voice serviceWebhook new for MSG91 VoiceHow to get Voice reports on Webhook MSG91
Jul 15, 2025

You can use the Webhook (New) feature on the MSG91 platform to receive delivery reports for your RCS messages. Follow the steps below to set it up.

1. Log in to your MSG91 Dashboard » Email » Webhook » Click on Create Webhook.

RCS_1.png

2. Configure Your Webhook

Webhook steps (1).png

Step 1. Provide a name to your webhook.

Step 2. Select RCS and the event type you wish to receive:

On Report Received

  • Triggers to send the delivery reports of both inbound and outbound messages.

On Inbound Report Received:

  • Triggers to send the delivery reports of the inbound messages.

On Outbound Report Received:

  • Triggers to send the delivery reports of outbound messages.

Step 3: Enter your Webhook URL (Callback URL) where data should be sent.

Use { to add fields/ parameters you want to receive.

You can include or exclude fields as needed. Ensure parameters follow valid JSON formatting.

Example JSON payload that has all the parameters:

{

  "requestId": "{{requestId}}",

  "uuid": "{{uuid}}",

  "crqid": "{{crqid}}",

  "webengageMsgId": "{{webengageMsgId}}",

  "campaignRequestId": "{{campaignRequestId}}",

  "campaignName": "{{campaignName}}",

  "requestedAt": "{{requestedAt}}",

  "customerNumber": "{{customerNumber}}",

  "projectName": "{{projectName}}",

  "eventName": "{{eventName}}",

  "templateName": "{{templateName}}",

  "companyId": "{{companyId}}",

  "contentType": "{{contentType}}",

  "templateMessageType": "{{templateMessageType}}",

  "content": "{{content}}",

  "direction": "{{direction}}",

  "countryName": "{{countryName}}",

  "telecomCircle": "{{telecomCircle}}",

  "statusUpdatedAt": "{{statusUpdatedAt}}",

  "desc": "{{desc}}"

}

Description of the parameters:

  • crqid
    A custom parameter you can pass in the API payload. You will receive the same value in the webhook.
    Example: "crqid": "MSG91_RCS""

  • requestedAt
    Timestamp of when the message request was initiated from your end..
    Example: "requestedAt": "2025-07-11 09:44:49.265000"

  • companyId
    Unique account ID of your MSG91 account.
    Example: "companyId": "396301"

  • eventName
    Status of your message - Submitted / Sent / Delivered/ Read/ Failed
    Example: "eventName": "delivered"

  • projectName
    Unique project Name of your RCS account (RCS Bot).
    Example: "projectName": "MSG91_RCS_Transactional”

  • customerNumber
    The user’s mobile number to which you sent the message.
    Example: "customerNumber": "917748847XXX”

  • direction
    Direction of the message - Outbound / Inbound.
    Example: "direction": "outbound"

  • templateName
    Name of your RCS template.
    Example: "templateName": "JulyfirstSale”

  • desc
    The reason due to which the message failed.
    Example: "desc": "Unreachable number"

  • content
    The content of the inbound message. It will be blank in case of an outbound message.
    Example: "content": "{\"text\":\"Hi\"}"

  • requestId
    Unique ID generated on our end for every request.
    Example: "requestId": "afb620165e3b11f092970aebd39cf801"

  • uuid
    Unique reference ID of an inbound message.
    Example: "uuid": "afd799b25e3b11f0843402e26b2b6f99"

  • statusUpdatedAt
    Timestamp when the latest status of the message was updated.
    Example: "timestamp": "2025-07-11 09:44:52.815069+00:00"

  • templateMessageType
    Type of your RCS template.
    Example: "templateMessageType": "rich_card"

  • campaignRequestId
    Unique request ID of your campaign (If sent via Campaign Service).
    Example: "campaignRequestId": "rg4554ygthf84f9egjgu4"

  • telecomCircle
    The telecom circle of the customer’s mobile number
    Example: "telecomCircle": "Madhya Pradesh & Chhattisgarh"

  • webengageMsgId
    Unique ID of the message if the message was sent via WebEngage
    Example: "webengageMsgId": ""

Sample payload of the report received on Webhook for an Outbound message:

{

"requestId": "9395400c648e11f0834e02924bf4bca3",

"uuid": "950d4204648e11f085fc02af09483607",

"crqid": "",

"webengageMsgId": "",

"campaignRequestId": "",

"campaignName": "",

"requestedAt": "2025-07-19 10:53:17.277660+00:00",

"customerNumber": "917748847990",

"projectName": "MSG91_RCS_TRANSACTIONAL",

"eventName": "failed",

"templateName": "test_multi_product",

"companyId": "396301",

"contentType": "template",

"templateMessageType": "rich_card",

"content": "{}",

"direction": "outbound",

"countryName": "India",

"telecomCircle": "Madhya Pradesh & Chhattisgarh",

"statusUpdatedAt": "2025-07-19 10:53:17.277660+00:00",

"desc": "Invalid HSM Data: Either template name is wrong, or it is not registered with WABA"

}

Sample payload of the report received on Webhook for an Inbound message:

{

"requestId": "",

"uuid": "222df35f-41cd-4fc6-9312-6f1ea77e6a5a",

"crqid": "",

"webengageMsgId": "",

"campaignRequestId": "",

"campaignName": "",

"requestedAt": "2025-07-19 11:06:54.665000+00:00",

"customerNumber": "917748847990",

"projectName": "MSG91_RCS_TRANSACTIONAL",

"eventName": "delivered",

"templateName": "",

"companyId": "396301",

"contentType": "text_message",

"templateMessageType": "",

"content": "{\"text\":\"Heyyyy\"}",

"direction": "inbound",

"countryName": "India",

"telecomCircle": "Madhya Pradesh & Chhattisgarh",

"statusUpdatedAt": "2025-07-19 11:06:54.665000+00:00",

"desc": ""

}

You can also add the Headers in the key-value pairs, and we will send all the reports including these Headers:

Msg91whatsapp-MSG91-07-16-2025_01_49_PM.png

Step 5. Click Create to save the Webhook.

Still have questions?

Feel free to reach us at +91 8818888733 via call or WhatsApp, or drop an email to

[email protected]

.

How to Receive RCS Delivery Reports via Webhook
RCS WebhookMSG91 platformHow to receive RCS reports on WebhookMSG91 RCS Webhook
Jul 19, 2025

You can use the Webhook feature on the MSG91 platform to receive delivery reports for your OTPs sent via SendOTP API. Follow the steps below to set it up:

1. Log in to your MSG91 Dashboard » OTP » Webhook » Click on Create Webhook.

OTPWebhook.png

2. Configure Your Webhook

OTP_Steps_0 (1).png

Step 1: Provide a name to your webhook.

Step 2. Select OTP and the event type “On Report Received”:

On Report Received: Provides real-time delivery reports, including success/failure status and additional details.

Step 3. Enter your Webhook URL (Callback URL) where data should be sent.

Content-Type: Only JSON is supported. Ensure your endpoint can parse JSON data in any format.

Step 4. Customize Data Parameters

Use { to add fields/ parameters you want to receive.

You can include or exclude fields as needed. Ensure parameters follow valid JSON formatting.

Example JSON payload with all the available parameters:

{

  "CRQID": "{{CRQID}}",

  "requestedAt": "{{requestedAt}}",

  "requestId": "{{requestId}}",

  "telNum": "{{telNum}}",

  "countryName": "{{countryName}}",

  "status": "{{status}}",

  "senderId": "{{senderId}}",

  "deliveryTime": "{{deliveryTime}}",

  "credit": "{{credit}}",

  "smsLength": "{{smsLength}}",

  "pauseReason": "{{pauseReason}}",

  "voiceRetryCount": "{{voiceRetryCount}}",

  "otpRetry": "{{otpRetry}}",

  "verified": "{{verified}}",

  "failureReason": "{{failureReason}}",

  "userIp": "{{userIp}}",

  "flowID": "{{flowID}}",

  "DLT_TE_ID": "{{DLT_TE_ID}}",

  "campaignName": "{{campaignName}}",

  "telecomCircle": "{{telecomCircle}}",

  "circleDescription": "{{circleDescription}}"

}

Description of the parameters:


  • CRQID
    A custom parameter you can pass in the API payload. You will receive the same value in the webhook
    Example: "CRQID": "MSG91SendOTPAPI"

  • requestedAt
    The timestamp indicating when the message request was initiated from your system.
    Example: "requestedAt": "2025-07-19T07:15:43.000Z"

  • requestId
    Unique ID generated for each message request.
    Example: "requestId": "3567736c53515771356c4878"

  • telNum
    The user’s mobile number.
    Example: "telNum": "9177488479XX"

  • countryName
    Name of the country to which the OTP was sent.
    Example: "countryName": "India"

  • status
    Message status – Delivered / Failed.
    1 = Delivered
    2 = Failed.
    Example: "status": "1"

  • senderId
    Sender ID used to send the SMS.
    Example: "senderId": "TXTAPI"

  • deliveryTime
    Timestamp indicating when the SMS was delivered.
    Example: "deliveryTime": "2025-07-19T12:45:44.000Z"

  • credit
    Total charges deducted for the SMS sent.
    Example: "credit": "0.22"

  • smsLength
    Number of credits deducted based on the character count of your SMS.
    Example: "smsLength": "1”

  • pauseReason
    The reason due to which the OTP request was paused.
    Example: "pauseReason": ""

  • voiceRetryCount
    Number of times the OTP was resent via the Voice call.
    Example: "voiceRetryCount": "2"

  • otpRetry
    Number of times the OTP was resent.
    Example: "otpRetry": "2"

  • verified
    Shows if the OTP was verified via the VerifyOTP API. 1 = verified, blank = not verified.
    Example: "verified": "1"

  • failureReason
    The reason for the failure of your SMS.
    Example: "failureReason": "Absent Subscriber"

  • userIp
    IP address from which the request was sent.
    Example: "userIp": "54.86.50.139”

  • flowID
    MSG91 template ID of your OTP template.
    Example: "flowID": "63ef3040d6fc054462756d53"

  • DLT_TE_ID
    DLT Template ID of your message.
    Example: "DLT_TE_ID": "1307160975559044358"

  • campaignName
    Name of your Template that you used to send the OTP.
    Example: "campaignName": "Login_OTP"

  • telecomCircle
    The telecom circle of the customer’s mobile number.
    Example: "telecomCircle": "Madhya Pradesh & Chhattisgarh"

  • circleDescription
    Description of the telecom circle.
    Example: "circleDescription": "State of Madhya Pradesh and State of Chhattisgarh"

Sample payload of the data received on Webhook:

{

  "CRQID": "0",

  "requestedAt": "2025-07-19T06:56:28.000Z",

  "requestId": "3567736c7a4164736a357955",

  "telNum": "917748847990",

  "countryName": "India",

  "status": "1",

  "senderId": "TXTAPI",

  "deliveryTime": "2025-07-19T12:26:29.000Z",

  "credit": "0.22",

  "smsLength": "1",

  "pauseReason": "",

  "voiceRetryCount": "",

  "otpRetry": "",

  "verified": "",

  "failureReason": "",

  "userIp": "2600:1900:0:3902::700",

  "flowID": "63ef3040d6fc054462756d53",

  "DLT_TE_ID": "1307160975559044358",

  "campaignName": "Testing",

  "telecomCircle": "Madhya Pradesh & Chhattisgarh",

  "circleDescription": "State of Madhya Pradesh and State of Chhattisgarh"

}

You can also add the Headers in the key-value pairs, and we will send all the reports including these Headers:

Mystic2-MSG91-07-19-2025_03_30_PM.png

Final Step: Click Create to save the Webhook.

Still have questions?

Feel free to reach us at +91 8818888733 via call or WhatsApp, or drop an email to

[email protected]

.

How to Receive SendOTP API Delivery Reports via Webhook
Jul 19, 2025

You can use the Webhook (New) feature on the MSG91 platform to receive delivery reports for your Emails. Please follow the steps below to set it up.

1. Log in to your MSG91 Dashboard » Email » Webhook (New) » Click on Create Webhook.

image

2. Configure Your Webhook.

image

Step 1: Provide a name to your webhook.

Step 2. Select Email and the event type you wish to receive:

On Enqueued: 

  • Triggers when an email request is sent from your account.

  • It does not include a delivery report.

On Report Received:

  • Provides real-time delivery reports, including success/failure status, its reason, and additional details.

On Opened/Unsubscribed/Clicked/Complaints Received:

  • Triggers when an action (such as Clicked, Opened, Unsubscribed, URL clicked) happens or if any complaint is received for your delivered email.

Note: To receive all event types, you must create a separate webhook for every event.

Step 3: Enter your Webhook URL (Callback URL) where data should be sent.

  • When you send bulk emails, the webhook will still send one log (payload) per recipient email. This means for each email, you will receive a separate webhook event, even if all messages are sent in a single batch.

  • The value of a few parameters is a stringified JSON array, so make sure your Webhook is capable of receiving such data.

Content-Type: Only JSON is supported. Ensure your endpoint can parse JSON data in any format.

Step 4. Customize Data Parameters

Use { to add fields/ parameters you want to receive.

You can include or exclude fields as needed. Ensure parameters follow valid JSON formatting.

Example JSON payload:

{

  "requestId": "{{requestId}}",

  "uuid": "{{uuid}}",

  "crqid": "{{crqid}}",

  "requestedAt": "{{requestedAt}}",

  "sender": "{{sender}}",

  "recipient": "{{recipient}}",

  "eventId": "{{eventId}}",

  "eventName": "{{eventName}}",

  "templateName": "{{templateName}}",

  "campaignRequestId": "{{campaignRequestId}}",

  "campaignName": "{{campaignName}}",

  "domain": "{{domain}}",

  "isSmtp": "{{isSmtp}}",

  "templateVersionId": "{{templateVersionId}}",

  "sendTo": "{{sendTo}}",

  "cc": "{{cc}}",

  "bcc": "{{bcc}}",

  "subject": "{{subject}}",

  "variables": "{{variables}}",

  "replyTo": "{{replyTo}}",

  "inReplyTo": "{{inReplyTo}}",

  "msgId": "{{msgId}}",

  "attachments": "{{attachments}}",

  "statusCode": "{{statusCode}}",

  "enhancedStatusCode": "{{enhancedStatusCode}}",

  "reason": "{{reason}}",

  "statusUpdatedAt": "{{statusUpdatedAt}}"

}

Description of the parameters:

  • requestId
    Timestamp indicating when the email request was initiated from your end.
    Example: "requestId": "2025-07-10T11:59:47.000Z"

  • uuid
    Unique ID of the email request.
    Example: "uuid": "Your Mystic Cosmos OTP"

  • crqid
    A custom parameter you can pass in the API payload. You will receive the same value in the webhook.
    Example: "crqid": "MSG91_Email"

  • requestedAt
    Timestamp indicating when the message request was initiated from your end..
    Example: "requestedAt": "2025-07-21T05:39:54.000Z"

  • sender
    Email address through which you sent the mail.
    Example: "sender": "

    [email protected]

    "

  • recipient
    Email address of the recipient.
    Example: ""recipient": "

    [email protected]

    "

  • eventId
    This ID indicates the status of your email.

1= Queued.

2= Accepted.

4= Delivered.

5= Opened

9= Failed


Example: "eventId": "1”

  • eventName
    Status of your email.
    Example: "eventName": "Queued"

  • templateName
    Name of the template that you used to send the email.
    Example: "templateName": "template_02_06_2025_16_06_3"

  • campaignName
    Name of your campaign if sent via MSG91’s Campaign service.
    Example: "campaignName": "JulyfirstSale”

  • campaignRequestId
    Unique request ID of your campaign.
    Example: "campaignRequestId": "f437yhghutyi4379r8rot439"

  • domain
    The domain through which you sent the email.
    Example: "domain": "

    7whs3y.mailer91.com

    "

  • isSmtp
    Indicates if the email was sent via SMTP. "1" means it was, "0" means it wasn't.
    Example: "isSmtp": "0"

  • templateVersionId
    ID of the version of the template that you used to send mail.
    Example: "templateVersionId": "38986",

  • sendTo
    Email address on which the email was sent.
    Example: "sendTo": "{\"email\":\"

    [email protected]

    \"}"

  • cc
    The email address that you kept in CC.
    Example: "cc": "

    [email protected]

    "

  • bcc
    The email address that you kept in BCC.
    Example: "bcc": "

    [email protected]

    "

  • subject
    Subject of the email that you sent.
    Example: ""subject": "Embrace Positivity - A Message from Mystic Cosmos"

  • variables
    Variable values you passed for the variables in your email template.
    Example: "variables": "{\"name\":\"User\"}"

  • replyTo
    The email address you passed in the replyTo field.
    Example: ""replyTo": "

    [email protected]

    "

  • attachments
    The details of the attachments you passed in your email request.
    Example: "attachments": "{\"name\":\"Guidelines\",\"extension\":\"jpeg\",\"path\":\"

    https://files.msg91.com/454228/bfxkieca\",\"type\":\"url\"},{\"name\":\"Resume\",\"extension\":\"png\",\"path\":\"https://files.msg91.com/454228/lffasyzq\",\"type\":\"url\"}

    "

  • reason
    The reason for the failure of your email. If the email was delivered, this field will display the value 'OK'.
    Example: "reason": "The email account that you tried to reach does not exist. Please try double-checking the recipient's email address for typos or unnecessary spaces. For more information, go to 

    https://support.google.com/mail/?p=NoSuchUser

    00721157ae682-7195310c395si72021867b3.89 - gsmtp"

  • statusUpdatedAt
    Timestamp indicating when the latest status of your email was updated (Queued/ Accepted/Delivered/ Failed/ Opened)
    Example: "statusUpdatedAt": "2025-07-23T05:15:52.000Z"

  • statusCode
    The statusCode is a standard SMTP response code (3-digit number) returned by the recipient's mail server. It indicates the overall result of the attempted email delivery.
    Example: "statusCode": "250"

  • enhancedStatusCode
    Provides a structured, detailed status returned by the mail server in response to the delivery attempt. It uses a standardized format (X.Y.Z) to categorize the nature of the response, offering more specific insight into the delivery status.
    Example: "enhancedStatusCode": "2.0.0"

  • msgId
    Unique ID generated at our end for every email request sent.
    Example: "msgId": "<

    1753076397-9f70fd93-c471-46e8-8e3b-e01e164c2212-0@7whs3y.mailer91.com

    >"

  • inReplyTo
    Indicates the message ID of the original email to which the current email is a reply. This parameter helps maintain the email thread structure by linking related messages in conversation views.
    Example: "inReplyTo": "<

    16282926397-9f70fd93-c471-46e8-8e3b-e01e164c2212-0@7whs3y.mailer91.com

    >"

Sample payload of the data received on Webhook:

{

  "requestId": "9f72f7d5-dfc3-4e0b-93ce-9f350b0abc7a",

  "uuid": "",

  "crqid": "MSG91_email",

  "requestedAt": "2025-07-22T05:15:30.000Z",

  "sender": "

[email protected]

",

  "recipient": "

[email protected]

",

  "eventId": "5",

  "eventName": "Opened",

  "templateName": "template_02_06_2025_16_06_3",

  "campaignRequestId": "1753161321_6e21faccac0762b9051d47ce0285f365",

  "campaignName": "july22",

  "pluginsource": "1700",

  "domain": "

7whs3y.mailer91.com

",

  "isSmtp": "0",

  "templateVersionId": "38986",

  "sendTo": "{\"name\":null,\"email\":\"

[email protected]

\"}",

  "cc": "{\"email\":\"

[email protected]

\"}",

  "bcc": "",

  "subject": "Embrace Positivity - A Message from Mystic Cosmos",

  "variables": "{\"name\":\"Manas\"}",

  "replyTo": "{\"name\":\"Manas\",\"email\":\"

[email protected]

\"}",

  "inReplyTo": "",

  "msgId": "<

1753161332-9f72f7d5-dfc3-4e0b-93ce-9f350b0abc7a-2@7whs3y.mailer91.com

>",

  "attachments": "{\"name\":\"Guidelines\",\"extension\":\"jpeg\",\"path\":\"

https://files.msg91.com/454228/bfxkieca\",\"type\":\"url\"},{\"name\":\"Resume\",\"extension\":\"png\",\"path\":\"https://files.msg91.com/454228/lffasyzq\",\"type\":\"url\"}

",

  "statusCode": "250",

  "enhancedStatusCode": "2.0.0",

  "reason": "OK",

  "statusUpdatedAt": "2025-07-22T05:27:59.000Z",

}

You can also add the Headers in the key-value pairs, and we will send all the reports along with these Headers:

Email webhook headers.png

Step 5. Click Create to save the Webhook.

Still have questions?

Feel free to reach us at +91 8818888733 via call or WhatsApp, or drop an email to

[email protected]

.

How to Receive Email Delivery Reports via Webhook (New)
Email delivery reportsMSG91 Email webhook helpHow to receive email delivery reports via webhook newmsg91 email webhook newmsg91 webhook new
Jul 23, 2025