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

How to Receive Email Delivery Reports via Webhook (New)

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

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

  • 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]\"}"

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

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

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].