API Documentation

Complete guide to integrating with our communication APIs

Get Started

Introduction

Welcome to our Communication API documentation. This API provides a unified interface to send messages across multiple channels including RCS, SMS, Email, WhatsApp, and Voice.

Base URL

https://multichannel.insignsms.com/api/v1

Getting Started

To get started, you'll need an API key. Sign up for an account and generate your API key from the dashboard.

  1. Sign up for a developer account
  2. Verify your email address
  3. Generate your API key from the dashboard
  4. Start making requests to the API

Rate Limits

API requests are limited to 1000 requests per hour per API key. If you exceed this limit, you'll receive a 429 Too Many Requests response.

Quick Start

Test the API with this simple cURL request:

curl -X GET "https://multichannel.insignsms.com/v1/health" \
  -H "Authorization: Bearer YOUR_API_KEY"
API Status
RCS API: Operational
SMS API: Operational
Email API: Operational
WhatsApp API: Operational
Voice API: Operational

Authentication

All API requests must be authenticated using a Bearer token included in the Authorization header.

How to Authenticate

Include your API key in the Authorization header as a Bearer token:

GET /api/endpoint
Authorization: Bearer YOUR_API_KEY_HERE
Content-Type: application/json

Getting Your API Key

You can generate API keys from your account dashboard. We recommend using different keys for different environments (development, staging, production).

Keep your API keys secure! Do not expose them in client-side code or public repositories.
Code Examples
curl -X GET "https://multichannel.insignsms.com/v1/credit" \
  -H "Authorization: Bearer YOUR_API_KEY"
const axios = require('axios');

const response = await axios.get('https://multichannel.insignsms.com/v1/credit', {
  headers: {
    'Authorization': `Bearer YOUR_API_KEY`
  }
});
import requests

url = "https://multichannel.insignsms.com/v1/credit"
headers = {
    "Authorization": "Bearer YOUR_API_KEY"
}

response = requests.get(url, headers=headers)
print(response.json())
Response
{

  "username": "John Doe",
  "total_assigned": "1000",
  "used": "756"
  "available": "244"
}

Error Handling

The API uses conventional HTTP response codes to indicate the success or failure of an API request.

HTTP Status Codes

Code Description
200 OK - The request was successful
201 Created - Resource was successfully created
400 Bad Request - The request was invalid
401 Unauthorized - API key missing or invalid
403 Forbidden - You don't have permission
404 Not Found - The resource doesn't exist
429 Too Many Requests - Rate limit exceeded
500 Server Error - We had a problem with our server

Error Response Format

{
    "error": {
        "code": "invalid_request",
        "message": "The request was invalid",
        "details": {
            "param": "email",
            "reason": "invalid_format"
        }
    }
}

Create SMS Template

This endpoint allows you to create and save a new SMS template. Templates include details like template name, entity ID, template ID, content, and sender ID. Each template is associated with a user and cost is calculated automatically based on SMS parts.

HTTP Request

POST /api/v1/sms/storeTemplate

Request Parameters

Parameter Type Required Description
template_name String Yes Name of the SMS template (max 255 characters).
entity_id String Yes Entity ID assigned by DLT.
template_id String Yes Template ID assigned by DLT.
content String Yes Message body of the SMS. May include placeholders for personalization.
sender_id String Yes Sender ID (must exist in sms_header table).

Request Payload

{
  "template_name": "otp_alert",
  "entity_id": "1234567890",
  "template_id": "DLT12345",
  "content": "Hello { name }, your OTP is { otp }.",
  "sender_id": "ABCDEF"
}
Code Examples
curl -X POST 'https://multichannel.insignsms.com/api/v1/sms/storeTemplate' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "template_name": "otp_alert",
  "entity_id": "1234567890",
  "template_id": "DLT12345",
  "content": "Hello { name }, your OTP is { otp }.",
  "sender_id": "ABCDEF"
}'
const axios = require('axios');

const data = {
  template_name: "otp_alert",
  entity_id: "1234567890",
  template_id: "DLT12345",
  content: "Hello { name }, your OTP is { otp }.",
  sender_id: "ABCDEF"
};

axios.post('https://multichannel.insignsms.com/api/v1/sms/storeTemplate', data, {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  }
})
.then(res => console.log(res.data))
.catch(err => console.error('API Error:', err.response.data));
import requests
import json

url = "https://multichannel.insignsms.com/api/v1/sms/storeTemplate"
payload = json.dumps(
  "template_name": "otp_alert",
  "entity_id": "1234567890",
  "template_id": "DLT12345",
  "content": "Hello { name }, your OTP is { otp }. ",
  "sender_id": "ABCDEF"
})
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json'
}

response = requests.post(url, headers=headers, data=payload)
print(response.json())
Response
Success Response (201 Created)
{
  "success": true,
  "message": "Template created successfully.",
  "template_id": 158,
  "char_count": 154,
  "sms_units": 1,
  "template_status": "Pending for approval"
}

Response Fields:

  • template_id - The unique ID of the created template (use this ID when sending SMS via /api/v1/sms/sendMessage)
  • char_count - Total character count of the template content
  • sms_units - Number of SMS segments required (calculated based on message length and encoding)
  • template_status - Current approval status of the template (e.g., "Pending for approval", "Approved", "Rejected")

Error Response (422 Validation Failed)
{
  "success": false,
  "message": "The given data was invalid.",
  "errors": {
    "template_name": ["The template_name field is required."],
    "entity_id": ["The entity_id field is required."]
  }
}

List SMS Templates

This endpoint retrieves stored SMS templates for the authenticated user. You can fetch all templates or a specific template by passing its {id}. Templates include DLT details, cost, and status labels like Pending for approval, Approved, and Rejected.

HTTP Request

GET /api/v1/sms/templates/{id?}

{id} is optional. If provided → returns a single template for this user. If omitted → returns a list of the user's templates (latest first).

Response Fields

Field Type Description
template_id Integer Unique template ID
template_name String Name of the SMS template
entity_id String DLT Entity ID
dlt_template_id String DLT Template ID (same as template_id in DB)
sender_id String Registered SMS sender ID
status String Status label (Pending for approval, Approved, Rejected)
content String Template message body
char_count Integer Total characters in the template
sms_units Integer Number of SMS units billed for this content
encoding String Encoding type (e.g., GSM-7, UCS-2)
cost Number Estimated cost for one SMS using this template
has_url Boolean Indicates if the content contains a URL
created_at String (datetime) Template creation timestamp
updated_at String (datetime) Last update timestamp

Example Response – Single Template

{
  "success": true,
  "data": {
    "template_id": 1,
    "template_name": "otp_alert",
    "entity_id": "1234567890",
    "dlt_template_id": "DLT12345",
    "sender_id": "ABCDEF",
    "status": "Approved",
    "content": "Hello { name }, your OTP is { otp }.",
    "char_count": 32,
    "sms_units": 1,
    "encoding": "GSM-7",
    "cost": 0.25,
    "has_url": false,
    "created_at": "2025-01-01 10:00:00",
    "updated_at": "2025-01-01 10:00:00"
  }
}

Example Response – List

{
  "success": true,
  "data": [
    {
      "template_id": 2,
      "template_name": "promo_sms",
      "entity_id": "1234567890",
      "dlt_template_id": "DLT67890",
      "sender_id": "ABCDEF",
      "status": "Pending for approval",
      "content": "Big sale is live now!",
      "char_count": 25,
      "sms_units": 1,
      "encoding": "GSM-7",
      "cost": 0.25,
      "has_url": false,
      "created_at": "2025-01-02 09:00:00",
      "updated_at": "2025-01-02 09:00:00"
    }, {
            "template_id": 155,
            "template_name": "testing otp Api shreyash",
            "entity_id": "1234567890",
            "dlt_template_id": "1107171290275316198",
            "sender_id": "LFCSPL",
            "status": "Rejected",
            "content": "Dear {name}, your One Time Password (OTP) is {otp}. Please use this code to complete your verification. Do not share this OTP with anyone. This code is valid for a limited time only. Thank you.",
            "char_count": 205,
            "sms_units": 2,
            "encoding": "GSM-7",
            "cost": 4,
            "has_url": false,
            "created_at": "2025-12-24 12:31:31",
            "updated_at": "2025-12-24 12:38:33"
        },
        {
            "template_id": 154,
            "template_name": "testing otp Api shreyash",
            "entity_id": "1234567890",
            "dlt_template_id": "1107171290275316198",
            "sender_id": "LFCSPL",
            "status": "Pending for approval",
            "content": "Dear {name}, your One Time Password (OTP) is {otp}. Please use this code to complete your verification. Do not share this OTP with anyone. This code is valid for a limited time only. Thank you.",
            "char_count": 205,
            "sms_units": 2,
            "encoding": "GSM-7",
            "cost": 4,
            "has_url": false,
            "created_at": "2025-12-24 12:30:45",
            "updated_at": "2025-12-24 12:30:45"
        }
  ]
}
Code Examples
# List all SMS templates for the authenticated user
curl -X GET 'https://multichannel.insignsms.com/api/v1/sms/templates' \
--header 'Authorization: Bearer YOUR_API_KEY'

# Get single template by ID
curl -X GET 'https://multichannel.insignsms.com/api/v1/sms/templates/1' \
--header 'Authorization: Bearer YOUR_API_KEY'
const axios = require('axios');

// List all templates
axios.get('https://multichannel.insignsms.com/api/v1/sms/templates', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data));

// Get single template
axios.get('https://multichannel.insignsms.com/api/v1/sms/templates/1', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data));
import requests

headers = { "Authorization": "Bearer YOUR_API_KEY" }

# List all
res = requests.get("https://multichannel.insignsms.com/api/v1/sms/templates", headers=headers)
print(res.json())

# Single template
res = requests.get("https://multichannel.insignsms.com/api/v1/sms/templates/1", headers=headers)
print(res.json())
Error Response (Template Not Available)
{
  "success": false,
  "message": "Template not available for this user or does not exist."
}

Send SMS

This endpoint allows you to send SMS messages to one or more recipients. It supports both non-personalized (bulk) and personalized (customized per recipient) messages. Unicode messages (e.g., Hindi, Tamil) are also supported.

Note: Personalized messages use an XML-based API and support up to 100 recipients per request. Non-personalized: 300 recipients per request (POST); 200 recipients when using GET with comma-separated numbers.

HTTP Request

POST /api/v1/sms/sendMessage

GET is also supported for non-personalized only (see below).

Request Parameters (POST)

Parameter Type Description
template_id Integer Optional (recommended mode).
ID of the SMS template created via /api/v1/sms/storeTemplate. The template defines the sender ID and message content. If provided, senderid and message are ignored.
senderid String (max: 6) Optional (raw mode).
Registered sender ID used for sending SMS. Required if template_id is not provided.
message String (max: 1000) Optional (raw mode).
The message text to be sent. Supports placeholders (e.g., {name}). Required if template_id is not provided.
unicode Integer (0 or 1) 0 = English (default), 1 = Unicode (multi-language).
personalized Integer (0 or 1) 0 = Non-personalized (same message to all), 1 = Personalized (custom per recipient).
numbers Array Non-personalized: Array of phone numbers (10-digit format, max 300).
Personalized: Array of objects with number (10-digit) and dynamic fields matching template variables (max 100 recipients).

Example: [{"number": "9876543210", "name": "John", "otp": "123456"}]

GET Request (Non-Personalized Only)

The same endpoint accepts GET for non-personalized sends. Pass the API token in the URL; numbers must be comma-separated and limited to 200 recipients.

GET /api/v1/sms/sendMessage
Query Parameter Required Description
token or bearer_token Yes Your API token (replaces Authorization: Bearer header). URL-encode the token if it contains special characters (e.g. |%7C).
template_id No* Template ID. If provided, senderid and message are ignored.
senderid No* Sender ID (max 6 chars). Required if not using template_id.
message No* Message text. Required if not using template_id. URL-encode spaces (e.g. %20).
unicode No 0 (default) or 1.
numbers Yes Comma-separated list of phone numbers (e.g. 9326809409,9123456789,9876543210). Max 200 numbers.

* Either template_id or both senderid and message are required.

Example GET URL
https://multichannel.insignsms.com/api/v1/sms/sendMessage?token=YOUR_API_TOKEN&senderid=INSIGN&message=Hello%20world&numbers=9326809409,9123456789,9876543210
Example cURL (GET)
curl -X GET "https://multichannel.insignsms.com/api/v1/sms/sendMessage?token=YOUR_API_TOKEN&senderid=INSIGN&message=Hello%20world&numbers=9326809409,9123456789,9876543210"

Request Payload Examples (POST)

{
  "template_id": 123,
  "unicode": 0,
  "personalized": 0,
  "numbers": ["9876543210", "9123456780"]
}
{
  "template_id": 123,
  "unicode": 0,
  "personalized": 1,
  "numbers": [
    { "number": "9876543210", "name": "Sanjay", "otp": "123456" },
    { "number": "9123456780", "name": "Amit", "otp": "654321" }
  ]
}

Alternative (Raw Mode): If you don't want to use templates, you can send senderid and message directly instead of template_id:

{
  "senderid": "ABCDEF",
  "message": "Hello {name}, your OTP is {otp}.",
  "unicode": 0,
  "personalized": 1,
  "numbers": [
    { "number": "9876543210", "name": "Sanjay", "otp": "123456" },
    { "number": "9123456780", "name": "Amit", "otp": "654321" }
  ]
}
Code Examples
# GET (non-personalized only, token in URL, numbers comma-separated, max 200)
curl -X GET "https://multichannel.insignsms.com/api/v1/sms/sendMessage?token=YOUR_API_TOKEN&senderid=INSIGN&message=Hello%20world&numbers=9326809409,9123456789,9876543210"

# POST - Non-personalized (bulk send)
curl -X POST 'https://multichannel.insignsms.com/api/v1/sms/sendMessage' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "template_id": 123,
  "unicode": 0,
  "personalized": 0,
  "numbers": ["9876543210", "9123456780"]
}'

# POST - Personalized (custom per recipient)
curl -X POST 'https://multichannel.insignsms.com/api/v1/sms/sendMessage' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "template_id": 123,
  "unicode": 0,
  "personalized": 1,
  "numbers": [
    {"number": "9876543210", "name": "Sanjay", "otp": "123456"},
    {"number": "9123456780", "name": "Amit", "otp": "654321"}
  ]
}'
const axios = require('axios');

// Non-personalized (bulk send)
const data = {
  template_id: 123,
  unicode: 0,
  personalized: 0,
  numbers: ["9876543210", "9123456780"]
};

axios.post('https://multichannel.insignsms.com/api/v1/sms/sendMessage', data, {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  }
}).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error.response.data);
});

// Personalized (custom per recipient)
const personalizedData = {
  template_id: 123,
  unicode: 0,
  personalized: 1,
  numbers: [
    {number: "9876543210", name: "Sanjay", otp: "123456"},
    {number: "9123456780", name: "Amit", otp: "654321"}
  ]
};

axios.post('https://multichannel.insignsms.com/api/v1/sms/sendMessage', personalizedData, {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  }
}).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error.response.data);
});
import requests, json

url = "https://multichannel.insignsms.com/api/v1/sms/sendMessage"
headers = {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json'
}

# Non-personalized (bulk send)
payload = {
  "template_id": 123,
  "unicode": 0,
  "personalized": 0,
  "numbers": ["9876543210", "9123456780"]
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
print(response.json())

# Personalized (custom per recipient)
personalized_payload = {
  "template_id": 123,
  "unicode": 0,
  "personalized": 1,
  "numbers": [
    {"number": "9876543210", "name": "Sanjay", "otp": "123456"},
    {"number": "9123456780", "name": "Amit", "otp": "654321"}
  ]
}
response = requests.post(url, headers=headers, data=json.dumps(personalized_payload))
print(response.json())
Response
Success Response (200 OK) - Non-Personalized
{
  "success": true,
  "message": "Message submitted successfully.",
  "reference_id": "INSIGNTEST-251224132336-OTA5NDA="
}

Note: The reference_id (also known as gateway_ref_id) is a unique identifier for the SMS batch. Use this ID to retrieve delivery reports via the /api/v1/sms/reports/{gateway_ref_id} endpoint. Each message in the batch is stored individually in sms_logs with per-message cost, message_content, sms_units, and message_length.

Success Response (200 OK) - Personalized
{
  "success": true,
  "message": "Personalized messages submitted.",
  "reference_id": "INSIGNTEST-251224132336-OTA5NDA="
}

Note: In personalized mode, each recipient receives a customized message. All messages in a batch share the same reference_id. Individual message details (including personalized message_content and per-message cost) are stored in sms_logs. Use the reference_id to retrieve delivery reports via the /api/v1/sms/reports/{gateway_ref_id} endpoint.

Error Response (400) - Gateway Error
{
  "success": false,
  "code": "ERROR_CODE",
  "message": "Invalid sender ID or gateway error message."
}
Error Response (422) - Validation Error
{
  "success": false,
  "message": "Maximum 300 numbers allowed in non-personalized mode."
}
Error Response (422) - Personalized Validation
{
  "success": false,
  "message": "Maximum 100 recipients allowed in personalized mode."
}

SMS List Report

This endpoint retrieves the delivery report of a previously sent SMS batch. You must provide the gateway_ref_id (returned as reference_id when sending SMS) to fetch the associated logs for each recipient.

Note: Each SMS message is stored individually in the sms_logs table with per-message details including:

  • message_content - The actual message sent to each recipient
  • cost - Per-message cost calculated based on SMS units
  • sms_units - Number of SMS segments used
  • message_length - Character count of the message
  • status - Delivery status (submitted, delivered, failed)

HTTP Request

GET /api/v1/sms/reports/{gateway_ref_id}

Path Parameter

Parameter Type Description
gateway_ref_id String The unique reference ID returned by the SMS gateway when the message batch was submitted.

Example Request

curl -X GET 'https://multichannel.insignsms.com/api/v1/sms/reports/GATEWAY_REF_12345' \
--header 'Authorization: Bearer YOUR_API_KEY'
Response
Success Response (200 OK)
[
  {
    "number": "9876543210",
    "status": "submitted",
    "timespan": "2025-12-24T13:23:36+00:00"
  },
  {
    "number": "9123456780",
    "status": "delivered",
    "timespan": "2025-12-24T13:23:40+00:00"
  }
]

Note: Each SMS message is stored individually in sms_logs with per-message details including message_content, cost, sms_units, and message_length. The timespan field represents the last update timestamp in ISO-8601 format.

Error Response (404)
{
  "success": false,
  "message": "Report not found."
}

Create RCS Template

This endpoint allows you to create a new Rich Communication Services (RCS) template. Supported types include: plain text, standalone card, and carousel. Templates must be approved before use.

HTTP Request

POST /api/v1/storeTemplate

Request Parameters

Parameter Type Description
template_name String Unique name for the template.
template_type String Template type (plain_text, standalone, carousel).
data.content Object Main content object. Structure varies by template type.

Request Payload Examples (Plain Text - Without Personalization)

Note: Suggestions are optional for plain text templates. Maximum 4 CTA buttons allowed if suggestions are provided.

1. Plain Text Without CTA
{
  "template_name": "welcome_message",
  "template_type": "plain_text",
  "data": {
    "content": {
      "plainText": "Welcome to our service! We're here to help you."
    }
  }
}
2. Plain Text With CTA Buttons
{
  "template_name": "welcome_message_cta",
  "template_type": "plain_text",
  "data": {
    "content": {
      "plainText": "Welcome to our service! Click below to get started.",
      "suggestions": [
        {
          "action": {
            "plainText": "Visit Website",
            "openUrl": {
              "url": "https://example.com"
            }
          }
        },
        {
          "reply": {
            "plainText": "Get Help",
            "postBack": {
              "data": "help"
            }
          }
        }
      ]
    }
  }
}

Request Payload Examples (Plain Text - With Personalization)

Note: Use variables like {{name}}, {{place}}, {{number}}, {{email}}, {{phone}} for personalization. When sending messages, provide personalization data to replace these variables.

1. Plain Text With Personalization (Without CTA)
{
  "template_name": "welcome_message_personalized",
  "template_type": "plain_text",
  "data": {
    "content": {
      "plainText": "Hello {{name}}, welcome to our service! Your phone number is {{phone}} and email is {{email}}."
    }
  }
}
2. Plain Text With Personalization (With CTA)
{
  "template_name": "welcome_message_personalized_cta",
  "template_type": "plain_text",
  "data": {
    "content": {
      "plainText": "Hello {{name}}, welcome to our service from {{place}}! Your phone number is {{number}}.",
      "suggestions": [
        {
          "action": {
            "plainText": "Visit Website",
            "openUrl": {
              "url": "https://example.com"
            }
          }
        },
        {
          "reply": {
            "plainText": "Get Help",
            "postBack": {
              "data": "help"
            }
          }
        }
      ]
    }
  }
}

Request Payload Examples (Standalone - Without Personalization)

Note: Suggestions are required for standalone templates. Maximum 4 CTA buttons allowed per card.

1. Standalone with URL Action
{
  "template_name": "product_card",
  "template_type": "standalone",
  "data": {
    "content": {
      "richCardDetails": {
        "standalone": {
          "cardOrientation": "VERTICAL",
          "content": {
            "cardMedia": {
              "mediaHeight": "MEDIUM",
              "contentInfo": {
                "fileUrl": "https://example.com/image.jpg",
                "forceRefresh": false
              }
            },
            "cardTitle": "Special Offer",
            "cardDescription": "Get 50% off on all products today!",
            "suggestions": [
              {
                "action": {
                  "plainText": "Visit Now",
                  "postBack": {
                    "data": "visit_now_election24"
                  },
                  "openUrl": {
                    "url": "https://elections24.eci.gov.in/"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
2. Standalone with Reply Suggestion
{
  "template_name": "product_card_reply",
  "template_type": "standalone",
  "data": {
    "content": {
      "richCardDetails": {
        "standalone": {
          "cardOrientation": "VERTICAL",
          "content": {
            "cardMedia": {
              "mediaHeight": "MEDIUM",
              "contentInfo": {
                "fileUrl": "https://example.com/image.jpg",
                "forceRefresh": false
              }
            },
            "cardTitle": "Special Offer",
            "cardDescription": "Get 50% off on all products today!",
            "suggestions": [
              {
                "reply": {
                  "plainText": "Yes, Absolutely",
                  "postBack": {
                    "data": "suggestion_1"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
3. Standalone with Calendar Event Action
{
  "template_name": "calendar_event_card",
  "template_type": "standalone",
  "data": {
    "content": {
      "richCardDetails": {
        "standalone": {
          "cardOrientation": "VERTICAL",
          "content": {
            "cardMedia": {
              "mediaHeight": "MEDIUM",
              "contentInfo": {
                "fileUrl": "https://example.com/image.jpg",
                "forceRefresh": false
              }
            },
            "cardTitle": "RCS Seminar",
            "cardDescription": "Join us for an informative session",
            "suggestions": [
              {
                "action": {
                  "plainText": "Mark Your Calendar",
                  "postBack": {
                    "data": "SA1L1C1"
                  },
                  "createCalendarEvent": {
                    "startTime": "2023-06-26T15:01:23Z",
                    "endTime": "2023-06-26T18:01:23Z",
                    "title": "RCS Seminar",
                    "description": "Session 1 of 4"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
4. Standalone with Location Action
{
  "template_name": "location_card",
  "template_type": "standalone",
  "data": {
    "content": {
      "richCardDetails": {
        "standalone": {
          "cardOrientation": "VERTICAL",
          "content": {
            "cardMedia": {
              "mediaHeight": "MEDIUM",
              "contentInfo": {
                "fileUrl": "https://example.com/image.jpg",
                "forceRefresh": false
              }
            },
            "cardTitle": "Visit Our Store",
            "cardDescription": "Find us at our location",
            "suggestions": [
              {
                "action": {
                  "plainText": "Visit Now",
                  "postBack": {
                    "data": "SA1L1C1"
                  },
                  "showLocation": {
                    "coordinAtes": {
                      "latitude": 21.5937,
                      "longitude": 78.9629
                    },
                    "label": "Label - Show Location"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
5. Standalone with Dialer Action
{
  "template_name": "dialer_card",
  "template_type": "standalone",
  "data": {
    "content": {
      "richCardDetails": {
        "standalone": {
          "cardOrientation": "VERTICAL",
          "content": {
            "cardMedia": {
              "mediaHeight": "MEDIUM",
              "contentInfo": {
                "fileUrl": "https://example.com/image.jpg",
                "forceRefresh": false
              }
            },
            "cardTitle": "Call Us Now",
            "cardDescription": "Speak with our support team",
            "suggestions": [
              {
                "action": {
                  "plainText": "Dial Now",
                  "postBack": {
                    "data": "SA1L1C1"
                  },
                  "dialerAction": {
                    "phoneNumber": "+918779619155"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
6. Standalone with Multiple CTA Buttons (Max 4)
{
  "template_name": "multi_cta_card",
  "template_type": "standalone",
  "data": {
    "content": {
      "richCardDetails": {
        "standalone": {
          "cardOrientation": "VERTICAL",
          "content": {
            "cardMedia": {
              "mediaHeight": "MEDIUM",
              "contentInfo": {
                "fileUrl": "https://example.com/image.jpg",
                "forceRefresh": false
              }
            },
            "cardTitle": "Special Offer",
            "cardDescription": "Get 50% off on all products today!",
            "suggestions": [
              {
                "action": {
                  "plainText": "Visit Now",
                  "postBack": {
                    "data": "visit_now"
                  },
                  "openUrl": {
                    "url": "https://example.com/"
                  }
                }
              },
              {
                "reply": {
                  "plainText": "Yes, Absolutely",
                  "postBack": {
                    "data": "suggestion_1"
                  }
                }
              },
              {
                "action": {
                  "plainText": "Dial Now",
                  "postBack": {
                    "data": "dial_action"
                  },
                  "dialerAction": {
                    "phoneNumber": "+918779619155"
                  }
                }
              },
              {
                "action": {
                  "plainText": "Show Location",
                  "postBack": {
                    "data": "location_action"
                  },
                  "showLocation": {
                    "coordinAtes": {
                      "latitude": 21.5937,
                      "longitude": 78.9629
                    },
                    "label": "Our Store Location"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}

Request Payload Examples (Standalone - With Personalization)

Note: Use variables like {{name}}, {{place}}, {{number}}, {{email}} for personalization. Suggestions are required for standalone templates. When sending messages, provide personalization data to replace these variables.

Standalone with Personalization
{
  "template_name": "product_card_personalized",
  "template_type": "standalone",
  "data": {
    "content": {
      "richCardDetails": {
        "standalone": {
          "cardOrientation": "VERTICAL",
          "content": {
            "cardMedia": {
              "mediaHeight": "MEDIUM",
              "contentInfo": {
                "fileUrl": "https://example.com/image.jpg",
                "forceRefresh": false
              }
            },
            "cardTitle": "Special Offer for {{name}}",
            "cardDescription": "Hello {{name}} from {{place}}, get 50% off! Your phone number is {{number}} and email is {{email}}.",
            "suggestions": [
              {
                "action": {
                  "plainText": "Visit Now",
                  "postBack": {
                    "data": "visit_now"
                  },
                  "openUrl": {
                    "url": "https://example.com/"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}

Request Payload Examples (Carousel - Without Personalization)

Note: Suggestions are required for each carousel card. Maximum 8 cards allowed per carousel. Maximum 4 CTA buttons allowed per card.

1. Basic Carousel with URL Actions
{
  "template_name": "product_carousel",
  "template_type": "carousel",
  "data": {
    "content": {
      "richCardDetails": {
        "carousel": {
          "cardWidth": "MEDIUM_WIDTH",
          "contents": [
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 1",
              "cardDescription": "Description for product 1",
              "suggestions": [
                {
                  "action": {
                    "plainText": "Visit Now",
                    "openUrl": {
                      "url": "https://example.com"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 2",
              "cardDescription": "Description for product 2",
              "suggestions": [
                {
                  "action": {
                    "plainText": "Visit Now",
                    "openUrl": {
                      "url": "https://example.com"
                    }
                  }
                }
              ]
            }
          ]
        }
      }
    }
  }
}
2. Carousel with Multiple CTA Buttons (Max 4 per card)
{
  "template_name": "multi_cta_carousel",
  "template_type": "carousel",
  "data": {
    "content": {
      "richCardDetails": {
        "carousel": {
          "cardWidth": "MEDIUM_WIDTH",
          "contents": [
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Special Offer",
              "cardDescription": "Get 50% off on all products today!",
              "suggestions": [
                {
                  "action": {
                    "plainText": "Visit Now",
                    "openUrl": {
                      "url": "https://example.com/"
                    }
                  }
                },
                {
                  "reply": {
                    "plainText": "Yes, Absolutely",
                    "postBack": {
                      "data": "suggestion_1"
                    }
                  }
                },
                {
                  "action": {
                    "plainText": "Dial Now",
                    "dialerAction": {
                      "phoneNumber": "+918779619155"
                    }
                  }
                },
                {
                  "action": {
                    "plainText": "Show Location",
                    "showLocation": {
                      "coordinAtes": {
                        "latitude": 21.5937,
                        "longitude": 78.9629
                      },
                      "label": "Our Store Location"
                    }
                  }
                }
              ]
            }
          ]
        }
      }
    }
  }
}
3. Carousel with Maximum 8 Cards
{
  "template_name": "max_cards_carousel",
  "template_type": "carousel",
  "data": {
    "content": {
      "richCardDetails": {
        "carousel": {
          "cardWidth": "MEDIUM_WIDTH",
          "contents": [
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 1",
              "cardDescription": "Description for product 1",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product1"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 2",
              "cardDescription": "Description for product 2",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product2"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 3",
              "cardDescription": "Description for product 3",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product3"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 4",
              "cardDescription": "Description for product 4",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product4"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 5",
              "cardDescription": "Description for product 5",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product5"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 6",
              "cardDescription": "Description for product 6",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product6"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 7",
              "cardDescription": "Description for product 7",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product7"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 8",
              "cardDescription": "Description for product 8",
              "suggestions": [
                {
                  "action": {
                    "plainText": "View Details",
                    "openUrl": {
                      "url": "https://example.com/product8"
                    }
                  }
                }
              ]
            }
          ]
        }
      }
    }
  }
}

Request Payload Examples (Carousel - With Personalization)

Note: Use variables like {{name}}, {{place}}, {{number}}, {{email}}, {{phone}}, {{product}} for personalization. Suggestions are required for each carousel card. Maximum 8 cards allowed per carousel. When sending messages, provide personalization data to replace these variables.

Carousel with Personalization
{
  "template_name": "product_carousel_personalized",
  "template_type": "carousel",
  "data": {
    "content": {
      "richCardDetails": {
        "carousel": {
          "cardWidth": "MEDIUM_WIDTH",
          "contents": [
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 1",
              "cardDescription": "{{name}} form {{place}} and phone number is {{number}} with {{email}}",
              "suggestions": [
                {
                  "action": {
                    "plainText": "Visit Now",
                    "openUrl": {
                      "url": "https://example.com"
                    }
                  }
                }
              ]
            },
            {
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://www.wikihow.com/images/2/22/Get-the-URL-for-Pictures-Step-30-Version-2.jpg"
                }
              },
              "cardTitle": "Product 2",
              "cardDescription": "{{phone}} Description {{name}} for {{product}} 2",
              "suggestions": [
                {
                  "action": {
                    "plainText": "Visit Now",
                    "openUrl": {
                      "url": "https://example.com"
                    }
                  }
                }
              ]
            }
          ]
        }
      }
    }
  }
}
Code Examples
curl -X POST 'https://multichannel.insignsms.com/api/v1/storeTemplate' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "template_name": "welcome_text_01",
  "template_type": "plain_text",
  "data": {
    "content": {
      "plainText": "Welcome to our service! Enjoy your experience."
    }
  }
}'
const axios = require('axios');
const payload = {
  template_name: "welcome_text_01",
  template_type: "plain_text",
  data: {
    content: {
      plainText: "Welcome to our service! Enjoy your experience."
    }
  }
};
axios.post('https://multichannel.insignsms.com/api/v1/storeTemplate', payload, {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response.data));
import requests, json

url = "https://multichannel.insignsms.com/api/v1/storeTemplate"
payload = {
  "template_name": "welcome_text_01",
  "template_type": "plain_text",
  "data": {
    "content": {
      "plainText": "Welcome to our service! Enjoy your experience."
    }
  }
}
headers = {
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json"
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
print(response.json())
Response
Success Response (200 OK)
{
  "success": true,
  "message": "Template stored successfully",
  "template_id": 42
}
Error Response (400)
{
  "success": false,
  "message": "Invalid template structure. Missing required fields."
}

List Templates

This endpoint retrieves stored Rich Communication Services (RCS) templates. You can fetch all templates or a specific template by passing its {id}. Supported types include plain_text, standalone, and carousel.

HTTP Request

GET /api/v1/rcs/templates/{id?}

{id} is optional. If provided → returns single template. If omitted → returns list of templates.

Response Fields

Field Type Description
template_id Integer Unique template ID
template_name String Name of the template
template_type String Type of template (plain_text, standalone, carousel)
status String Status (pending, approved, rejected)
rejected_reason String Reason if template is rejected (only for status = rejected)
data.content Object Template payload content (differs by type)

Example Response – Plain Text

{
  "success": true,
  "data": {
    "template_id": 101,
    "template_name": "welcome_msg",
    "template_type": "plain_text",
    "status": "approved",
    "data": {
      "content": {
        "plainText": "Hello {{ name }}, welcome aboard!",
        "suggestions": [
          {
            "action": {
              "plainText": "ssn",
              "openUrl": {
                "url": "https://example.com"
              }
            }
          },
          {
            "reply": {
              "plainText": "Thanks",
              "postBack": {
                "data": "thanks"
              }
            }
          }
        ]
      }
    }
  }
}

Example Response – Standalone

{
  "success": true,
  "data": {
    "template_id": 102,
    "template_name": "promo_card",
    "template_type": "standalone",
    "status": "approved",
    "data": {
      "content": {
        "richCardDetails": {
          "standalone": {
            "cardOrientation": "VERTICAL",
            "content": {
              "cardTitle": "Big Sale!",
              "cardDescription": "Up to 70% off electronics.",
              "cardMedia": {
                "mediaHeight": "MEDIUM",
                "contentInfo": {
                  "fileUrl": "https://example.com/sale.png"
                }
              },
              "suggestions": [
                {
                  "action": {
                    "plainText": "ssn",
                    "openUrl": {
                      "url": "https://example.com"
                    }
                  }
                },
                {
                  "reply": {
                    "plainText": "Shop Now",
                    "postBack": {
                      "data": "shop"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}

Example Response – Carousel

{
  "success": true,
  "data": {
    "template_id": 103,
    "template_name": "product_carousel",
    "template_type": "carousel",
    "status": "approved",
    "data": {
      "content": {
        "richCardDetails": {
          "carousel": {
            "cardWidth": "MEDIUM",
            "contents": [
              {
                "cardTitle": "Laptop",
                "cardDescription": "Powerful and portable.",
                "cardMedia": {
                  "mediaHeight": "MEDIUM",
                  "contentInfo": {
                    "fileUrl": "https://example.com/laptop.png"
                  }
                },
                "suggestions": [
                  {
                    "action": {
                      "plainText": "ssn",
                      "openUrl": {
                        "url": "https://example.com"
                      }
                    }
                  }
                ]
              },
              {
                "cardTitle": "Smartphone",
                "cardDescription": "Latest Android device.",
                "cardMedia": {
                  "mediaHeight": "MEDIUM",
                  "contentInfo": {
                    "fileUrl": "https://example.com/phone.png"
                  }
                },
                "suggestions": [
                  {
                    "action": {
                      "plainText": "ssn",
                      "openUrl": {
                        "url": "https://example.com"
                      }
                    }
                  }
                ]
              }
            ]
          }
        }
      }
    }
  }
}
Code Examples
# List all templates
curl -X GET 'https://multichannel.insignsms.com/api/v1/rcs/templates' \
--header 'Authorization: Bearer YOUR_API_KEY'

# Get single template by ID
curl -X GET 'https://multichannel.insignsms.com/api/v1/rcs/templates/102' \
--header 'Authorization: Bearer YOUR_API_KEY'
const axios = require('axios');

// List all templates
axios.get('https://multichannel.insignsms.com/api/v1/rcs/templates', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data));

// Get single template
axios.get('https://multichannel.insignsms.com/api/v1/rcs/templates/102', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data));
import requests

headers = { "Authorization": "Bearer YOUR_API_KEY" }

# List all
res = requests.get("https://multichannel.insignsms.com/api/v1/rcs/templates", headers=headers)
print(res.json())

# Single template
res = requests.get("https://multichannel.insignsms.com/api/v1/rcs/templates/102", headers=headers)
print(res.json())
Error Response
{
  "success": false,
  "message": "Template not found"
}

Send RCS Message

This endpoint allows you to send an RCS message using an approved template. Messages can be sent to multiple contacts (up to 50 numbers per request). The API supports personalization using template variables (e.g., {{name}}, {{email}}) that are replaced with actual values per recipient. When using personalization, only 1 contact is allowed per request.

HTTP Request

POST /api/v1/rcs/sendMessage

Request Parameters

Parameter Type Description
templateId Integer ID of the approved RCS template to use.
contacts Array[String] List of recipient mobile numbers (10-digit format). Max 50 when personalization is not provided, Max 1 when personalization is provided.
personalization Array[Object] Optional. Array of personalization objects (one per contact). Each object contains key-value pairs where keys match template variables (e.g., {{name}}, {{email}}). When provided, exactly 1 contact is required.

Personalization

Personalization allows you to customize message content per recipient using template variables. Variables in your template should use double curly braces format: {{variableName}}.

  • Template Variables: Use {{name}}, {{email}}, {{amount}}, or any custom variable names in your template content.
  • Supported Fields: Personalization works in plainText (Type 1), cardTitle and cardDescription (Type 2), and carousel card titles/descriptions (Type 3).
  • Limitation: When using personalization, you can only send to 1 contact per request.

Request Payload

Non-Personalized (Bulk Send)

{
    "templateId": 123,
    "contacts": ["9876543210", "9123456780"]
}

Personalized (Single Contact)

{
    "templateId": 123,
    "contacts": ["9876543210"],
    "personalization": [
        {
            "name": "John Doe",
            "email": "john@example.com",
            "amount": "₹1,500"
        }
    ]
}
Code Examples
# Non-personalized (bulk send)
curl -X POST "https://multichannel.insignsms.com/api/v1/rcs/sendMessage" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "templateId": 123,
  "contacts": ["9876543210", "9123456780"]
}'

# Personalized (single contact)
curl -X POST "https://multichannel.insignsms.com/api/v1/rcs/sendMessage" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "templateId": 123,
  "contacts": ["9876543210"],
  "personalization": [{
    "name": "John Doe",
    "email": "john@example.com"
  }]
}'
const axios = require("axios");

// Non-personalized (bulk send)
axios.post("https://multichannel.insignsms.com/api/v1/rcs/sendMessage", {
  templateId: 123,
  contacts: ["9876543210", "9123456780"]
}, {
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  }
}).then(res => {
  console.log(res.data);
}).catch(err => {
  console.error("API Error:", err.response.data);
});

// Personalized (single contact)
axios.post("https://multichannel.insignsms.com/api/v1/rcs/sendMessage", {
  templateId: 123,
  contacts: ["9876543210"],
  personalization: [{
    name: "John Doe",
    email: "john@example.com",
    amount: "₹1,500"
  }]
}, {
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  }
}).then(res => {
  console.log(res.data);
}).catch(err => {
  console.error("API Error:", err.response.data);
});
import requests
import json

url = "https://multichannel.insignsms.com/api/v1/rcs/sendMessage"
headers = {
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json"
}

# Non-personalized (bulk send)
payload = {
  "templateId": 123,
  "contacts": ["9876543210", "9123456780"]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())

# Personalized (single contact)
payload = {
  "templateId": 123,
  "contacts": ["9876543210"],
  "personalization": [{
    "name": "John Doe",
    "email": "john@example.com",
    "amount": "₹1,500"
  }]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
Response
Success Response (202 Accepted)
{
    "status": "accepted",
    "referenceId": "c6b9d8e4-12f3-4b9c-9f8a-abcdef123456"
}
Error Response (422)
{
    "errors": {
        "contacts": [
            "Each contact must be a valid 10-digit number."
        ]
    }
}
Personalization Error (422)
{
    "errors": {
        "contacts": [
            "When personalization is provided, only 1 contact is allowed per request."
        ],
        "personalization": [
            "When personalization is provided, exactly 1 contact is required."
        ]
    }
}

Create Domain

This endpoint allows you to add and register a new domain for sending emails. You must provide a valid domain name and an envelope name.

HTTP Request

POST /api/v1/email/domain

Request Parameters

Parameter Type Description
domain String The domain name you want to register (e.g., "example.com").
envelopeName String The envelope name to be used for the domain (e.g., "noreply").

Request Payload

{
  "domain": "example.com",
  "envelopeName": "noreply"
}
Code Example (cURL)
curl -X POST "https://multichannel.insignsms.com/api/v1/email/domain" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "domain": "example.com",
  "envelopeName": "noreply"
}'
Response
Success Response (201 Created)
{
    "status": "success",
    "message": "Domain added successfully.",
    "data": {
        "domain_id": "175678",
        "domain": "example.com",
        "envelope_name": "noreply",
        "opentrack": 1,
        "clicktrack": 1,
        "unsubscribe": 1,
        "dkim": 0,
        "custom_envelope": 0,
        "inbound": 0,
        "status": "success",
        "updated_at": "2025-09-15T11:01:48.000000Z",
        "created_at": "2025-09-15T11:01:48.000000Z",
        "id": 32
    }
}
Error: Domain Taken (422 Unprocessable Content)
{
    "message": "The domain has already been taken.",
    "errors": {
        "domain": [
            "The domain has already been taken."
        ]
    }
}
Error: Invalid Domain (400 Bad Request)
{
    "status": "error",
    "message": "Domain creation failed: Invalid Domain"
}

Fetch Domain DNS Records

This endpoint retrieves the required DNS records (DKIM, Custom Envelope, Inbound) for a specific domain that you have registered.

HTTP Request

GET /api/v1/email/domain/dns/{domain}

Path Parameters

Parameter Type Description
domain String The domain name for which to fetch DNS records (e.g., "example.com").
Code Example (cURL)
curl -X GET "https://multichannel.insignsms.com/api/v1/email/domain/dns/example.com" \
--header "Authorization: Bearer YOUR_API_KEY"
Response
Success Response (200 OK)
{
    "status": true,
    "data": [
        {
            "signature": "dkim",
            "type": "CNAME",
            "host_name": "nc2048._domainkey.example.com",
            "required_value": "dkim2048.ind.netcorecloud.net",
            "current_value": "",
            "valid": 0
        },
        {
            "signature": "custom_envelope",
            "type": "CNAME",
            "host_name": "noreply.example.com",
            "required_value": "eapi.sslind.netcorecloud.net",
            "current_value": "",
            "valid": 0
        },
        {
            "signature": "inbound",
            "type": "CNAME",
            "host_name": "inbound.example.com",
            "required_value": "inbound.eapi.ind.netcorecloud.net",
            "current_value": "",
            "valid": 0
        }
    ]
}
Error: Invalid Domain (400 Bad Request)
{
    "status": false,
    "message": "Failed to fetch domain DNS records",
    "data": "{\"data\":\"Invalid domain format or check tld\",\"status\":\"error\"}"
}
Error: Route Not Found (404 Not Found)
{
    "message": "The route api/v1/email/domain/dns could not be found."
}

Get Domain Status

This endpoint retrieves a list of your domains based on their verification status.

HTTP Request

GET /api/v1/email/domain/status/{status}

Path Parameters

Parameter Type Description
status Integer A numeric code representing the domain status:
  • 0 - Verification Pending
  • 1 - Questionnaire Pending
  • 2 - Under Review
  • 3 - Not Suitable
  • 4 - Active
  • 5 - All Domains
Code Example (cURL)
curl -X GET "https://multichannel.insignsms.com/api/v1/email/domain/status/5" \
--header "Authorization: Bearer YOUR_API_KEY"
Response
Success Response (200 OK)
{
    "success": true,
    "status": "5",
    "domains": [
        {
            "domid": 175678,
            "spf": 0,
            "dkim": 0,
            "domain": "example.com",
            "status": "Upload SPF/DKIM for Master domain or CNAME in case of subdomain"
        },
        {
            "domid": 165122,
            "spf": 1,
            "dkim": 1,
            "domain": "sofftsolution.tech",
            "status": "Approved"
        }
    ]
}
Empty Response (200 OK)

Returned if an invalid status code is passed.

{
    "success": true,
    "status": "6",
    "domains": []
}

Delete Domain

This endpoint allows you to delete a registered domain from your account.

HTTP Request

DELETE /api/v1/email/domain/delete/{domain}

Path Parameters

Parameter Type Description
domain String The domain name to be deleted (e.g., "example.com").
Code Example (cURL)
curl -X DELETE "https://multichannel.insignsms.com/api/v1/email/domain/delete/example.com" \
--header "Authorization: Bearer YOUR_API_KEY"
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Domain deleted successfully.",
    "domain": "example.com"
}
Error Response (400 Bad Request)
{
    "success": false,
    "message": "Failed to delete domain"
}

Create Email Template

This endpoint allows you to create a reusable email template. You must provide a template name and the HTML content.

HTTP Request

POST /api/v1/email/template

Request Parameters

Parameter Type Description
template_name String The name of the template.
type String The type of content, must be "html".
code_content String The HTML body of the template. Use placeholders like [%NAME%] for dynamic data.

Request Payload

{
  "template_name": "Welcome Email",
  "type": "html",
  "code_content": "<h1>Welcome [%NAME%]!</h1><p>Your code is: [%CODE%]</p>"
}
Code Example (cURL)
curl -X POST "https://multichannel.insignsms.com/api/v1/email/template" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "template_name": "Welcome Email",
  "type": "html",
  "code_content": "<h1>Welcome [%NAME%]!</h1><p>Your code is: [%CODE%]</p>"
}'
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Template saved successfully",
    "id": 185,
    "type": "html"
}
Error: Validation (422 Unprocessable Content)
{
    "message": "The editor content field is required.",
    "errors": {
        "editor_content": [
            "The editor content field is required."
        ]
    }
}

List all Templates

This endpoint retrieves a list of all email templates created under your account.

HTTP Request

GET /api/v1/email/listTemplates

Response Fields

Field Description
id The unique identifier for the template.
template_name The name of the template.
content The HTML content of the template.
status The status of the template (e.g., 1 for active).
Code Example (cURL)
curl -X GET "https://multichannel.insignsms.com/api/v1/email/listTemplates" \
--header "Authorization: Bearer YOUR_API_KEY"
Response
Success Response (200 OK)
{
  "success": true,
  "count": 3,
  "templates": [
    {
      "id": 185,
      "template_name": "Welcome Email",
      "content": "<h1>Welcome [%NAME%]!</h1><p>Your code is: [%CODE%]</p>",
      "status": 1,
      "created_at": "2025-09-15T12:25:02.000000Z"
    },
    {
      "id": 184,
      "template_name": "Password Reset",
      "content": "Your password reset link is <a href='[%LINK%]'>here</a>.",
      "status": 1,
      "created_at": "2025-09-14T10:15:00.000000Z"
    }
  ]
}

List Specific Template

This endpoint retrieves a specific email template by its ID.

HTTP Request

GET /api/v1/email/listTemplates/{id}

Path Parameters

Parameter Type Description
id Integer The unique identifier for the template.
Code Example (cURL)
curl -X GET "https://multichannel.insignsms.com/api/v1/email/listTemplates/185" \
--header "Authorization: Bearer YOUR_API_KEY"
Response
Success Response (200 OK)
{
    "success": true,
    "count": 1,
    "templates": [
        {
            "id": 185,
            "template_name": "Welcome Email",
            "user_id": 17,
            "content": "<h1>Welcome [%NAME%]!</h1><p>Your code is: [%CODE%]</p>",
            "variables": null,
            "status": 1,
            "type": 3,
            "created_at": "2025-09-15T12:25:02.000000Z",
            "updated_at": "2025-09-15T12:25:02.000000Z"
        }
    ]
}
Error: Not Found (404 Not Found)
{
    "success": false,
    "message": "Template not found"
}

Delete Template

This endpoint allows you to delete a specific email template by its ID.

HTTP Request

DELETE /api/v1/email/template/delete/{id}

Path Parameters

Parameter Type Description
id Integer The unique identifier of the template to be deleted.
Code Example (cURL)
curl -X DELETE "https://multichannel.insignsms.com/api/v1/email/template/delete/184" \
--header "Authorization: Bearer YOUR_API_KEY"
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Template deleted successfully",
    "id": 184
}
Error: Not Found (404 Not Found)
{
    "success": false,
    "message": "Template not found"
}

Simple Email Send

This endpoint allows you to send a single email. You can specify the recipient, subject, content, and sender details.

HTTP Request

POST /api/v1/email/sendEmail

Request Parameters

Parameter Type Description
to String Recipient's email address.
subject String The subject of the email.
content_string String The HTML or plain text content of the email.
type String Content type. Can be 'html' or 'text'.
from_email String The sender's email address.
from_name String The sender's name.

Request Payload

{
    "to": "user@example.com",
    "subject": " Test Email",
    "content_string": "<h1>Team Update</h1><p>Important information for the team.</p>",
    "type": "html",
    "from_email": "noreply@yourdomain.com",
    "from_name": "your Company"
}
Code Examples
curl -X POST "https://multichannel.insignsms.com/api/v1/email/sendEmail" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "to": "user@example.com",
  "subject": " Test Email",
  "content_string": "<h1>Team Update</h1><p>Important information for the team.</p>",
  "type": "html",
  "from_email": "noreply@yourdomain.com",
  "from_name": "Your Company"
}'
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Email Sent Successfully",
    "data": {
        "message_id": "a2e426f161008d899b4f21eebca4c3d3"
    }
}

Rich Email with Personalizations

This endpoint provides advanced options for sending emails, including per-recipient personalization using attributes, using a pre-defined template ID, and attaching files.

HTTP Request

POST /api/v1/email/sendEmail

Request Parameters

Parameter Type Description
from Object An object containing the sender's email and name.
subject String The subject of the email. Required if not using a template.
content Array An array of content objects. Required if not using template_id. Each object has a type ('html' or 'text') and a value.
template_id Integer The ID of a pre-defined email template. Use this instead of content to send a template.
personalizations Array An array of objects, each defining a set of recipients and their specific attributes for personalization.
personalizations[].to Array An array of recipient objects, each with an email.
personalizations[].attributes Object A key-value map where keys are placeholders in your content (e.g., [%NAME%]) and values are the data to substitute.
attachments Array Optional. An array of attachment objects.
attachments[].name String The filename of the attachment (e.g., "invoice.pdf").
attachments[].content String Base64-encoded content of the file.
settings Object Optional settings for the email send.
settings.open_track Boolean Set to true to enable open tracking.
Code Example (cURL)
curl -X POST "https://multichannel.insignsms.com/api/v1/email/sendEmail" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "from": {"email": "info@example.com", "name": "Your Company"},
    "subject": "Testing Email",
    "personalizations": [{"to": [{"email": "recipient@example.com"}]}],
    "content": [{"type": "html", "value": "<p>Your email content here.</p>"}]
}'
Request Payload Examples
1. Personalized Email
{
    "from": {
        "email": "example.com",
        "name": "Sofft Solution"
    },
    "subject": "Testing Email",
    "content": [
        {
            "type": "html",
            "value": "<h1>Hello, [%NAME%]!</h1><p>Your test is successful.</p>"
        }
    ],
    "personalizations": [
        {
            "attributes": {
                "NAME": "User One"
            },
            "to": [
                { "email": "example@gmail.com" }
            ]
        }
    ],
    "settings": { "open_track": true }
}
2. Payload with Template ID and Variables
{
    "from": {
        "email": "example.com",
        "name": "Sofft Solution"
    },
    "subject": "Welcome to Sofft Solution!",
    "template_id": 185,
    "personalizations": [
        {
            "attributes": {
                "NAME": "New User",
                "CODE": "123456"
            },
            "to": [
                { "email": "example@gmail.com" }
            ]
        }
    ]
}
3. Payload with Attached File
{
    "from": {
        "email": "example.com",
        "name": "Sofft Solution"
    },
    "subject": "Important Document",
    "content": [
        {
            "type": "html",
            "value": "<p>Please find the attached document.</p>"
        }
    ],
    "personalizations": [
        {
            "to": [
                { "email": "example@gmail.com" }
            ]
        }
    ],
    "attachments": [
        {
            "name": "invoice.pdf",
            "content": "JVBERi0xLjQKJcO..."
        }
    ]
}
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Email Sent Successfully",
    "data": {
        "message_id": "0038ba4cb3731654d8607e9d06e36c7e"
    }
}

Multiple Recipients

This endpoint allows you to send the same email to multiple recipients in a single API call. The `to` parameter should be an array of email address strings.

HTTP Request

POST /api/v1/email/sendEmail

Request Parameters

Parameter Type Description
to Array[String] An array of recipient email addresses.
subject String The subject of the email.
content_string String The HTML or plain text content of the email.
type String Content type. Can be 'html' or 'text'.
from_email String The sender's email address.
from_name String The sender's name.

Request Payload

{
  "to": ["exampl1@gmail.com", "exampl2@gmail.com"],
  "subject": "Team Update",
  "content_string": "<h1>Team Update</h1><p>Important information for the team.</p>",
  "type": "html",
  "from_email": "example.com",
  "from_name": "Your Company"
}
Code Examples
curl -X POST "https://multichannel.insignsms.com/api/v1/email/sendEmail" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "to": ["exampl1@gmail.com", "exampl2@gmail.com"],
  "subject": "Team Update",
  "content_string": "<h1>Team Update</h1><p>Important information for the team.</p>",
  "type": "html",
  "from_email": "example.com",
  "from_name": "Your Company"
}'
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Email Sent Successfully",
    "data": {
        "message_id": "d9ec6a9604cd8b383ea4ef363de38306"
    }
}

Template-based Email

Send emails using a pre-defined template. This method is ideal for campaigns where you need to merge dynamic data for each recipient. It also supports enabling or disabling open and click tracking.

HTTP Request

POST /api/v1/email/sendEmail

Request Parameters

Parameter Type Description
from Object An object containing the sender's email and name.
template_id Integer The ID of the email template you want to use.
personalizations Array An array of objects, each defining a set of recipients (to, cc, bcc) and their specific attributes for personalization.
personalizations[].to Array An array of recipient objects, each with an email and name.
settings Object Optional settings for the email send.
settings.open_track Boolean Set to true to enable open tracking.
settings.click_track Boolean Set to true to enable click tracking.

Request Payload

{
  "from": {
    "email": "example.com",
    "name": "Your Company"
  },
  "template_id": 172,
  "personalizations": [
    {
      "to": [
        {
          "email": "shreyasnalawade2002@gmail.com",
          "name": "John Doe"
        }
      ]
    }
  ],
  "settings": {
    "open_track": true,
    "click_track": true
  }
}
Code Examples
curl -X POST "https://multichannel.insignsms.com/api/v1/email/sendEmail" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "from": {
    "email": "example.com",
    "name": "Your Company"
  },
  "template_id": 172,
  "personalizations": [
    { "to": [{ "email": "shreyasnalawade2002@gmail.com", "name": "John Doe" }] }
  ],
  "settings": { "open_track": true, "click_track": true }
}'
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Email Sent Successfully",
    "data": {
        "message_id": "12c9c38ae84771db7757d91f1034c7f6"
    }
}
Error: Template Not Found (404 Not Found)
{
    "success": false,
    "message": "Template not found or not accessible"
}
Error: Invalid From Domain (400 Bad Request)
{
    "success": false,
    "message": "Send failed",
    "data": {
        "error": [
            {
                "message": "invalid from domain",
                "field": "from[{email}]",
                "description": "Please provide an active domain associated with your account"
            }
        ]
    }
}

Scheduled Email

This endpoint allows you to schedule an email to be sent at a future time. You must provide a future Unix timestamp for the schedule parameter.

HTTP Request

POST /api/v1/email/sendEmail

Request Parameters

Parameter Type Description
to String Recipient's email address.
subject String The subject of the email.
content_string String The HTML or plain text content of the email.
type String Content type. Can be 'html' or 'text'. Defaults to 'html'.
schedule Integer Schedule time in Unix Timestamp format. Scheduling is allowed upto next 3days only (i.e 72 Hours).
from_email String The sender's email address.
from_name String The sender's name.

Request Payload Examples

Plain Text
{
  "to": "exampl2@gmail.com",
  "subject": "Scheduled Email",
  "content_string": "This email was scheduled to be sent later.",
  "schedule": 1757998707,
  "from_email": "example.com",
  "from_name": "Your Company"
}
HTML Content
{
  "to": "exampl2@gmail.com",
  "subject": "Scheduled Email",
  "content_string": "<h1>Team Update</h1><p>Important information for the team.</p>",
  "type": "html",
  "schedule": 1757998707,
  "from_email": "example.com",
  "from_name": "Your Company"
}
Code Example (cURL)
curl -X POST "https://multichannel.insignsms.com/api/v1/email/sendEmail" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "to": "user@example.com",
  "subject": "Scheduled Email",
  "content_string": "This email is scheduled for later.",
  "schedule": 1757998707,
  "from_email": "noreply@yourdomain.com",
  "from_name": "Your Company"
}'
Response
Success Response (200 OK)
{
    "success": true,
    "message": "Email Sent Successfully",
    "data": {
        "message_id": "732180700cad54fe632f09be09898436"
    }
}
Error: Invalid From Domain (400 Bad Request)
{
    "success": false,
    "message": "Send failed",
    "data": {
        "error": [
            {
                "message": "invalid from domain",
                "field": "from[{email}]",
                "description": "Please provide an active domain associated with your account"
            }
        ]
    }
}
Error: Invalid Timestamp (400 Bad Request)
{
    "success": false,
    "message": "Send failed",
    "data": {
        "error": [
            {
                "message": "Invalid timestamp",
                "field": "schedule",
                "description": "Scheduling is allowed upto next 3days only (i.e 72 Hours)"
            }
        ]
    }
}

Create Text Template

This endpoint allows you to create a text-based WhatsApp template. Text templates are simple message templates that contain only text content.

HTTP Request

POST /api/v1/whatsapp/YOUR_WABA_ID/message_templates

Request Headers

Header Type Required Description
Authorization String Yes Bearer token for authentication (e.g., Bearer YOUR_API_KEY)
Content-Type String Yes application/json

Request Parameters

Parameter Type Required Description
name String Yes Unique template name (must be unique across all templates)
language String Yes Template language code (e.g., "en", "es", "fr")
category String Yes Template category (MARKETING or UTILITY)
components Array Yes Array of template components
components[].type String Yes Component type (BODY, HEADER, FOOTER, BUTTONS)
components[].text String Yes Text content with variables like {{1}}, {{2}}, etc.
components[].example Object No Example values for template variables

Request Payload

{
  "name": "template_name_sn2",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Hi {{1}}, This is a test message from sn",
      "example": {
        "body_text": [
          [
            "John Doe"
          ]
        ]
      }
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "template_name_sn2",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Hi {{1}}, This is a test message from sn",
      "example": {
        "body_text": [
          [
            "John Doe"
          ]
        ]
      }
    }
  ]
}'
Response
Success Response (200 OK) - PENDING
{
    "id": "1571797410667162",
    "status": "PENDING",
    "category": "MARKETING"
}
Success Response (200 OK) - REJECTED
{
    "id": "1571797410667162",
    "status": "REJECTED",
    "category": "MARKETING"
}
Error Response (400 Bad Request)
{
  "error": {
    "message": "Template with this name already exists",
    "type": "OAuthException",
    "code": 100,
    "error_subcode": 2655001
  }
}

Create Media Template

This endpoint allows you to create a media-based WhatsApp template. Media templates can include images, videos, or documents along with text content. The media must be uploaded first using the Create Media Handle endpoint to get a media handle.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example (Document Template)

{
  "name": "TEMPLATE_NAME",
  "language": "en",
  "category": "UTILITY",
  "components": [
    {
      "type": "HEADER",
      "format": "DOCUMENT",
      "example": {
        "header_handle": [
          "4::YXBwbGljYXRpb24vcGRm:ARbRac-7KRV919yIfV5nBwdQ7Gg6EQUyWW_BF8TMpBD_vQES-jRDnh_ljDxHQYqm5blYGoXD1jWowPkPTlQ2Pr2XZwOHoFTW2VM5l2EDBkGQBA:e:1705221283:256725303808337:100052252050649:ARa0nL2E0drGk4fXSCs"
        ]
      }
    },
    {
      "type": "BODY",
      "text": "Hello {{1}}. Your account is now LIVE, enjoy our services!",
      "example": {
        "body_text": [
          [
            "Name"
          ]
        ]
      }
    }
  ]
}

Request Payload Example (Image Template)

{
  "name": "TEMPLATE_NAME",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "IMAGE",
      "example": {
        "header_handle": [
          "MEDIA_HANDLE_FROM_UPLOAD"
        ]
      }
    },
    {
      "type": "BODY",
      "text": "Check out our new product!",
      "example": {
        "body_text": []
      }
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "TEMPLATE_NAME",
  "language": "en",
  "category": "UTILITY",
  "components": [
    {
      "type": "HEADER",
      "format": "DOCUMENT",
      "example": {
        "header_handle": ["MEDIA_HANDLE"]
      }
    },
    {
      "type": "BODY",
      "text": "Hello {{1}}.",
      "example": {
        "body_text": [["Name"]]
      }
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "UTILITY"
}

Create Location Template

This endpoint allows you to create a location-based WhatsApp template. Location templates include geographic coordinates and location information in the header.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "location_test",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "LOCATION"
    },
    {
      "type": "BODY",
      "text": "Hello {{1}}. Your account is now LIVE, enjoy our services!",
      "example": {
        "body_text": [
          [
            "Name"
          ]
        ]
      }
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "location_test",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "LOCATION"
    },
    {
      "type": "BODY",
      "text": "Hello {{1}}.",
      "example": {
        "body_text": [["Name"]]
      }
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Create Catalog Template

This endpoint allows you to create a catalog-based WhatsApp template. Catalog templates display product catalogs with images, prices, and descriptions. These templates include a catalog button that opens the business catalog.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "intro_catalog_offer",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Now shop for your favourite products right here on WhatsApp! Get Rs {{1}} off on all orders above {{2}}Rs! Valid for your first {{3}} orders placed on WhatsApp!",
      "example": {
        "body_text": [
          [
            "100",
            "400",
            "3"
          ]
        ]
      }
    },
    {
      "type": "FOOTER",
      "text": "Best grocery deals on WhatsApp!"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "intro_catalog_offer",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Now shop for your favourite products right here on WhatsApp! Get Rs {{1}} off on all orders above {{2}}Rs!",
      "example": {
        "body_text": [["100", "400"]]
      }
    },
    {
      "type": "FOOTER",
      "text": "Best grocery deals on WhatsApp!"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Create Multi Product Template

This endpoint allows you to create a multi-product WhatsApp template. Multi-product templates allow you to showcase multiple products in a single message with a button to view all items.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "abandoned_cart",
  "language": "en_US",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "TEXT",
      "text": "Forget something, {{1}}?",
      "example": {
        "header_text": [
          "Pablo"
        ]
      }
    },
    {
      "type": "BODY",
      "text": "Looks like you left these items in your cart, still interested? Use code {{1}} to get 10% off!",
      "example": {
        "body_text": [
          [
            "10OFF"
          ]
        ]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "MPM",
          "text": "View items"
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "abandoned_cart",
  "language": "en_US",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "TEXT",
      "text": "Forget something, {{1}}?",
      "example": {
        "header_text": ["Pablo"]
      }
    },
    {
      "type": "BODY",
      "text": "Looks like you left these items in your cart, still interested? Use code {{1}} to get 10% off!",
      "example": {
        "body_text": [["10OFF"]]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "MPM",
          "text": "View items"
        }
      ]
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Create Carousel Template

This endpoint allows you to create a carousel-based WhatsApp template. Carousel templates display multiple cards in a swipeable format, each with its own header, body, and buttons.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "summer_carousel_sales_2024_v1",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Summer is here, and we have the freshest produce around! Use code {{1}} to get {{2}} off your next order.",
      "example": {
        "body_text": [
          [
            "15OFF",
            "15%"
          ]
        ]
      }
    },
    {
      "type": "CAROUSEL",
      "cards": [
        {
          "components": [
            {
              "type": "HEADER",
              "format": "IMAGE",
              "example": {
                "header_handle": [
                  "4::aW1hZ2UvanBlZw==:ARb52CTUac8FTuSZdkoCXGdeoxDZPHtGa3LSZmQjIxGnvDhg3hJQe37IRYld6flatNuZiaa89a6M_23HGH0ylis7w1O6pILkUxR-TrLlKp-mYA:e:1708173546:256725303808337:100052252050649:ARbcwlC3kHgZ7vaMLbQ"
                ]
              }
            },
            {
              "type": "BODY",
              "text": "Rare lemons for unique lemon Tea. Use code {{1}} to get {{2}} off all produce.",
              "example": {
                "body_text": [
                  [
                    "LEOOFF15",
                    "15%"
                  ]
                ]
              }
            },
            {
              "type": "BUTTONS",
              "buttons": [
                {
                  "type": "QUICK_REPLY",
                  "text": "Send more like this"
                },
                {
                  "type": "QUICK_REPLY",
                  "text": "need price detail"
                }
              ]
            }
          ]
        },
        {
          "components": [
            {
              "type": "HEADER",
              "format": "IMAGE",
              "example": {
                "header_handle": [
                  "4::aW1hZ2UvcG5n:ARZrkzRYQS-SePQKO6o4eUFKsYqaEsuBXuuqmE8oJIFOwnrX8-cpujg_887eN0qZPntQnacOHTAZMQuC7WV4nuaJ2S5_9btVL7IJJ34k4f35PA:e:1708174367:256725303808337:100052252050649:ARaGtQPC_FWyQgaXFPk"
                ]
              }
            },
            {
              "type": "BODY",
              "text": "Card 2 Test body {{1}} and {{2}}",
              "example": {
                "body_text": [
                  [
                    "MELONOFF15",
                    "15%"
                  ]
                ]
              }
            },
            {
              "type": "BUTTONS",
              "buttons": [
                {
                  "type": "QUICK_REPLY",
                  "text": "Send more like this"
                },
                {
                  "type": "QUICK_REPLY",
                  "text": "need price detail"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "summer_carousel_sales_2024_v1",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Summer is here! Use code {{1}} to get {{2}} off.",
      "example": {
        "body_text": [["15OFF", "15%"]]
      }
    },
    {
      "type": "CAROUSEL",
      "cards": [
        {
          "components": [
            {
              "type": "HEADER",
              "format": "IMAGE",
              "example": {
                "header_handle": ["MEDIA_HANDLE_1"]
              }
            },
            {
              "type": "BODY",
              "text": "Card 1 body text",
              "example": {
                "body_text": []
              }
            }
          ]
        }
      ]
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Create Limited Time Offer Template

This endpoint allows you to create a limited time offer WhatsApp template. These templates are designed for time-sensitive promotions and offers with expiration dates.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "limited_time_offer",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "IMAGE",
      "example": {
        "header_handle": [
          "4::aW1h"
        ]
      }
    },
    {
      "type": "LIMITED_TIME_OFFER",
      "limited_time_offer": {
        "text": "Expiring offer!",
        "has_expiration": true
      }
    },
    {
      "type": "BODY",
      "text": "Good news, {{1}}! Use code {{2}} to get 25% off all Caribbean Destination packages!",
      "example": {
        "body_text": [
          [
            "Harsh",
            "HOTS25"
          ]
        ]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "COPY_CODE",
          "example": "HOTS25"
        },
        {
          "type": "URL",
          "text": "Book now!",
          "url": "https://awesomedestinations.com/offers?code={{1}}",
          "example": [
            "https://awesomedestinations.com/offers?ref=n3mtql"
          ]
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "limited_time_offer",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "IMAGE",
      "example": {
        "header_handle": ["MEDIA_HANDLE"]
      }
    },
    {
      "type": "LIMITED_TIME_OFFER",
      "limited_time_offer": {
        "text": "Expiring offer!",
        "has_expiration": true
      }
    },
    {
      "type": "BODY",
      "text": "Good news, {{1}}! Use code {{2}} to get 25% off!",
      "example": {
        "body_text": [["Harsh", "HOTS25"]]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "COPY_CODE",
          "example": "HOTS25"
        },
        {
          "type": "URL",
          "text": "Book now!",
          "url": "https://example.com/offers?code={{1}}",
          "example": ["https://example.com/offers?ref=n3mtql"]
        }
      ]
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Create Coupon Code Template

This endpoint allows you to create a coupon code WhatsApp template. Coupon templates include discount codes and promotional offers with a copy code button for easy redemption.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "coupon_code_fall2023_25off",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "TEXT",
      "text": "Our Fall Sale is on!"
    },
    {
      "type": "BODY",
      "text": "Shop now through November and use code {{1}} to get {{2}} off of all merchandise!",
      "example": {
        "body_text": [
          [
            "25OFF",
            "25%"
          ]
        ]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "QUICK_REPLY",
          "text": "Unsubscribe"
        },
        {
          "type": "COPY_CODE",
          "example": "250FF"
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "coupon_code_fall2023_25off",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "TEXT",
      "text": "Our Fall Sale is on!"
    },
    {
      "type": "BODY",
      "text": "Shop now through November and use code {{1}} to get {{2}} off!",
      "example": {
        "body_text": [["25OFF", "25%"]]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "QUICK_REPLY",
          "text": "Unsubscribe"
        },
        {
          "type": "COPY_CODE",
          "example": "250FF"
        }
      ]
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Create Call To Action Button Template

This endpoint allows you to create a call-to-action button WhatsApp template. These templates include interactive URL buttons (both dynamic and static) for user actions.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "TEMPLATE_NAME",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Hi {{1}}, This is test template",
      "example": {
        "body_text": [
          [
            "John"
          ]
        ]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "URL",
          "text": "Dynamic Link",
          "url": "https://www.example.com/{{1}}",
          "example": "https://www.example.com/test"
        },
        {
          "type": "URL",
          "text": "Static Link",
          "url": "https://www.example.com"
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "TEMPLATE_NAME",
  "language": "en",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Hi {{1}}, This is test template",
      "example": {
        "body_text": [["John"]]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "URL",
          "text": "Dynamic Link",
          "url": "https://www.example.com/{{1}}",
          "example": "https://www.example.com/test"
        },
        {
          "type": "URL",
          "text": "Static Link",
          "url": "https://www.example.com"
        }
      ]
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Create Flows Template

This endpoint allows you to create a flows-based WhatsApp template. Flows templates enable interactive experiences with forms and dynamic content. Users can interact with forms, surveys, and other dynamic experiences directly within WhatsApp.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates

Request Payload Example

{
  "name": "example_template_name",
  "language": "en_US",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "This is a flows as template demo"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "FLOW",
          "text": "Open flow!",
          "flow_id": "",
          "navigate_screen": "Flows Json screen name",
          "flow_action": "navigate"
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "name": "example_template_name",
  "language": "en_US",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "This is a flows as template demo"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "FLOW",
          "text": "Open flow!",
          "flow_id": "YOUR_FLOW_ID",
          "navigate_screen": "Flows Json screen name",
          "flow_action": "navigate"
        }
      ]
    }
  ]
}'
Response
Success Response (200 OK)
{
  "id": "1571797410667162",
  "status": "PENDING",
  "category": "MARKETING"
}

Edit Template Category

This endpoint allows you to update the category of an existing WhatsApp template. You can change the category between MARKETING and UTILITY.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates/id/{template_id}

Path Parameters

Parameter Type Description
waba_id String Your WhatsApp Business Account ID
template_id String The ID of the template to update

Request Parameters

Parameter Type Required Description
category String Yes New category (MARKETING or UTILITY)

Request Payload

{
  "category": "MARKETING"
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates/id/YOUR_TEMPLATE_ID' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "category": "MARKETING"
}'
Response
Success Response (200 OK)
{
  "success": true
}

Edit Template Components

This endpoint allows you to update the components of an existing WhatsApp template. You can modify headers, body, footer, and buttons.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/message_templates/id/{template_id}

Request Parameters

Parameter Type Required Description
components Array Yes Array of template components to update

Request Payload Example

{
  "components": [
    {
      "type": "HEADER",
      "format": "TEXT",
      "text": "Fall Sale"
    },
    {
      "type": "BODY",
      "text": "Hi {{1}}, our Fall Sale is on! Use promo code {{2}} Get an extra 25% off every order above $350!",
      "example": {
        "body_text": [
          [
            "Mark",
            "FALL25"
          ]
        ]
      }
    },
    {
      "type": "FOOTER",
      "text": "Not interested in any of our sales? Tap Stop Promotions"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "QUICK_REPLY",
          "text": "Stop promotions"
        }
      ]
    }
  ]
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates/id/YOUR_TEMPLATE_ID' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "components": [
    {
      "type": "BODY",
      "text": "Hi {{1}}, our Fall Sale is on!",
      "example": {
        "body_text": [
          [
            "Mark"
          ]
        ]
      }
    }
  ]
}'
Response
Success Response (200 OK)
{
  "success": true
}

Get All Templates

This endpoint retrieves a list of all WhatsApp message templates for your WhatsApp Business Account. The response format matches Meta's API response.

HTTP Request

GET /api/v1/whatsapp/{waba_id}/message_templates

Path Parameters

Parameter Type Description
waba_id String Your WhatsApp Business Account ID

Query Parameters (Optional)

Parameter Type Description
fields String Comma-separated list of fields to return
limit Integer Number of templates to return (default: 100)
Code Example (cURL)
curl -X GET 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY'
Response
Success Response (200 OK)
{
  "data": [
    {
      "id": "123456789",
      "name": "template_name",
      "status": "APPROVED",
      "category": "MARKETING",
      "language": "en"
    }
  ],
  "paging": {
    "cursors": {
      "before": "...",
      "after": "..."
    }
  }
}

Get Specific Template

This endpoint retrieves details of a specific WhatsApp message template by its ID. The response format matches Meta's API response.

HTTP Request

GET /api/v1/whatsapp/{waba_id}/message_templates/id/{template_id}

Path Parameters

Parameter Type Description
waba_id String Your WhatsApp Business Account ID
template_id String The ID of the template to retrieve
Code Example (cURL)
curl -X GET 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates/id/YOUR_TEMPLATE_ID' \
--header 'Authorization: Bearer YOUR_API_KEY'
Response
Success Response (200 OK)
{
  "id": "123456789",
  "name": "template_name",
  "status": "APPROVED",
  "category": "MARKETING",
  "language": "en",
  "components": [...]
}

Delete Template

This endpoint allows you to delete a WhatsApp message template. You can delete by template ID (hsm_id) and name, or by name alone.

HTTP Request

DELETE /api/v1/whatsapp/{waba_id}/message_templates

Query Parameters

Parameter Type Required Description
hsm_id String No* Template ID (hsm_id). Required if name is not provided.
name String No* Template name. Required if hsm_id is not provided.

* Either hsm_id and name together, or just name is required.

Code Example (cURL)
# Delete by name
curl -X DELETE 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates?name=template_name' \
--header 'Authorization: Bearer YOUR_API_KEY'

# Delete by hsm_id and name
curl -X DELETE 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates?hsm_id=123456789&name=template_name' \
--header 'Authorization: Bearer YOUR_API_KEY'
Response
Success Response (200 OK)
{
  "success": true
}

Send Message

This endpoint allows you to send WhatsApp messages. It supports multiple message types including template messages, text messages, media messages, interactive messages, and location messages.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/messages

Note: The {waba_id} in the URL should be replaced with your WhatsApp Business Account ID. However, the actual API uses phone_number_id for sending messages. See individual message type sections for details.

Supported Message Types

  • Template Messages: Send messages using approved templates
  • Text Messages: Send session text messages
  • Media Messages: Send images, videos, documents, audio, or stickers
  • Interactive Messages: Send buttons, lists, flows, catalog messages, product messages
  • Location Messages: Send location coordinates

Send Text Message

Send a session text message to a WhatsApp user. This is used for customer service conversations within the 24-hour messaging window.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "text",
  "text": {
    "preview_url": false,
    "body": "This is a test message"
  }
}

Request Parameters

Parameter Type Required Description
messaging_product String Yes Must be "whatsapp"
recipient_type String Yes Must be "individual"
to String Yes Recipient's phone number (with country code)
type String Yes Must be "text"
text.body String Yes Message text content
text.preview_url Boolean No Enable URL preview (default: false)
context.message_id String No Message ID to reply to (for threaded conversations)
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_NUMBER_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "text",
  "text": {
    "preview_url": false,
    "body": "This is a test message"
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "+919321012345",
      "wa_id": "919321012345"
    }
  ],
  "messages": [
    {
      "id": "wamid.XXX"
    }
  ]
}

Send Media Message

Send media messages including images, videos, documents, audio files, or stickers. Media can be sent by providing a media ID (from uploaded media) or a direct URL.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Supported Media Types

  • image - JPEG, PNG, GIF, WebP
  • video - MP4, 3GP
  • document - PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX
  • audio - MP3, OGG, AMR, M4A
  • sticker - WebP

Request Payload Example (Image)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "image",
  "image": {
    "id": "MEDIA-OBJECT-ID"
  }
}

Request Payload Example (Image with URL)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "image",
  "image": {
    "link": "https://example.com/image.jpg",
    "caption": "Optional caption text"
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_NUMBER_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "image",
  "image": {
    "id": "MEDIA-OBJECT-ID"
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "+919321012345",
      "wa_id": "919321012345"
    }
  ],
  "messages": [
    {
      "id": "wamid.XXX"
    }
  ]
}

Send Interactive Message

Send interactive messages including reply buttons, CTA URL buttons, lists, flows, catalog messages, product messages, and address messages.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Interactive Message Types

  • button - Reply buttons (up to 3 buttons)
  • cta_url - Call-to-action URL button
  • list - List messages with sections and rows
  • flow - Interactive flows
  • catalog_message - Catalog message
  • product - Single product message
  • product_list - Multi-product message
  • address_message - Address request message

Request Payload Example (Reply Buttons)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "body": {
      "text": "BUTTON_TEXT"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_1",
            "title": "BUTTON_TITLE_1"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_2",
            "title": "BUTTON_TITLE_2"
          }
        }
      ]
    }
  }
}

Request Payload Example (List)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "HEADER_TEXT"
    },
    "body": {
      "text": "BODY_TEXT"
    },
    "footer": {
      "text": "FOOTER_TEXT"
    },
    "action": {
      "button": "BUTTON_TEXT",
      "sections": [
        {
          "title": "SECTION_1_TITLE",
          "rows": [
            {
              "id": "SECTION_1_ROW_1_ID",
              "title": "SECTION_1_ROW_1_TITLE",
              "description": "SECTION_1_ROW_1_DESCRIPTION"
            }
          ]
        }
      ]
    }
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_NUMBER_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "body": {
      "text": "Select an option"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "btn_1",
            "title": "Option 1"
          }
        }
      ]
    }
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "PHONE_NUMBER",
      "wa_id": "PHONE_NUMBER"
    }
  ],
  "messages": [
    {
      "id": "wamid.XXX"
    }
  ]
}

Send Location Message

Send a location message with geographic coordinates. This is useful for sharing business locations, delivery addresses, or meeting points.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "location",
  "location": {
    "longitude": -122.425332,
    "latitude": 37.758056,
    "name": "Facebook HQ",
    "address": "1 Hacker Way, Menlo Park, CA 94025"
  }
}

Request Parameters

Parameter Type Required Description
messaging_product String Yes Must be "whatsapp"
to String Yes Recipient's phone number
type String Yes Must be "location"
location.longitude Number Yes Longitude coordinate
location.latitude Number Yes Latitude coordinate
location.name String No Location name
location.address String No Location address
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_NUMBER_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "location",
  "location": {
    "longitude": -122.425332,
    "latitude": 37.758056,
    "name": "Facebook HQ",
    "address": "1 Hacker Way, Menlo Park, CA 94025"
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "PHONE_NUMBER",
      "wa_id": "PHONE_NUMBER"
    }
  ],
  "messages": [
    {
      "id": "wamid.XXX"
    }
  ]
}

Mark Message as Read

Mark a message as read. This endpoint allows you to mark incoming messages as read, which updates the read status in WhatsApp.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "status": "read",
  "message_id": "MESSAGE_ID"
}

Request Parameters

Parameter Type Required Description
messaging_product String Yes Must be "whatsapp"
status String Yes Must be "read"
message_id String Yes The WhatsApp message ID to mark as read
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "status": "read",
  "message_id": "MESSAGE_ID"
}'
Response
Success Response (200 OK)
{
  "success": true
}

Send Text Template Message

Send a text template message to a WhatsApp user. Text templates contain only text content and can include variables for personalization.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "welcome_message",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "John"
          }
        ]
      }
    ]
  }
}

Request Parameters

Parameter Type Required Description
messaging_product String Yes Must be "whatsapp"
recipient_type String Yes Must be "individual"
to String Yes Recipient's WhatsApp number in E.164 format
type String Yes Must be "template"
template.name String Yes Name of the approved template
template.language.code String Yes Language code (e.g., "en", "en_US")
template.components Array No Array of component objects for variables
template.components[].type String No Component type: "body", "header", or "button"
template.components[].parameters Array No Array of parameter objects for variable substitution
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "welcome_message",
    "language": { "code": "en" },
    "components": [{
      "type": "body",
      "parameters": [{
        "type": "text",
        "text": "John"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Media Template

Send a template message with media (image, video, or document) in the header. The media can be static or include variables.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_promo",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "https://example.com/image.jpg"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "50%"
          }
        ]
      }
    ]
  }
}

Media Types

  • Image: Use "type": "image" with image.link or image.id
  • Video: Use "type": "video" with video.link or video.id
  • Document: Use "type": "document" with document.link or document.id
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_promo",
    "language": { "code": "en" },
    "components": [{
      "type": "header",
      "parameters": [{
        "type": "image",
        "image": { "link": "https://example.com/image.jpg" }
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Interactive Template

Send a template message with interactive buttons (quick reply buttons or call-to-action buttons). Interactive templates allow users to respond quickly with predefined options.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload (Quick Reply Buttons)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "survey_template",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "0",
        "parameters": [
          {
            "type": "payload",
            "payload": "YES"
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "survey_template",
    "language": { "code": "en" },
    "components": [{
      "type": "button",
      "sub_type": "quick_reply",
      "index": "0",
      "parameters": [{
        "type": "payload",
        "payload": "YES"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Location Template

Send a template message with a location in the header. The location can be static or include variables for dynamic locations.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "store_location",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "location",
            "location": {
              "latitude": 19.0760,
              "longitude": 72.8777,
              "name": "Mumbai Store",
              "address": "123 Main Street, Mumbai"
            }
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "store_location",
    "language": { "code": "en" },
    "components": [{
      "type": "header",
      "parameters": [{
        "type": "location",
        "location": {
          "latitude": 19.0760,
          "longitude": 72.8777,
          "name": "Mumbai Store",
          "address": "123 Main Street, Mumbai"
        }
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Template (with variables)

Send a template message with dynamic variables. Variables allow you to personalize template messages with user-specific data like names, dates, amounts, etc.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload (Multiple Variables)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "order_confirmation",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "text",
            "text": "ORD-12345"
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "John Doe"
          },
          {
            "type": "text",
            "text": "$99.99"
          },
          {
            "type": "text",
            "text": "2024-01-15"
          }
        ]
      }
    ]
  }
}

Variable Types

  • Text: Use "type": "text" with text parameter
  • Currency: Use "type": "currency" with currency object
  • DateTime: Use "type": "date_time" with date_time object
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "order_confirmation",
    "language": { "code": "en" },
    "components": [{
      "type": "body",
      "parameters": [{
        "type": "text",
        "text": "John Doe"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Template (CTA Button)

Send a template message with Call-to-Action (CTA) buttons. CTA buttons can include URL buttons or phone number buttons that allow users to take immediate action.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload (URL Button)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "promo_template",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "text",
            "text": "https://example.com/promo"
          }
        ]
      }
    ]
  }
}

Request Payload (Phone Number Button)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "contact_template",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "button",
        "sub_type": "phone_number",
        "index": "0",
        "parameters": [
          {
            "type": "text",
            "text": "+919321012345"
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "promo_template",
    "language": { "code": "en" },
    "components": [{
      "type": "button",
      "sub_type": "url",
      "index": "0",
      "parameters": [{
        "type": "text",
        "text": "https://example.com/promo"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Authentication Template

Send an authentication template message with a one-time password (OTP) for user verification. Authentication templates are used for login, account verification, and security purposes.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "otp_verification",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "123456"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "text",
            "text": "https://example.com/verify?code=123456"
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "otp_verification",
    "language": { "code": "en" },
    "components": [{
      "type": "body",
      "parameters": [{
        "type": "text",
        "text": "123456"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Catalog Template Message

Send a template message that displays a product from your catalog. This allows customers to view product details directly in WhatsApp.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_showcase",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "PRODUCT123"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "catalog",
            "catalog_id": "CATALOG_ID",
            "product_retailer_id": "PRODUCT123"
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_showcase",
    "language": { "code": "en" },
    "components": [{
      "type": "button",
      "sub_type": "url",
      "index": "0",
      "parameters": [{
        "type": "catalog",
        "catalog_id": "CATALOG_ID",
        "product_retailer_id": "PRODUCT123"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Multi-Product Template

Send a template message that displays multiple products from your catalog in a single message. This is useful for showcasing product collections or related items.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_collection",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Summer Collection"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "product_list",
            "catalog_id": "CATALOG_ID",
            "product_items": [
              {
                "product_retailer_id": "PRODUCT123"
              },
              {
                "product_retailer_id": "PRODUCT456"
              },
              {
                "product_retailer_id": "PRODUCT789"
              }
            ]
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_collection",
    "language": { "code": "en" },
    "components": [{
      "type": "button",
      "sub_type": "url",
      "index": "0",
      "parameters": [{
        "type": "product_list",
        "catalog_id": "CATALOG_ID",
        "product_items": [
          { "product_retailer_id": "PRODUCT123" },
          { "product_retailer_id": "PRODUCT456" }
        ]
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Carousel Template

Send a template message with a carousel of products or items. Carousel templates display multiple cards that users can swipe through horizontally.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_carousel",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "text",
            "text": "Featured Products"
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Check out our latest collection"
          }
        ]
      }
    ]
  }
}

Note: Carousel templates are created at template creation time. When sending, you reference the carousel template name and provide any required variables.

Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "product_carousel",
    "language": { "code": "en" },
    "components": [{
      "type": "body",
      "parameters": [{
        "type": "text",
        "text": "Check out our latest collection"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Coupon Code Template

Send a template message with a coupon code for discounts or promotions. Coupon code templates help drive customer engagement and conversions.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "coupon_promo",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "SAVE50"
          },
          {
            "type": "text",
            "text": "50%"
          },
          {
            "type": "text",
            "text": "2024-12-31"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "text",
            "text": "https://example.com/redeem?code=SAVE50"
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "coupon_promo",
    "language": { "code": "en" },
    "components": [{
      "type": "body",
      "parameters": [{
        "type": "text",
        "text": "SAVE50"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Limited Time Offer Template

Send a template message with a limited-time offer or flash sale. These templates create urgency and encourage immediate action from customers.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "flash_sale",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "text",
            "text": "Flash Sale - 24 Hours Only!"
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "70%"
          },
          {
            "type": "text",
            "text": "2024-01-20 23:59:59"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "text",
            "text": "https://example.com/sale"
          }
        ]
      }
    ]
  }
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "flash_sale",
    "language": { "code": "en" },
    "components": [{
      "type": "body",
      "parameters": [{
        "type": "text",
        "text": "70%"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Send Flows Template

Send a template message with a WhatsApp Flow. Flows enable rich, interactive experiences within WhatsApp, allowing users to complete forms, surveys, bookings, and more without leaving the chat.

HTTP Request

POST /api/v1/whatsapp/{phone_number_id}/messages

Request Payload

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "booking_flow",
    "language": {
      "code": "en"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Book your appointment"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "flow",
            "flow_token": "FLOW_TOKEN",
            "flow_id": "FLOW_ID",
            "flow_cta": "Book Now",
            "flow_action_payload": {
              "screen": "BOOKING_SCREEN"
            }
          }
        ]
      }
    ]
  }
}

Flow Parameters

Parameter Type Required Description
flow_token String Yes Token for the flow session
flow_id String Yes ID of the flow to launch
flow_cta String Yes Button text (e.g., "Book Now", "Start")
flow_action_payload Object No Additional data to pass to the flow
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_PHONE_ID/messages' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+919321012345",
  "type": "template",
  "template": {
    "name": "booking_flow",
    "language": { "code": "en" },
    "components": [{
      "type": "button",
      "sub_type": "url",
      "index": "0",
      "parameters": [{
        "type": "flow",
        "flow_token": "FLOW_TOKEN",
        "flow_id": "FLOW_ID",
        "flow_cta": "Book Now"
      }]
    }]
  }
}'
Response
Success Response (200 OK)
{
  "messaging_product": "whatsapp",
  "contacts": [{
    "input": "+919321012345",
    "wa_id": "919321012345"
  }],
  "messages": [{
    "id": "wamid.XXX"
  }]
}

Get Media by ID

Retrieve media metadata and URL from a media ID. This is useful when you receive a media ID in webhooks and need to fetch the actual media file.

HTTP Request

GET /api/v1/whatsapp/{waba_id}/media/{media_id}

Path Parameters

Parameter Type Description
waba_id String Your WhatsApp Business Account ID
media_id String The media ID received in webhook (e.g., from incoming messages)
Code Example (cURL)
curl -X GET 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/media/MEDIA_ID' \
--header 'Authorization: Bearer YOUR_API_KEY'
Response
Success Response (200 OK)
{
  "url": "https://...",
  "mime_type": "image/jpeg",
  "sha256": "...",
  "file_size": 12345
}

Get Media by URL

Download media content from a media URL. This endpoint fetches the actual media file (image, video, document, etc.) from the provided URL.

HTTP Request

GET /api/v1/whatsapp/{waba_id}/media?url={media_url}

Query Parameters

Parameter Type Required Description
url String Yes The media URL to download
Code Example (cURL)
curl -X GET 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/media?url=MEDIA_URL' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--output media_file.jpg
Response
Success Response (200 OK)

Returns the binary media content with appropriate Content-Type headers.


Upload Media

Upload a media file to create a media ID that can be used for sending media messages. Supports images, videos, documents, audio files, and stickers (max 25MB).

HTTP Request

POST /api/v1/whatsapp/{waba_id}/media

Request Parameters (Multipart Form Data)

Parameter Type Required Description
file File Yes Media file to upload (max 25MB)
messaging_product String Yes Must be "whatsapp"
type String Yes MIME type (e.g., "image/jpg", "video/mp4", "application/pdf")
Code Example (cURL)
curl --location 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/media' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--form 'file=@"/path/to/image.jpg"' \
--form 'messaging_product="whatsapp"' \
--form 'type="image/jpg"'
Response
Success Response (200 OK)
{
  "id": "MEDIA-OBJECT-ID"
}

Use the returned id in your media message payload.


Create Media Handle

Upload a media file to create a media handle. creates a media handle that can be used in template creation.

HTTP Request

POST /api/v1/whatsapp/{waba_id}/media_handle

Request Parameters (Multipart Form Data)

Parameter Type Required Description
file File Yes Media file to upload (max 25MB)
messaging_product String Yes Must be "whatsapp"
type String Yes MIME type (e.g., "image/jpg")
Code Example (cURL)
curl --location 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/media_handle' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--form 'file=@"/path/to/image.jpg"' \
--form 'messaging_product="whatsapp"' \
--form 'type="image/jpg"'
Response
Success Response (200 OK)
{
  "h": "MEDIA-HANDLE-STRING"
}

Use the returned handle in template creation for media components.


Create Voice Template

This endpoint allows you to create a simple voice broadcast template. The template will be created with a clip ID (campaign ID) from the voice gateway. Audio duration is automatically calculated from the provided audio URL or file.

HTTP Request

POST /api/v1/voice/storeTemplate

Request Parameters

Parameter Type Required Description
template_name String Yes Name of the voice template (max 255 characters)
audio_url String (URL) Yes* HTTP URL to the audio file (MP3 or WAV). Required if audio_file is not provided.
audio_file File Yes* Audio file upload (MP3 or WAV, multipart/form-data). Required if audio_url is not provided.

* Either audio_url or audio_file must be provided.

Request Payload Example

{
  "template_name": "welcome_call",
  "audio_url": "https://example.com/audio/welcome.mp3"
}

Response

Success Response (201 Created)
{
  "success": true,
  "message": "Template created successfully and is pending approval.",
  "clip_id": "1dd74936699b11edadb60cc47a338ee6"
}

The clip_id is the campaign ID returned from the voice gateway. Use this clip_id when sending voice messages.

Code Examples
curl -X POST 'https://multichannel.insignsms.com/api/v1/voice/storeTemplate' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "template_name": "welcome_call",
  "audio_url": "https://example.com/audio/welcome.mp3"
}'
const axios = require('axios');

const data = {
  template_name: "welcome_call",
  audio_url: "https://example.com/audio/welcome.mp3"
};

axios.post('https://multichannel.insignsms.com/api/v1/voice/storeTemplate', data, {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response.data));
import requests
import json

url = "https://multichannel.insignsms.com/api/v1/voice/storeTemplate"
payload = {
  "template_name": "welcome_call",
  "audio_url": "https://example.com/audio/welcome.mp3"
}
headers = {
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json"
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
print(response.json())

Create Voice DTMF Template

This endpoint allows you to create a voice template with DTMF (Dual-Tone Multi-Frequency) capture capabilities. This enables interactive voice calls where recipients can press keys on their phone to provide input.

HTTP Request

POST /api/v1/voice/storeTemplateWithDtmf

Request Parameters

Parameter Type Required Description
template_name String Yes Name of the voice template (max 255 characters)
audio_url String (URL) Yes* HTTP URL to the audio file (MP3 or WAV). Required if audio_file is not provided.
audio_file File Yes* Audio file upload (MP3 or WAV). Required if audio_url is not provided.
dtmflength String Yes Expected length of DTMF input (e.g., "1" for single digit, "4" for 4 digits)
dtmftimeout String Yes Timeout in seconds for DTMF input (e.g., "10")
retry String No Number of retry attempts if DTMF input is not received
retrykey String No Key to press for retry (e.g., "0")

Request Payload Example

{
  "template_name": "survey_call",
  "audio_url": "https://example.com/audio/survey.mp3",
  "dtmflength": "1",
  "dtmftimeout": "10",
  "retry": "2",
  "retrykey": "0"
}

Response

Success Response (201 Created)
{
  "success": true,
  "message": "Template created successfully and is pending approval.",
  "clip_id": "2ee85047700c22fedea71dd58b449ff7"
}
Code Example (cURL)
curl -X POST 'https://multichannel.insignsms.com/api/v1/voice/storeTemplateWithDtmf' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "template_name": "survey_call",
  "audio_url": "https://example.com/audio/survey.mp3",
  "dtmflength": "1",
  "dtmftimeout": "10"
}'

List Voice Templates

This endpoint retrieves voice templates. You can fetch all templates or a specific template by passing its ID.

HTTP Request

GET /api/v1/voice/templates/{id?}

{id} is optional. If provided → returns single template. If omitted → returns list of templates.

Response Fields

Field Type Description
id Integer Unique template ID
template_name String Name of the template
clip_id String Campaign ID from voice gateway (use this for sending messages)
audio_file String URL to the audio file
duration String Duration of the audio in seconds
type String Template type: "1" (Simple Broadcast) or "2" (DTMF Capture)
status String Template status: "0" (Pending), "1" (Approved), "2" (Rejected)

Response Example

{
  "success": true,
  "templates": [
    {
      "id": 1,
      "template_name": "welcome_call",
      "clip_id": "1dd74936699b11edadb60cc47a338ee6",
      "audio_file": "https://example.com/audio/welcome.mp3",
      "duration": "30",
      "type": "1",
      "status": "1",
      "created_at": "2025-01-15T10:30:00.000000Z"
    }
  ],
  "count": 1
}
Code Examples
# List all templates
curl -X GET 'https://multichannel.insignsms.com/api/v1/voice/templates' \
--header 'Authorization: Bearer YOUR_API_KEY'

# Get single template
curl -X GET 'https://multichannel.insignsms.com/api/v1/voice/templates/1' \
--header 'Authorization: Bearer YOUR_API_KEY'
const axios = require('axios');

// List all templates
axios.get('https://multichannel.insignsms.com/api/v1/voice/templates', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data));

// Get single template
axios.get('https://multichannel.insignsms.com/api/v1/voice/templates/1', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data));
import requests

headers = { "Authorization": "Bearer YOUR_API_KEY" }

# List all
res = requests.get("https://multichannel.insignsms.com/api/v1/voice/templates", headers=headers)
print(res.json())

# Single template
res = requests.get("https://multichannel.insignsms.com/api/v1/voice/templates/1", headers=headers)
print(res.json())

Send Voice Message

This endpoint allows you to send voice calls to one or more recipients using an approved template. The message is processed asynchronously via Kafka, and you'll receive a reference ID immediately.

HTTP Request

POST /api/v1/voice/sendMessage

Request Parameters

Parameter Type Required Description
clip_id String Yes The clip ID (campaign ID) returned when creating the template
numbers Array[String] Yes Array of recipient phone numbers (10-digit format, e.g., "9876543210"). Maximum 500 numbers per request.
retry Integer No Number of retry attempts if the caller doesn't pick up (0-3, default: 0). Set to 0 if you don't want retries.
retrytime Integer No Time in seconds between retry attempts (e.g., 900 for 15 minutes, 600 for 10 minutes, default: 0). Set to 0 if you don't want retries.

Request Payload Example

{
  "clip_id": "1dd74936699b11edadb60cc47a338ee6",
  "numbers": ["9876543210", "9123456780"],
  "retry": 2,
  "retrytime": 900
}

Note: retry and retrytime are optional. If both are 0 or not provided, no retries will be attempted.

Response

Success Response (202 Accepted)
{
  "status": "accepted",
  "referenceId": "c6b9d8e4-12f3-4b9c-9f8a-abcdef123456"
}

The referenceId is a local reference ID. Use this to track the batch status. The actual gateway reference ID will be available in the report after processing.

Code Examples
curl -X POST "https://multichannel.insignsms.com/api/v1/voice/sendMessage" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "clip_id": "1dd74936699b11edadb60cc47a338ee6",
  "numbers": ["9876543210", "9123456780"],
  "retry": 2,
  "retrytime": 900
}'
const axios = require("axios");

axios.post("https://multichannel.insignsms.com/api/v1/voice/sendMessage", {
  clip_id: "1dd74936699b11edadb60cc47a338ee6",
  numbers: ["9876543210", "9123456780"],
  retry: 2,
  retrytime: 900
}, {
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  }
}).then(res => {
  console.log(res.data);
}).catch(err => {
  console.error("API Error:", err.response.data);
});
import requests
import json

url = "https://multichannel.insignsms.com/api/v1/voice/sendMessage"
payload = {
  "clip_id": "1dd74936699b11edadb60cc47a338ee6",
  "numbers": ["9876543210", "9123456780"],
  "retry": 2,
  "retrytime": 900
}
headers = {
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json"
}

response = requests.post(url, headers=headers, json=payload)
print(response.json())

Get Voice Report

This endpoint retrieves the delivery report of a previously sent voice batch. You must provide the batch_id (returned from the send message response or from the batch record) to fetch the associated logs for each recipient.

HTTP Request

GET /api/v1/voice/reports/{batch_id}

Path Parameter

Parameter Type Description
batch_id Integer The unique batch ID for the voice call batch

Response Example

{
  "success": true,
  "batch": {
    "id": 1,
    "user_id": 7,
    "template_id": 1,
    "clip_id": "1dd74936699b11edadb60cc47a338ee6",
    "gateway_ref_id": "ACK123456",
    "total_numbers": 2,
    "status": "submitted",
    "cost": 0.50,
    "duration": "30",
    "created_at": "2025-01-15T12:34:56.000000Z"
  },
  "logs": [
    {
      "id": 1,
      "voice_batch_id": 1,
      "recipient_number": "9876543210",
      "status": "submitted",
      "reference_id": "ACK123456",
      "duration": null,
      "dtmf": null,
      "error_code": null,
      "error_message": null,
      "created_at": "2025-01-15T12:34:56.000000Z"
    },
    {
      "id": 2,
      "voice_batch_id": 1,
      "recipient_number": "9123456780",
      "status": "submitted",
      "reference_id": "ACK123456",
      "duration": null,
      "dtmf": null,
      "error_code": null,
      "error_message": null,
      "created_at": "2025-01-15T12:34:56.000000Z"
    }
  ]
}
Code Example (cURL)
curl -X GET 'https://multichannel.insignsms.com/api/v1/voice/reports/{batch_id}' \
--header 'Authorization: Bearer YOUR_API_KEY'
Response Fields

Batch Fields:

  • gateway_ref_id - Reference ID from voice gateway
  • status - Batch status (pending, submitted, failed)
  • cost - Total cost for the batch

Log Fields:

  • status - Individual call status
  • reference_id - Gateway reference for the call
  • dtmf - DTMF input captured (if applicable)
  • duration - Call duration in seconds

Postman API Collections

Download ready-to-use Postman collections for each service. These collections include all endpoints with pre-configured requests, examples, and response schemas. Simply import the JSON file into Postman and start testing immediately.

SMS API Collection

Complete SMS API collection including template management, message sending, and delivery reports.

Download SMS Collection
RCS API Collection

Complete RCS API collection for creating templates, sending rich messages, and managing campaigns.

Download RCS Collection
Email API Collection

Complete Email API collection including domain management, template creation, and email sending with attachments.

Download Email Collection
Voice API Collection

Complete Voice API collection for creating templates, sending voice calls, and managing campaigns with DTMF support.

Download Voice Collection
More Collections

Additional API collections coming soon for WhatsApp and more.

How to Use

  1. Download the collection JSON file for your desired service (SMS, RCS, Email, or Voice)
  2. Open Postman and click Import in the top left
  3. Select the downloaded JSON file or drag and drop it into Postman
  4. Update the collection variables:
    • base_url - Set to your API domain (default: https://example.com)
    • api_token - Set to your API authentication token
  5. Start testing the endpoints! All requests are pre-configured with examples.
Collection Features
  • Pre-configured authentication (Bearer token)
  • Request examples for all endpoints
  • Success and error response examples
  • Environment variables for easy configuration
  • Detailed descriptions for each endpoint