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
Getting Started
To get started, you'll need an API key. Sign up for an account and generate your API key from the dashboard.
- Sign up for a developer account
- Verify your email address
- Generate your API key from the dashboard
- 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.
Test the API with this simple cURL request:
curl -X GET "https://multichannel.insignsms.com/v1/health" \
-H "Authorization: Bearer YOUR_API_KEY"
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:
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).
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())
{
"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
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"
}
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())
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 contentsms_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
{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"
}
]
}
# 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())
{
"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
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.
| 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" }
]
}
# 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())
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 recipientcost- Per-message cost calculated based on SMS unitssms_units- Number of SMS segments usedmessage_length- Character count of the messagestatus- Delivery status (submitted, delivered, failed)
HTTP Request
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'
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
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"
}
}
}
]
}
]
}
}
}
}
}
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())
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
{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"
}
}
}
]
}
]
}
}
}
}
}
}
# 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())
{
"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
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),cardTitleandcardDescription(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"
}
]
}
# 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())
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
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"
}
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"
}'
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
Path Parameters
| Parameter | Type | Description |
|---|---|---|
domain |
String | The domain name for which to fetch DNS records (e.g., "example.com"). |
curl -X GET "https://multichannel.insignsms.com/api/v1/email/domain/dns/example.com" \
--header "Authorization: Bearer YOUR_API_KEY"
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
Path Parameters
| Parameter | Type | Description |
|---|---|---|
status |
Integer |
A numeric code representing the domain status:
|
curl -X GET "https://multichannel.insignsms.com/api/v1/email/domain/status/5" \
--header "Authorization: Bearer YOUR_API_KEY"
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
Path Parameters
| Parameter | Type | Description |
|---|---|---|
domain |
String | The domain name to be deleted (e.g., "example.com"). |
curl -X DELETE "https://multichannel.insignsms.com/api/v1/email/domain/delete/example.com" \
--header "Authorization: Bearer YOUR_API_KEY"
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
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>"
}
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>"
}'
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
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). |
curl -X GET "https://multichannel.insignsms.com/api/v1/email/listTemplates" \
--header "Authorization: Bearer YOUR_API_KEY"
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
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id |
Integer | The unique identifier for the template. |
curl -X GET "https://multichannel.insignsms.com/api/v1/email/listTemplates/185" \
--header "Authorization: Bearer YOUR_API_KEY"
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
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id |
Integer | The unique identifier of the template to be deleted. |
curl -X DELETE "https://multichannel.insignsms.com/api/v1/email/template/delete/184" \
--header "Authorization: Bearer YOUR_API_KEY"
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
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"
}
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"
}'
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
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. |
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>"}]
}'
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..."
}
]
}
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
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"
}
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"
}'
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
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
}
}
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 }
}'
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
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"
}
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"
}'
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
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 |
{{name}} instead of {{1}}), the system will automatically add "parameter_format": "NAMED" to your request.
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"
]
]
}
}
]
}
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"
]
]
}
}
]
}'
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
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": []
}
}
]
}
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"]]
}
}
]
}'
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
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"
]
]
}
}
]
}
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"]]
}
}
]
}'
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
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"
}
]
}
]
}
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"
}
]
}
]
}'
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
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"
}
]
}
]
}
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"
}
]
}
]
}'
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
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"
}
]
}
]
}
]
}
]
}
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": []
}
}
]
}
]
}
]
}'
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
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"
]
}
]
}
]
}
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"]
}
]
}
]
}'
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
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"
}
]
}
]
}
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"
}
]
}
]
}'
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
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"
}
]
}
]
}
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"
}
]
}
]
}'
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
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"
}
]
}
]
}
<flow-id> with your actual Flow ID from Meta Business Manager. The navigate_screen should match a screen name in your Flow JSON.
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"
}
]
}
]
}'
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
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"
}
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"
}'
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
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"
}
]
}
]
}
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"
]
]
}
}
]
}'
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
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) |
curl -X GET 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/message_templates' \
--header 'Authorization: Bearer YOUR_API_KEY'
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
Path Parameters
| Parameter | Type | Description |
|---|---|---|
waba_id |
String | Your WhatsApp Business Account ID |
template_id |
String | The ID of the template to retrieve |
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'
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
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.
# 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'
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
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
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) |
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"
}
}'
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
Supported Media Types
image- JPEG, PNG, GIF, WebPvideo- MP4, 3GPdocument- PDF, DOC, DOCX, XLS, XLSX, PPT, PPTXaudio- MP3, OGG, AMR, M4Asticker- 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"
}
}
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"
}
}'
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
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"
}
]
}
]
}
}
}
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"
}
}
]
}
}
}'
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
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 |
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"
}
}'
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
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 |
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"
}'
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
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 |
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"
}]
}]
}
}'
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
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"withimage.linkorimage.id - Video: Use
"type": "video"withvideo.linkorvideo.id - Document: Use
"type": "document"withdocument.linkordocument.id
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" }
}]
}]
}
}'
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
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"
}
]
}
]
}
}
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"
}]
}]
}
}'
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
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"
}
}
]
}
]
}
}
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"
}
}]
}]
}
}'
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
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"withtextparameter - Currency: Use
"type": "currency"withcurrencyobject - DateTime: Use
"type": "date_time"withdate_timeobject
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"
}]
}]
}
}'
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
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"
}
]
}
]
}
}
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"
}]
}]
}
}'
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
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"
}
]
}
]
}
}
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"
}]
}]
}
}'
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
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"
}
]
}
]
}
}
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"
}]
}]
}
}'
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
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"
}
]
}
]
}
]
}
}
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" }
]
}]
}]
}
}'
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
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.
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"
}]
}]
}
}'
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
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"
}
]
}
]
}
}
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"
}]
}]
}
}'
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
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"
}
]
}
]
}
}
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%"
}]
}]
}
}'
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
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 |
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"
}]
}]
}
}'
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
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) |
curl -X GET 'https://multichannel.insignsms.com/api/v1/whatsapp/YOUR_WABA_ID/media/MEDIA_ID' \
--header 'Authorization: Bearer YOUR_API_KEY'
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
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
url |
String | Yes | The media URL to download |
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
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
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") |
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"'
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
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") |
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"'
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
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.
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
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"
}
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
{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
}
# 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
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.
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
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"
}
]
}
curl -X GET 'https://multichannel.insignsms.com/api/v1/voice/reports/{batch_id}' \
--header 'Authorization: Bearer YOUR_API_KEY'
Batch Fields:
gateway_ref_id- Reference ID from voice gatewaystatus- Batch status (pending, submitted, failed)cost- Total cost for the batch
Log Fields:
status- Individual call statusreference_id- Gateway reference for the calldtmf- 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 CollectionRCS API Collection
Complete RCS API collection for creating templates, sending rich messages, and managing campaigns.
Download RCS CollectionEmail API Collection
Complete Email API collection including domain management, template creation, and email sending with attachments.
Download Email CollectionVoice API Collection
Complete Voice API collection for creating templates, sending voice calls, and managing campaigns with DTMF support.
Download Voice CollectionMore Collections
Additional API collections coming soon for WhatsApp and more.
How to Use
- Download the collection JSON file for your desired service (SMS, RCS, Email, or Voice)
- Open Postman and click Import in the top left
- Select the downloaded JSON file or drag and drop it into Postman
- Update the collection variables:
base_url- Set to your API domain (default: https://example.com)api_token- Set to your API authentication token
- 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