Msg91 Help Doc
Webhook (New)
How to Receive SMS Delivery Reports via Webhook (New)

How to Receive SMS Delivery Reports via Webhook (New)

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 of when the SMS was delivered from your end.
    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]