Fast2SMS sends the final result of every called number to your webhook URL as a POST request (JSON or URL-encoded) or GET request. Results are sent once the campaign has finished (after its last retry), so each number's status, talk time and charge are final.
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 UI | API Parameter | Description |
|---|---|---|
| Webhook Name | name | Friendly name for internal tracking. |
| Select Service | service | Choose Voice to configure Voice webhooks. |
| Select Format | template | Standard Webhook (custom). |
| Select Event | event | Default All Events (all), Answered, Not Answered (no_answer), Busy, Failed. |
| Method | method | HTTP method (POST, GET, PUT). |
| URL | url | Destination URL to receive payloads. |
| Content-Type | content_type | JSON, Form URL Encoded or XML. |
| X-Payload-Transform | payload_transform | Standard or Raw JSON. Shown only when Content-Type is Form URL Encoded. |
| Webhook Status (Active) | status | Enable / disable (active / inactive). |
| Body | payload | Custom payload with the variables below. |
Standard Webhook Payload
Payload Variables
| Variable | Type | Description |
|---|---|---|
request_id | String | Campaign request id (15 characters, starts with V), as returned by the Send API |
campaign_name | String | Campaign name |
route | String | Always voice |
mobile | String | Called 10-digit mobile number |
status | String | answered, no_answer, busy or failed |
description | String | Status in words, e.g. Call answered |
duration | Integer | Talk seconds |
agent_duration | Integer | Call Patch: seconds with your agent |
pulses | Integer | Pulses charged for this number |
amount_debited | String | Amount charged for this number (₹, 4 decimals) |
dtmf | String | Key pressed (Key Press / Call Patch) |
agent_number | String | Call Patch: agent the caller was connected to |
start_time | String | Call start, YYYY-MM-DD HH:MM:SS IST |
end_time | String | Call end, YYYY-MM-DD HH:MM:SS IST |
reason | String | Plain reason when not answered, e.g. Not answered, Number busy, Switched off or not reachable |
timestamp | Integer | Unix time the webhook was sent |
Example
{
"request_id": "VdQkbYrvgtOo2nG",
"mobile": "9999999999",
"status": "answered",
"description": "Call answered",
"duration": 22,
"pulses": 2,
"amount_debited": "0.5000",
"dtmf": "1",
"start_time": "2026-11-05 10:30:12",
"end_time": "2026-11-05 10:30:34",
"reason": ""
}Blacklisted and DND numbers are never called, so no webhook is sent for them. Each delivery is listed under Webhooks > Logs in the dashboard.
