Msg91 Help Doc
Webhook (New)
How to Receive SMS Delivery Re...

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:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  "smsLength": "{{smsLength}}"

}

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"

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

  • 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"

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

  • 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": ""

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": "",

  "route": "4",

  "campaign_pid": "",

  "clientId": "",

  "UUID": "0",

  "INMSID": "0",

  "CRQID": "0",

  "failureReason": "",

  "smsLength": "1",

}

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]