SMS Webhook Overview

Fast2SMS can send real-time SMS delivery updates as a POST request (JSON or URL-encoded) or GET request to your configured webhook URL.

Webhook Formats

When creating a webhook, you can select one of the following formats under Select Format:

  1. Standard Webhook (custom): Fully customizable. Allows configuration of Select Event, Method, Content-Type, and Body (payload). X-Payload-Transform is shown only when Content-Type is Form URL Encoded.
  2. CleverTap (SMS) (clevertap): Integrates directly with CleverTap's webhook callback structure. Select Event, Method, Content-Type, and Body are locked (read-only) when this template is selected.

Webhook Panel Form Options

When configuring a webhook in the Fast2SMS Dashboard under CREATE WEBHOOK, the fields correspond to the API parameters as follows:

Field Label in UIAPI ParameterDescription & Visibility Rules
Webhook NamenameFriendly name for internal tracking.
Select ServiceserviceChoose SMS to configure SMS delivery webhooks.
Select FormattemplateChoose Standard Webhook or CleverTap (SMS).
Select EventeventFilter trigger events (e.g. Default All Events, On Delivered, On Failed). Locked if format is not Standard Webhook.
Entity IDidentity_idOptional Entity ID. Defaults to "Default All". Only shown when Service is SMS.
MethodmethodHTTP method (POST, GET, PUT). Locked if format is not Standard Webhook.
URLurlDestination URL to receive payloads.
Content-Typecontent_typeTarget encoding format (JSON, Form URL Encoded, XML). Locked if format is not Standard Webhook.
X-Payload-Transformpayload_transformTransform level (Standard, Raw JSON). Shown only when Content-Type is Form URL Encoded.
Webhook Status (Active)statusSwitch to enable/disable webhook triggers (active/inactive).
BodypayloadCustom payload structure text. Locked if format is not Standard Webhook.

Standard Webhook Payload

Payload Variables

VariableTypeDescription
request_idStringUnique request identifier for the message
routeStringThe SMS route used (e.g., dlt, dlt_manual)
sender_idStringThe Sender ID
delivery_attemptIntegerNumber of delivery attempts
character_countIntegerCharacter count of the message text
mobileStringRecipient 10-digit mobile number
statusStringDelivery status (e.g., delivered, failed)
status_descriptionStringDetailed status text
udf1StringUser Defined Field 1 – Optional custom value passed via API and returned in the webhook for your internal reference or tracking.
udf2StringUser Defined Field 2 – Optional custom value passed via API and returned in the webhook for your internal reference or tracking.
udf3StringUser Defined Field 3 – Optional custom value passed via API and returned in the webhook for your internal reference or tracking.
server_idIntegerThe server ID associated with the log
sms_languageStringMessage encoding language (english, unicode)
sms_countIntegerNumber of split message parts
amount_debitedStringBalance debited for this message
sent_timestampIntegerUnix timestamp when the message was sent
sent_timeStringFormatted date-time string when sent
delivery_timestampIntegerUnix timestamp when the message was delivered
delivery_timeStringFormatted date-time string when delivered
failure_reasonStringDescription of the error if delivery failed
descriptionStringEvent status overview
post_attemptIntegerWebhook retry attempt count
webhook_typeStringEvent type (e.g., status_update)

Example JSON Payload (Standard Webhook)

{
  "request_id": "Sabcdef12345678",
  "route": "dlt",
  "sender_id": "FSTSMS",
  "delivery_attempt": 1,
  "character_count": 120,
  "mobile": "9999999999",
  "status": "delivered",
  "status_description": "Delivered successfully",
  "udf1": "TEST-CLIENT-ID",
  "udf2": "TEST-CRQID",
  "udf3": "TEST-UUID-1234",
  "server_id": 12345,
  "sms_language": "english",
  "sms_count": 1,
  "amount_debited": "0.2000",
  "sent_timestamp": 1718712000,
  "sent_time": "2026-06-18 12:00:00",
  "delivery_timestamp": 1718712002,
  "delivery_time": "2026-06-18 12:00:02",
  "failure_reason": "Delivered successfully",
  "description": "Delivered successfully",
  "post_attempt": 1,
  "webhook_type": "status_update"
}

CleverTap (SMS) Webhook Payload

If you select the CleverTap (SMS) format, the payload will be structured as follows to match CleverTap requirements:

Example JSON Payload (CleverTap SMS)

{
  "payloadVersion": "1",
  "statuses": [
    {
      "msgId": "Sabcdef12345678",
      "status": "delivered",
      "timestamp": "1718712002",
      "description": "Delivered successfully"
    }
  ]
}