13 Jan 2026 | Sujay

It has been a while since I dabbled with sending automated SMS. Back in 2020, I made a simple script to send birthday SMS to my friends. It was simple - all you needed was a script and an API key to platforms like Fast2SMS and you were set. Cut to 2026, the process is a lot more different. The regulators have stepped up big time to control the amount of spam messages that find their way to your inbox.
In one of my recent projects, I went through the entire process of setting up a compliant SMS system in India. This post is a comprehensive guide on how you can set up an automated SMS system that follows all the regulatory requirements in 2026.
Understanding the SMS ecosystem is crucial. Here are the key players:
The flow is: Entity → SMS API Platform → Telecom Operator → Receiver, with DLT acting as the regulatory checkpoint.
DLT (Distributed Ledger Technology) is a blockchain-based platform mandated by TRAI (Telecom Regulatory Authority of India) to curb unsolicited commercial communication. Every business that wants to send bulk SMS or promotional messages must register on the DLT platform.
Think of DLT as your SMS license. Without it, telecom operators will block your messages. The registration process involves:
I used Smartping for my registration, and they charged Rs 5,900 for 1 year. This involved sharing a bunch of documents from my company (GST certificate, incorporation certificate, rental agreement, etc.) with Smartping. The registration took about a day to complete.
Pro tip: Different operators have different fee structures and processing times. Do your research before choosing one.
A header (or Sender ID) is a 4-6 character alphanumeric identifier that appears as the sender name on the recipient’s phone. For example, when you get an SMS from your bank, you might see “HDFC”, “ICICI”, or “AMAZON” as the sender.
The header must be relevant to your organization, and you need to submit proper proof of ownership of the brand/trademark to get it approved. Headers can be:
One way to get a header when you don’t have a trademark is to buy a domain that sounds close to the required header and create a simple website for it. Submit the invoice of the domain in the DLT portal and show that the header is needed for the website. That will make them grant you the header.
In my case, I was building a website for another business, and I was not allowed to own any of their brand names in my SMS headers and templates. So I had to register a domain and create the header for that domain instead.
Important: The header approval can take 2-7 days depending on the operator and the type of proof you submit.
The template is the next step. The content of each SMS that you send must be pre-approved. This process is called template registration. The template will have a static part and variable parts. Here’s an example of how a template would look:
Hello, your OTP for logging into example.com is {#var#}. Valid until {#var#}.
- Team example.com
There are two main types of commercial messages:
These are transactional messages sent in response to a user action. They don’t require explicit consent from the user because the user has implicitly agreed to receive them by using your service.
Examples:
These are promotional or informational messages that require explicit consent from the user. You must have proof that the user opted-in to receive these messages.
Examples:
The SMS template approval usually takes around 1-2 hours, though it can sometimes take up to 24 hours.
Choose the Right SMS Type: Ensure you have selected the correct category (Service Implicit or Service Explicit) based on your use case. Using the wrong type can lead to rejection.
Avoid Unauthorized Brand Names: Do not mention any brand name or product name that you don’t have access to. Try to use those names as variables instead.
Include Your Header Identity: Clearly mention your header identity (Sender ID) in the SMS template. This is often mandatory.
Limit Variable Usage: Try to avoid using too many variables. Some operators restrict the number of variables you can use in a template (usually 3-5).
Watch Out for Unicode Characters: SMS allows 160 characters for basic GSM text. But if there are any Unicode characters (like smart quotes, em dashes, special symbols), the character limit drops to 70 characters, and this might result in higher SMS rates and multiple message parts. You can check your SMS template at https://smscharactercount.com.
AI-Generated Templates: If you’re generating your templates using AI, ensure they don’t contain any Unicode characters (e.g., `, —, •, etc.). Always paste into a Unicode checker before submitting.
URL Whitelisting: If you are using any URLs in your SMS, you must get them whitelisted in the DLT portal. Some operators require URL registration as a separate step.
Include Opt-Out Mechanism: For Service Explicit messages, include an opt-out option like “Reply STOP to unsubscribe” to comply with regulations.
PE-TM Binding stands for Principal Entity - Telemarketer Binding. This is a crucial step that links your registered entity (PE) with the SMS service provider/telemarketer (TM).
Here’s why it matters: Your entity is registered on the DLT portal, and your SMS API platform (like Fast2SMS, Gupshup) is registered as a telemarketer. Before they can send messages on your behalf, there must be a formal binding between your entity and the telemarketer on the DLT platform.
The process is straightforward:
Most modern SMS platforms have a user-friendly UI to handle this process. In Fast2SMS, for example, there’s a dedicated section for DLT binding where you just need to enter your Entity ID and approve the connection.
Important: Without PE-TM binding, even if you have approved templates, your messages won’t be delivered by the telecom operators.
Once the template is approved on the DLT portal, you need to register this template in your SMS platform. I used Fast2SMS as my platform, and the UI was intuitive enough to register the template. You’ll need to provide:
Once that’s done, you can use the Fast2SMS API to send SMS. They have an API key-based authentication and a simple GET/POST request to send the SMS.
Here’s a simple Python example using Fast2SMS:
import requests
def send_sms(phone_number, message_variables):
url = "https://www.fast2sms.com/dev/bulkV2"
payload = {
"sender_id": "YOURHEADER",
"message": "your_template_id",
"language": "english",
"route": "dlt",
"numbers": phone_number,
"variables_values": "|".join(message_variables)
}
headers = {
"authorization": "YOUR_API_KEY",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
return response.json()
# Example usage
phone = "9876543210"
variables = ["123456", "5 minutes"] # OTP and validity
result = send_sms(phone, variables)
print(result)
Rate Limits: Most SMS platforms have rate limits. Fast2SMS, for example, limits you based on your plan. Make sure to implement proper rate limiting in your application.
Error Handling: Always implement robust error handling. SMS delivery can fail for various reasons (invalid number, DND registry, network issues, etc.).
Logging: Maintain logs of all SMS sent, including timestamps, phone numbers, and delivery status. This helps with debugging and compliance.
Cost Optimization: Each SMS costs money. Implement logic to avoid duplicate sends and validate phone numbers before sending.
DND Registry: Some users are registered in the Do Not Disturb (DND) registry. Service Explicit messages won’t be delivered to them, but Service Implicit messages will.
Setting up automated SMS in 2026 India is significantly more complex than it was a few years ago, but these regulations have effectively reduced spam. The entire process - from DLT registration to sending your first SMS - can take anywhere from 3-7 days if everything goes smoothly.
Here’s a quick recap of the steps:
The initial setup might seem daunting, but once everything is in place, sending SMS becomes as simple as making an API call. The key is to be patient during the approval process and ensure all your documentation is in order.
Got questions about SMS automation? Feel free to reach out or leave a comment below!
Last updated: January 2026