{"id":17125,"date":"2026-07-27T10:21:40","date_gmt":"2026-07-27T04:51:40","guid":{"rendered":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/"},"modified":"2026-07-27T10:27:18","modified_gmt":"2026-07-27T04:57:18","slug":"how-webhooks-work","status":"publish","type":"post","link":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/","title":{"rendered":"How Webhooks Work: Real-Time Delivery Reports for SMS, WhatsApp, OTP and RCS"},"content":{"rendered":"<p>Your website sends an OTP. Did it arrive? Your store sends an order update on WhatsApp. Was it read? You could keep asking the API every few seconds, or you could have the answer pushed to your server the moment it exists. That push is a webhook. This guide explains how webhooks work on Fast2SMS, step by step, with every available variable for SMS, OTP, WhatsApp and RCS, and real payload examples you can copy.<\/p>\n<h2>What a webhook is, in plain words<\/h2>\n<p>A webhook is simply a URL on your server that Fast2SMS calls when something happens to your message: it gets delivered, it fails, it gets read, or a customer replies. Think of it like a courier who rings your bell when the parcel arrives, instead of you refreshing the tracking page all day.<\/p>\n<figure style=\"margin:36px 0;text-align:center;\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2026\/07\/webhook-flow.png\" alt=\"Diagram of how a webhook works: message sent, status changes, Fast2SMS calls your URL, your server acts\" width=\"1600\" height=\"900\" style=\"max-width:100%;height:auto;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.06);\" \/><figcaption style=\"font-size:14px;color:#6b7280;margin-top:12px;font-style:italic;\">The whole idea in one picture: events come to you, near real-time.<\/figcaption><\/figure>\n<p>Why this beats polling the API:<\/p>\n<ul>\n<li><strong>Real time.<\/strong> Delivery reports reach your server within about a minute of the event.<\/li>\n<li><strong>No wasted calls.<\/strong> Polling asks a thousand times to learn one thing. A webhook speaks once, when there is news.<\/li>\n<li><strong>Two-way.<\/strong> On WhatsApp and RCS, webhooks also carry incoming replies from customers, so your system can react to a &#8220;Yes, confirm my order&#8221;.<\/li>\n<\/ul>\n<h2>Which events you can receive, per channel<\/h2>\n<div style=\"overflow-x:auto;\">\n<table style=\"width:100%;border-collapse:collapse;font-size:15px;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Channel<\/th>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Events<\/th>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Arrives as<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><strong>SMS<\/strong><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">delivered, failed<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">status_update<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><strong>OTP<\/strong><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">delivered, failed<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">status_update<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><strong>WhatsApp<\/strong><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">sent, delivered, read, failed, received (inbound reply)<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">status_update \/ incoming_message<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><strong>RCS<\/strong><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">sent, delivered, read, failed, received (inbound reply)<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">status_update \/ incoming_message<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Two notes worth knowing before setup: webhooks fire for messages sent through the <strong>developer API<\/strong> (dashboard-sent messages are not pushed), and you can create up to <strong>10 webhooks per channel<\/strong>.<\/p>\n<h2>Step 1: Build a tiny endpoint on your server<\/h2>\n<p>Your endpoint only has to do two things: read the request, and answer HTTP 200 quickly.<\/p>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>&lt;?php\n\/\/ https:\/\/yourdomain.com\/fast2sms-webhook.php\n$raw  = file_get_contents('php:\/\/input');   \/\/ the JSON body\n$data = json_decode($raw, true);\n\nfile_put_contents('webhook.log', $raw . PHP_EOL, FILE_APPEND);\n\nhttp_response_code(200);   \/\/ always answer 200 on success\necho 'OK';<\/code><\/pre>\n<p>The same thing in Node\/Express:<\/p>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>app.post('\/fast2sms-webhook', express.json(), (req, res) =&gt; {\n  console.log(req.body);          \/\/ the event payload\n  res.status(200).send('OK');     \/\/ acknowledge fast\n});<\/code><\/pre>\n<h2>Step 2: Add the webhook in your dashboard<\/h2>\n<p>Open the Webhooks section of your Fast2SMS dashboard. Each channel has its own tab, plus a logs tab:<\/p>\n<figure style=\"margin:36px 0;text-align:center;\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2026\/07\/fast2sms-webhooks-dashboard.png\" alt=\"Fast2SMS webhooks dashboard with tabs for SMS, OTP, WhatsApp, RCS webhooks and logs\" width=\"1600\" height=\"806\" style=\"max-width:100%;height:auto;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.06);\" \/><figcaption style=\"font-size:14px;color:#6b7280;margin-top:12px;font-style:italic;\">One tab per channel: SMS, OTP, WhatsApp, RCS, and the shared logs.<\/figcaption><\/figure>\n<p>Click <strong>ADD WEBHOOK<\/strong> and fill the form:<\/p>\n<figure style=\"margin:36px 0;text-align:center;\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2026\/07\/create-webhook-payload-placeholders.png\" alt=\"Create Webhook screen in Fast2SMS with payload template and placeholders for dynamic fields\" width=\"1600\" height=\"1291\" style=\"max-width:100%;height:auto;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.06);\" \/><figcaption style=\"font-size:14px;color:#6b7280;margin-top:12px;font-style:italic;\">Name, service, event, URL, method, content type, and your own payload template on the right.<\/figcaption><\/figure>\n<ul>\n<li><strong>Name:<\/strong> any label, like Order-SMS-DLR.<\/li>\n<li><strong>Service:<\/strong> the channel (sms, otp, whatsapp, rcs).<\/li>\n<li><strong>Event:<\/strong> All, or one specific event like delivered.<\/li>\n<li><strong>Entity \/ Identity:<\/strong> restrict to one sender ID, WhatsApp number or RCS bot, or leave All.<\/li>\n<li><strong>URL:<\/strong> your endpoint from Step 1.<\/li>\n<li><strong>Method and Content-Type:<\/strong> POST with JSON is the recommended pair.<\/li>\n<li><strong>Status:<\/strong> Active. Inactive webhooks never fire.<\/li>\n<\/ul>\n<h2>Step 3: Design your payload with placeholders<\/h2>\n<p>Here is the part developers love: <strong>you decide the body<\/strong>. Write your own JSON and drop in placeholders wrapped in double curly braces. Fast2SMS fills them with real values on every event, and unmatched placeholders simply become empty strings.<\/p>\n<p>Template you save:<\/p>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"request_id\": \"{{request_id}}\",\n  \"mobile\": \"{{mobile}}\",\n  \"status\": \"{{status}}\",\n  \"delivery_time\": \"{{delivery_time}}\",\n  \"udf1\": \"{{udf1}}\"\n}<\/code><\/pre>\n<p>What your server receives:<\/p>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"request_id\": \"Sx8Kd93jfhWq2P\",\n  \"mobile\": \"9999999999\",\n  \"status\": \"delivered\",\n  \"delivery_time\": \"27-07-2026 10:00:02 AM\",\n  \"udf1\": \"ORDER-12345\"\n}<\/code><\/pre>\n<p>That udf1 field deserves a highlight: pass udf1, udf2 or udf3 in your original send request (like your internal order ID), and it comes straight back in the webhook, so matching the report to your records takes zero lookups.<\/p>\n<h2>All available variables, channel by channel<\/h2>\n<h3>Common placeholders (every channel)<\/h3>\n<div style=\"overflow-x:auto;\">\n<table style=\"width:100%;border-collapse:collapse;font-size:15px;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Placeholder<\/th>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{request_id}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Fast2SMS message ID for this send<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{status}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Event status (delivered, failed, read&#8230;)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{status_description}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Human-readable status text<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{mobile}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Recipient mobile number<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{sender_id}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Sender ID or header used<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{webhook_type}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">status_update or incoming_message<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{delivery_attempt}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Current webhook attempt number (1 to 3)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{timestamp}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Event unix timestamp<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{failure_reason}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Failure detail, empty on success<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>SMS and OTP delivery reports<\/h3>\n<div style=\"overflow-x:auto;\">\n<table style=\"width:100%;border-collapse:collapse;font-size:15px;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Placeholder<\/th>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Meaning<\/th>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Sample<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{route}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Route used<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">dlt<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{character_count}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Message length<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">120<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{sms_count}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">SMS segments billed<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">1<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{sms_language}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">english or unicode<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">english<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{amount_debited}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Cost charged<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">0.2000<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{sent_time}}<\/code> \/ <code>{{sent_timestamp}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">When sent (formatted \/ unix)<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">27-07-2026 10:00:00 AM<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{delivery_time}}<\/code> \/ <code>{{delivery_timestamp}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">When delivered, empty if not<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">27-07-2026 10:00:02 AM<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{udf1}}<\/code> <code>{{udf2}}<\/code> <code>{{udf3}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Your own fields from the send request<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">ORDER-12345<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>SMS\/OTP status values: <strong>delivered<\/strong>, <strong>failed<\/strong> (with a carrier reason like Absent Subscriber), <strong>rejected<\/strong>, <strong>sent<\/strong>.<\/p>\n<h3>WhatsApp and RCS<\/h3>\n<div style=\"overflow-x:auto;\">\n<table style=\"width:100%;border-collapse:collapse;font-size:15px;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Placeholder<\/th>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{status}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">sent, delivered, read, failed, received<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{message_id}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Provider message ID<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{phone_number_id}}<\/code> \/ <code>{{waba_id}}<\/code> \/ <code>{{display_phone_number}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Your WhatsApp number identity<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{recipient_id}}<\/code> \/ <code>{{from}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">The customer&#8217;s number<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{category}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Template category: marketing, utility, authentication<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{message_type}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">text, image, document, location&#8230;<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{body}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Inbound message text (incoming_message)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{media_url}}<\/code> \/ <code>{{mime_type}}<\/code> \/ <code>{{caption}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Inbound media details (incoming_message)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{amount_debited}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Cost charged<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\"><code>{{error_message}}<\/code><\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Failure reason on failed<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>A WhatsApp inbound reply, for example, reaches you like this:<\/p>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"webhook_type\": \"incoming_message\",\n  \"status\": \"received\",\n  \"from\": \"919999999999\",\n  \"message_type\": \"text\",\n  \"body\": \"Yes, confirm my order\",\n  \"message_id\": \"wamid.HBgMOTE5...\"\n}<\/code><\/pre>\n<h2>What the pushed webhook actually looks like: full samples per channel<\/h2>\n<p>One thing to remember while reading these: the body of your webhook is <strong>whatever template you define<\/strong>. The samples below use a template containing every available field for that channel, so you can see the complete picture and delete what you do not need.<\/p>\n<h3>SMS: delivered (all fields)<\/h3>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"webhook_type\": \"status_update\",\n  \"request_id\": \"Sx8Kd93jfhWq2P\",\n  \"route\": \"dlt\",\n  \"sender_id\": \"FSTSMS\",\n  \"mobile\": \"9999999999\",\n  \"status\": \"delivered\",\n  \"status_description\": \"Delivered successfully\",\n  \"character_count\": \"120\",\n  \"sms_count\": \"1\",\n  \"sms_language\": \"english\",\n  \"amount_debited\": \"0.2000\",\n  \"server_id\": \"12345\",\n  \"sent_timestamp\": \"1753603200\",\n  \"sent_time\": \"27-07-2026 10:00:00 AM\",\n  \"delivery_timestamp\": \"1753603202\",\n  \"delivery_time\": \"27-07-2026 10:00:02 AM\",\n  \"failure_reason\": \"\",\n  \"delivery_attempt\": \"1\",\n  \"udf1\": \"ORDER-12345\",\n  \"udf2\": \"priya@example.com\",\n  \"udf3\": \"campaign-diwali\"\n}<\/code><\/pre>\n<h3>OTP: failed (all fields, failure filled)<\/h3>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"webhook_type\": \"status_update\",\n  \"request_id\": \"Ot4Pq82kdhXr7M\",\n  \"route\": \"otp\",\n  \"sender_id\": \"FSTSMS\",\n  \"mobile\": \"8888888888\",\n  \"status\": \"failed\",\n  \"status_description\": \"Absent Subscriber\",\n  \"failure_reason\": \"Absent Subscriber\",\n  \"character_count\": \"78\",\n  \"sms_count\": \"1\",\n  \"sms_language\": \"english\",\n  \"amount_debited\": \"0.2000\",\n  \"server_id\": \"12345\",\n  \"sent_timestamp\": \"1753603500\",\n  \"sent_time\": \"27-07-2026 10:05:00 AM\",\n  \"delivery_timestamp\": \"\",\n  \"delivery_time\": \"\",\n  \"delivery_attempt\": \"1\",\n  \"udf1\": \"login-attempt-8842\",\n  \"udf2\": \"\",\n  \"udf3\": \"\"\n}<\/code><\/pre>\n<p>Note the pattern on failure: <code>delivery_time<\/code> stays empty and <code>failure_reason<\/code> carries the carrier&#8217;s reason. This is exactly the trigger to fire your fallback, or let <a href=\"https:\/\/www.fast2sms.com\/help\/otp-sms-smart-otp\/\">Smart OTP<\/a> retry on WhatsApp automatically.<\/p>\n<h3>WhatsApp: status update, read (all fields)<\/h3>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"webhook_type\": \"status_update\",\n  \"status\": \"read\",\n  \"status_description\": \"Read successfully\",\n  \"message_id\": \"wamid.HBgMOTE5OTk5OTk5OTk5FQIAERgS0A5B3C2D1E==\",\n  \"waba_id\": \"1029384756\",\n  \"phone_number_id\": \"1122334455\",\n  \"display_phone_number\": \"+91 98765 43210\",\n  \"recipient_id\": \"919999999999\",\n  \"category\": \"utility\",\n  \"message_type\": \"text\",\n  \"amount_debited\": \"0.2500\",\n  \"error_message\": \"\",\n  \"timestamp\": \"1753603800\",\n  \"delivery_attempt\": \"1\"\n}<\/code><\/pre>\n<h3>WhatsApp: incoming customer reply with media (all fields)<\/h3>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"webhook_type\": \"incoming_message\",\n  \"status\": \"received\",\n  \"status_description\": \"Message Received\",\n  \"waba_id\": \"1029384756\",\n  \"phone_number_id\": \"1122334455\",\n  \"display_phone_number\": \"+91 98765 43210\",\n  \"from\": \"919999999999\",\n  \"message_id\": \"wamid.HBgMOTE5OTk5OTk5OTk5FQIAEhgUM0E5RkY3==\",\n  \"message_type\": \"image\",\n  \"body\": \"Here is the payment screenshot\",\n  \"media_url\": \"https:\/\/media.example.com\/wa\/img_8f3a2c.jpg\",\n  \"mime_type\": \"image\/jpeg\",\n  \"caption\": \"Paid via UPI\",\n  \"timestamp\": \"1753604100\",\n  \"delivery_attempt\": \"1\"\n}<\/code><\/pre>\n<p>For a plain text reply, <code>message_type<\/code> is <code>text<\/code>, <code>body<\/code> carries the words, and the three media fields arrive empty.<\/p>\n<h3>RCS: status update, delivered (all fields)<\/h3>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"webhook_type\": \"status_update\",\n  \"request_id\": \"Rk2Lm93jfhWq2P\",\n  \"sender_id\": \"MyBrand\",\n  \"mobile\": \"9999999999\",\n  \"status\": \"delivered\",\n  \"status_description\": \"Delivered successfully\",\n  \"message_type\": \"text\",\n  \"amount_debited\": \"0.1500\",\n  \"error_message\": \"\",\n  \"timestamp\": \"1753604400\",\n  \"delivery_attempt\": \"1\"\n}<\/code><\/pre>\n<p>A read receipt looks identical with <code>status<\/code> as <code>read<\/code> and <code>status_description<\/code> as Read successfully.<\/p>\n<h3>RCS: incoming customer reply (all fields)<\/h3>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>{\n  \"webhook_type\": \"incoming_message\",\n  \"status\": \"received\",\n  \"status_description\": \"Message Received\",\n  \"sender_id\": \"MyBrand\",\n  \"from\": \"919999999999\",\n  \"message_type\": \"text\",\n  \"body\": \"Show me the new collection\",\n  \"timestamp\": \"1753604700\",\n  \"delivery_attempt\": \"1\"\n}<\/code><\/pre>\n<p>Values shown are realistic samples; your actual IDs, numbers and amounts will differ. Empty strings mean the field has no value for that event, never an error.<\/p>\n<h2>Step 4: Test it before real traffic<\/h2>\n<p>Every webhook row has an Action menu with <strong>Test Webhook<\/strong>: Fast2SMS calls your URL with mock data and shows you the HTTP response it got. Green means your endpoint answered 2xx and you are live.<\/p>\n<figure style=\"margin:36px 0;text-align:center;\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2026\/07\/webhook-test-edit-actions.png\" alt=\"Webhook action menu in Fast2SMS with edit, test and delete options\" width=\"1600\" height=\"854\" style=\"max-width:100%;height:auto;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.06);\" \/><figcaption style=\"font-size:14px;color:#6b7280;margin-top:12px;font-style:italic;\">Edit, Test and Delete live behind each webhook&#8217;s Action button.<\/figcaption><\/figure>\n<h2>Step 5: Verify requests really come from Fast2SMS<\/h2>\n<p>Enable webhook signing in your Dev API settings. Every webhook request then carries a header called <code>webhook_secret_key<\/code> with a fixed 40-character secret shown in your dashboard. Compare it on your side and reject anything else:<\/p>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>$expected = 'YOUR_40_CHAR_SECRET';\n$received = $_SERVER['HTTP_WEBHOOK_SECRET_KEY'] ?? '';\n\nif (!hash_equals($expected, $received)) {\n    http_response_code(401);\n    exit('Invalid signature');\n}<\/code><\/pre>\n<h2>Retries, timeouts and the logs<\/h2>\n<div style=\"overflow-x:auto;\">\n<table style=\"width:100%;border-collapse:collapse;font-size:15px;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Behaviour<\/th>\n<th style=\"border:1px solid #e5e7eb;padding:12px;background:#f3f4f6;text-align:left;\">Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Request timeout<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">60 seconds<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Automatic retries<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Up to 3 attempts, 60 seconds apart<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Success means<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Your endpoint returned HTTP 200 to 299<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Delivery latency<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Near real-time (events picked up about every 60 seconds)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">Log storage<\/td>\n<td style=\"border:1px solid #e5e7eb;padding:12px;\">7 days, with one-time manual resend per event<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Because retries exist, your endpoint may see the same event twice. De-duplicate on <code>request_id<\/code> plus <code>status<\/code>, answer 200 fast, and do heavy processing after acknowledging.<\/p>\n<figure style=\"margin:36px 0;text-align:center;\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2026\/07\/webhook-logs-retry.png\" alt=\"Webhook logs in Fast2SMS with HTTP response codes, timing and seven day storage policy\" width=\"1600\" height=\"875\" style=\"max-width:100%;height:auto;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.06);\" \/><figcaption style=\"font-size:14px;color:#6b7280;margin-top:12px;font-style:italic;\">Every attempt logged with HTTP code and round-trip time. Failed calls show exactly why.<\/figcaption><\/figure>\n<h2>Manage webhooks from code<\/h2>\n<p>Everything above can also be done through the developer API, with full CRUD per channel:<\/p>\n<pre style=\"background:#1f2937;color:#e5e7eb;padding:16px;border-radius:8px;overflow-x:auto;font-size:14px;\"><code>curl -X POST \"https:\/\/www.fast2sms.com\/dev\/webhook\/v2\/sms\" \\\n  -H \"authorization: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"name\": \"Order-SMS-DLR\",\n    \"url\": \"https:\/\/yourdomain.com\/fast2sms-webhook\",\n    \"method\": \"POST\",\n    \"content_type\": \"application\/json\",\n    \"event\": \"all\",\n    \"status\": \"active\",\n    \"payload\": {\n      \"request_id\": \"{{request_id}}\",\n      \"mobile\": \"{{mobile}}\",\n      \"status\": \"{{status}}\"\n    }\n  }'<\/code><\/pre>\n<p>GET lists, PUT updates and DELETE removes, using the same path with the webhook ID. Swap sms for otp, whatsapp or rcs. Full reference: <a href=\"https:\/\/docs.fast2sms.com\/reference\/sms-webhook\" target=\"_blank\" rel=\"noopener\">docs.fast2sms.com\/reference\/sms-webhook<\/a>.<\/p>\n<h2>What to build with webhooks<\/h2>\n<ul>\n<li><strong>Order tracking that updates itself:<\/strong> mark orders delivered in your database the second the SMS or WhatsApp report lands. Pairs perfectly with the <a href=\"https:\/\/www.fast2sms.com\/help\/bulk-sms-api-india\/\">bulk SMS API<\/a> and <a href=\"https:\/\/www.fast2sms.com\/help\/whatsapp-message-api\/\">WhatsApp message API<\/a>.<\/li>\n<li><strong>OTP flows that react to failures:<\/strong> if the OTP report says failed, trigger your fallback immediately. <a href=\"https:\/\/www.fast2sms.com\/help\/otp-sms-smart-otp\/\">Smart OTP<\/a> handles channel fallback automatically; webhooks tell your app about it.<\/li>\n<li><strong>Reply handling:<\/strong> route incoming WhatsApp and RCS replies into your CRM or support system with the incoming_message events.<\/li>\n<li><strong>Spend tracking:<\/strong> the amount_debited field gives you per-message cost data straight into your own reports.<\/li>\n<\/ul>\n<h2>Frequently asked questions<\/h2>\n<h3>What is a webhook in simple words?<\/h3>\n<p>A URL on your server that Fast2SMS calls automatically when something happens to your message: delivered, failed, read, or replied to. News comes to you instead of you asking for it.<\/p>\n<h3>Which channels support webhooks?<\/h3>\n<p>SMS, OTP, WhatsApp and RCS, each with its own tab and up to 10 webhooks per channel.<\/p>\n<h3>Do webhooks work for messages sent from the dashboard?<\/h3>\n<p>No. Webhooks fire for messages sent through the developer API. Dashboard sends show their reports in the panel instead.<\/p>\n<h3>Can I choose what the payload looks like?<\/h3>\n<p>Yes, fully. You write the body template with placeholders in double curly braces, and Fast2SMS fills them per event. Any format your system expects, JSON or form-encoded.<\/p>\n<h3>How fast do events arrive?<\/h3>\n<p>Near real-time: new reports are picked up about every 60 seconds and pushed to your URL immediately after.<\/p>\n<h3>What if my server is down when the webhook fires?<\/h3>\n<p>Fast2SMS retries up to 3 times, 60 seconds apart. Every attempt is logged for 7 days, and any logged event can be manually resent once from the logs screen.<\/p>\n<h3>How do I secure my endpoint?<\/h3>\n<p>Enable signing, then verify the webhook_secret_key header against the 40-character secret from your dashboard, use HTTPS, and reject anything that does not match.<\/p>\n<h3>Why am I seeing duplicate events?<\/h3>\n<p>Retries can repeat an event. Make your endpoint idempotent by de-duplicating on request_id plus status.<\/p>\n<h2>Get real-time delivery reports today<\/h2>\n<p>Create your free account, add your first webhook, and your server knows about every delivered, failed and read message the moment it happens.<\/p>\n<p style=\"text-align:center;margin:28px 0;\">\n  <a href=\"https:\/\/www.fast2sms.com\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;background:#e63329;color:#ffffff;font-size:20px;font-weight:700;padding:16px 52px;border-radius:40px;text-decoration:none;box-shadow:0 3px 8px rgba(0,0,0,0.22);\">Signup Now<\/a>\n<\/p>\n<p>Questions? Write to <a href=\"mailto:support@fast2sms.com\">support@fast2sms.com<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Webhooks explained in simple words: get SMS, OTP, WhatsApp and RCS delivery reports pushed to your server, with every placeholder and payload example.<\/p>\n","protected":false},"author":11,"featured_media":17120,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"SMS webhook","_yoast_wpseo_title":"How Webhooks Work: SMS, WhatsApp, OTP & RCS Reports | Fast2SMS","_yoast_wpseo_metadesc":"How webhooks work on Fast2SMS: SMS webhook setup with WhatsApp, OTP and RCS delivery reports, all placeholders, payload examples and retries.","footnotes":""},"categories":[4],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How Webhooks Work: SMS, WhatsApp, OTP &amp; RCS Reports | Fast2SMS<\/title>\n<meta name=\"description\" content=\"How webhooks work on Fast2SMS: SMS webhook setup with WhatsApp, OTP and RCS delivery reports, all placeholders, payload examples and retries.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How Webhooks Work: SMS, WhatsApp, OTP &amp; RCS Reports | Fast2SMS\" \/>\n<meta property=\"og:description\" content=\"How webhooks work on Fast2SMS: SMS webhook setup with WhatsApp, OTP and RCS delivery reports, all placeholders, payload examples and retries.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/\" \/>\n<meta property=\"og:site_name\" content=\"Fast2SMS\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Fast2SMS\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-27T04:51:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-27T04:57:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2026\/07\/webhook-flow.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Fast2SMS\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fast2sms\" \/>\n<meta name=\"twitter:site\" content=\"@fast2sms\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fast2SMS\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/\"},\"author\":{\"name\":\"Fast2SMS\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/#\/schema\/person\/9549639ed9c1998dbed435d88b9e70c9\"},\"headline\":\"How Webhooks Work: Real-Time Delivery Reports for SMS, WhatsApp, OTP and RCS\",\"datePublished\":\"2026-07-27T04:51:40+00:00\",\"dateModified\":\"2026-07-27T04:57:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/\"},\"wordCount\":1455,\"publisher\":{\"@id\":\"https:\/\/www.fast2sms.com\/help\/#organization\"},\"articleSection\":[\"API\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/\",\"url\":\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/\",\"name\":\"How Webhooks Work: SMS, WhatsApp, OTP & RCS Reports | Fast2SMS\",\"isPartOf\":{\"@id\":\"https:\/\/www.fast2sms.com\/help\/#website\"},\"datePublished\":\"2026-07-27T04:51:40+00:00\",\"dateModified\":\"2026-07-27T04:57:18+00:00\",\"description\":\"How webhooks work on Fast2SMS: SMS webhook setup with WhatsApp, OTP and RCS delivery reports, all placeholders, payload examples and retries.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.fast2sms.com\/help\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How Webhooks Work: Real-Time Delivery Reports for SMS, WhatsApp, OTP and RCS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/#website\",\"url\":\"https:\/\/www.fast2sms.com\/help\/\",\"name\":\"Fast2SMS\",\"description\":\"Help\",\"publisher\":{\"@id\":\"https:\/\/www.fast2sms.com\/help\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.fast2sms.com\/help\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/#organization\",\"name\":\"Fast2SMS\",\"url\":\"https:\/\/www.fast2sms.com\/help\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/Fast2SMS\/\",\"https:\/\/twitter.com\/fast2sms\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2021\/01\/Fast2SMS-logo.jpg\",\"contentUrl\":\"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2021\/01\/Fast2SMS-logo.jpg\",\"width\":210,\"height\":210,\"caption\":\"Fast2SMS\"},\"image\":{\"@id\":\"https:\/\/www.fast2sms.com\/help\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.fast2sms.com\/help\/#\/schema\/person\/9549639ed9c1998dbed435d88b9e70c9\",\"name\":\"Fast2SMS\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How Webhooks Work: SMS, WhatsApp, OTP & RCS Reports | Fast2SMS","description":"How webhooks work on Fast2SMS: SMS webhook setup with WhatsApp, OTP and RCS delivery reports, all placeholders, payload examples and retries.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/","og_locale":"en_US","og_type":"article","og_title":"How Webhooks Work: SMS, WhatsApp, OTP & RCS Reports | Fast2SMS","og_description":"How webhooks work on Fast2SMS: SMS webhook setup with WhatsApp, OTP and RCS delivery reports, all placeholders, payload examples and retries.","og_url":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/","og_site_name":"Fast2SMS","article_publisher":"https:\/\/www.facebook.com\/Fast2SMS\/","article_published_time":"2026-07-27T04:51:40+00:00","article_modified_time":"2026-07-27T04:57:18+00:00","og_image":[{"width":1600,"height":900,"url":"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2026\/07\/webhook-flow.png","type":"image\/png"}],"author":"Fast2SMS","twitter_card":"summary_large_image","twitter_creator":"@fast2sms","twitter_site":"@fast2sms","twitter_misc":{"Written by":"Fast2SMS","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/#article","isPartOf":{"@id":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/"},"author":{"name":"Fast2SMS","@id":"https:\/\/www.fast2sms.com\/help\/#\/schema\/person\/9549639ed9c1998dbed435d88b9e70c9"},"headline":"How Webhooks Work: Real-Time Delivery Reports for SMS, WhatsApp, OTP and RCS","datePublished":"2026-07-27T04:51:40+00:00","dateModified":"2026-07-27T04:57:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/"},"wordCount":1455,"publisher":{"@id":"https:\/\/www.fast2sms.com\/help\/#organization"},"articleSection":["API"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/","url":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/","name":"How Webhooks Work: SMS, WhatsApp, OTP & RCS Reports | Fast2SMS","isPartOf":{"@id":"https:\/\/www.fast2sms.com\/help\/#website"},"datePublished":"2026-07-27T04:51:40+00:00","dateModified":"2026-07-27T04:57:18+00:00","description":"How webhooks work on Fast2SMS: SMS webhook setup with WhatsApp, OTP and RCS delivery reports, all placeholders, payload examples and retries.","breadcrumb":{"@id":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.fast2sms.com\/help\/how-webhooks-work\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.fast2sms.com\/help\/"},{"@type":"ListItem","position":2,"name":"How Webhooks Work: Real-Time Delivery Reports for SMS, WhatsApp, OTP and RCS"}]},{"@type":"WebSite","@id":"https:\/\/www.fast2sms.com\/help\/#website","url":"https:\/\/www.fast2sms.com\/help\/","name":"Fast2SMS","description":"Help","publisher":{"@id":"https:\/\/www.fast2sms.com\/help\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.fast2sms.com\/help\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.fast2sms.com\/help\/#organization","name":"Fast2SMS","url":"https:\/\/www.fast2sms.com\/help\/","sameAs":["https:\/\/www.facebook.com\/Fast2SMS\/","https:\/\/twitter.com\/fast2sms"],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fast2sms.com\/help\/#\/schema\/logo\/image\/","url":"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2021\/01\/Fast2SMS-logo.jpg","contentUrl":"https:\/\/www.fast2sms.com\/help\/wp-content\/uploads\/2021\/01\/Fast2SMS-logo.jpg","width":210,"height":210,"caption":"Fast2SMS"},"image":{"@id":"https:\/\/www.fast2sms.com\/help\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.fast2sms.com\/help\/#\/schema\/person\/9549639ed9c1998dbed435d88b9e70c9","name":"Fast2SMS"}]}},"_links":{"self":[{"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/posts\/17125"}],"collection":[{"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/comments?post=17125"}],"version-history":[{"count":1,"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/posts\/17125\/revisions"}],"predecessor-version":[{"id":17126,"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/posts\/17125\/revisions\/17126"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/media\/17120"}],"wp:attachment":[{"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/media?parent=17125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/categories?post=17125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fast2sms.com\/help\/wp-json\/wp\/v2\/tags?post=17125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}