India SMS Best Practices, Compliance, and Features
Learn everything about sending SMS in India, from DLT registration and TRAI compliance to API integration with Twilio, Sinch, and Bird. This comprehensive guide covers regulatory requirements, sender ID types, message templates, and best practices for successful SMS campaigns in India's market.
Learn everything about sending SMS in India, from DLT registration and TRAI compliance to API integration with Twilio, Sinch, and Bird. This comprehensive guide covers regulatory requirements, sender ID types, message templates, and best practices for successful SMS campaigns in India's market.
SMS Market Overview in India
Locale name:
India
ISO code:
IN
Region
Asia
Mobile country code (MCC)
404, 405
Dialing Code
+91
Market Conditions: India represents one of the world's largest and most dynamic SMS markets, with over 1.2 billion mobile subscribers. Major operators include Reliance Jio, Airtel, and Vodafone Idea. While OTT messaging apps like WhatsApp dominate consumer communications, SMS remains crucial for business messaging and authentication. Android devices command approximately 95% market share, with iOS devices accounting for 5%.
SMS Features and Technical Capabilities
India supports comprehensive SMS capabilities through both international and domestic routes, though regulatory requirements restrict certain features based on your routing choice.
Routing Options: International vs. Domestic
Feature
International Route
Domestic Route
Setup time
Immediate
2–4 weeks (requires DLT registration)
Sender ID format
5–9 digits (5NNNN–5NNNNNNN)
Alphanumeric with 2-letter prefix (e.g., "VM-TWILIO")
Cost
Higher per message
Lower per message
Delivery rate
85–90%
95–98%
Best for
Quick testing, global campaigns
Production, local campaigns
Two-Way SMS Support
Two-way SMS is not supported through standard A2P channels in India due to TRAI regulations. For two-way communication, explore dedicated short code services or alternative channels like WhatsApp Business API.
Concatenated Messages (Segmented SMS)
Support: Yes, though availability varies by sender ID type.
Message length rules: Messages split after 160 characters with GSM-7 encoding or 70 characters with UCS-2 encoding (Unicode/local languages).
Character limits per segment:
GSM-7 encoding: 160 characters
UCS-2 encoding: 70 characters
MMS Support
MMS messages automatically convert to SMS with an embedded URL link. This ensures compatibility across all devices while allowing rich media sharing through a web interface.
Recipient Phone Number Compatibility
Number Portability
Number portability is available in India. Users can switch carriers while keeping their phone numbers. This doesn't impact message delivery or routing.
Sending SMS to Landlines
You cannot send SMS to landline numbers in India. Attempts return a 400 error (code 21614) from the API, and you won't be charged.
India maintains strict SMS oversight through the Telecom Regulatory Authority of India (TRAI). You must comply with the Telecom Commercial Communications Customer Preference Regulations (TCCCPR) and register with the Distributed Ledger Technology (DLT) platform before sending commercial messages.
What is DLT (Distributed Ledger Technology)?
The DLT platform is a blockchain-based system mandated by TRAI to combat spam and unauthorized commercial messaging. Every business must register their:
Principal Entity (PE) ID: Your business registration number
Message Templates: Pre-approved message formats with variables
Sender IDs: Brand names or identifiers (6 characters, alphanumeric)
Consent Records: Documentation of customer opt-ins
How to Register on DLT Platform: Step-by-Step Guide
Choose your operator's DLT portal (Airtel, Jio, Vodafone Idea, or BSNL)
Create your Principal Entity account with business documents (GST, PAN, incorporation certificate)
Register your Sender IDs (approval takes 2–3 business days)
Submit message templates with variables marked (e.g., {#var#})
Wait for approval (3–5 business days per template)
Share PE ID and Template IDs with your SMS provider
Registration timeline: 7–10 business days total
SMS Consent Requirements and Opt-In Best Practices
You must obtain explicit consent for all commercial communications in India. Best practices:
Maintain detailed records of when and how you obtained consent
Use double opt-in verification processes
Provide clear information about message frequency and content type
Document consent duration and purpose
Implement regular consent refresh processes
HELP/STOP and Other Commands
Support these opt-out keywords in both English and local languages:
STOP, CANCEL, UNSUBSCRIBE, END
Local language equivalents
Respond to HELP messages with service information and opt-out instructions
Acknowledge opt-out requests within 24 hours
Example opt-out handler:
TypeScript
functionhandleOptOut(phoneNumber: string, keyword: string) {
if (['STOP', 'CANCEL', 'UNSUBSCRIBE', 'END'].includes(keyword.toUpperCase())) {
// Add to suppression list
suppressionList.add(phoneNumber);
// Send confirmationsendSMS(phoneNumber, 'You have been unsubscribed. Reply START to opt back in.');
// Log for compliancelogOptOut(phoneNumber, newDate(), keyword);
}
}
Do Not Call / Do Not Disturb Registries
India maintains a National Do Not Disturb (NDND) registry managed by TRAI:
Scrub your contact lists against the NDND registry
DND violations result in significant penalties
Maintain internal suppression lists for opted-out numbers
Implement real-time DND checking through DLT platforms
How to check NDND status:
Integrate with your DLT portal's NDND API
Upload contact lists for bulk verification
Remove flagged numbers before sending
Re-check monthly as users update preferences
Time Zone Sensitivity
India operates in a single time zone (IST, UTC+5:30). TRAI recommends:
Send promotional messages only between 9:00 AM and 9:00 PM IST
Send transactional messages 24/7
Avoid sending during major religious and cultural holidays
SMS Sender ID Types: Alphanumeric, Long Codes & Short Codes
Choose your sender type based on your use case, timeline, and budget:
Sender Type
Registration
Provisioning Time
Best For
Cost
Alphanumeric Sender ID
Required (DLT)
2–4 weeks
Brand recognition, marketing
Medium
International Long Code
Not required
Immediate
Testing, OTP, transactional
High
Short Code
Required (operator approval)
10–12 weeks
High-volume campaigns, alerts
Highest
Alphanumeric Sender ID
Operator network capability: Fully supported through domestic routes
Registration requirements: Pre-registration mandatory through DLT platform
Sender ID preservation: Mobile operators append a two-letter prefix (e.g., "VM-TWILIO")
Long Codes
Domestic vs. International: International long codes supported; domestic not available
Sender ID preservation: International sender IDs are replaced with 5–9 digit format (5NNNN–5NNNNNNN)
Provisioning time: Immediate for international routes
Use cases: Transactional messaging and two-factor authentication
Short Codes
Support: Available through select operators
Provisioning time: 10–12 weeks for approval and setup
Use cases: High-volume campaigns, time-sensitive alerts, marketing messages
Restricted Content: What You Cannot Send via SMS in India
These content types and industries face strict restrictions:
Gambling and betting
Adult content
Cryptocurrency promotions
Unauthorized financial services
Political messaging without approval
Religious content
Controlled substances
Cannabis products
Alcohol-related content
Content Filtering
Known carrier filtering rules:
Register and whitelist all URLs
Avoid shortened URLs (generally blocked)
Avoid keywords related to restricted industries
Match approved message templates
Tips to avoid blocking:
Register all URLs in DLT platform
Use approved message templates
Avoid spam trigger words ("free," "winner," "urgent," "click now")
Maintain consistent sender IDs
Message Template Examples
Approved templates:
Code
✅ "Your OTP for {#var#} is {#var#}. Valid for 10 minutes. Do not share."
✅ "Hi {#var#}, your order {#var#} has been shipped. Track at {#var#}."
✅ "Your appointment with Dr. {#var#} is confirmed for {#var#} at {#var#}."
Rejected templates:
Code
❌ "Congratulations! You won a prize. Click here: bit.ly/xyz"
(Reason: Shortened URL, spam trigger word)
❌ "Limited time offer! Get 90% off now!!!"
(Reason: Multiple exclamations, spam trigger words)
❌ "Check your account balance at mybank.com/login"
(Reason: Unregistered URL)
What happens to filtered messages:
Message fails at operator level
You receive error code 1001 (Invalid template) or 3xx (Content blocked)
Message is not delivered
You're charged for the attempt
Repeated violations may suspend your sender ID
SMS Best Practices: Messaging Strategy & Optimization
Messaging Strategy
Good vs. Bad Messages:
❌ Bad
✅ Good
"Dear customer, we are pleased to inform you that your transaction has been successfully processed." (19 words)
"Your payment of ₹{#var#} succeeded. Ref: {#var#}." (7 words)
"Click here for details" (no URL)
"View details at yourbrand.com/order/12345" (registered URL)
"URGENT!!! ACT NOW!!!"
"Your subscription expires in 3 days. Renew at {#var#}."
Best practices:
Keep messages under 160 characters when possible
Include clear calls-to-action
Use registered templates for consistency
Personalize messages using approved variable fields
Sending Frequency and Timing
Limit promotional messages to 3 per week per user
Respect time zone restrictions (9 AM – 9 PM IST for promotional)
Avoid sending during major holidays (Diwali, Holi, Eid, Christmas)
Space out bulk campaigns to prevent network congestion
Set up automated alerts for error thresholds (>5% failure rate)
Monitor delivery time trends by carrier
Troubleshooting SMS Delivery Issues in India
Messages Not Delivering
Symptoms: Messages sent successfully but not received
Solutions:
Verify DLT registration is complete and active
Check template ID matches message content exactly
Confirm sender ID is registered and approved
Test with different carriers to isolate operator issues
Verify recipient numbers are not on NDND registry
Template Rejection
Symptoms: Template approval pending for >7 days or rejected
Solutions:
Remove spam trigger words ("free," "winner," "urgent")
Register all URLs before template submission
Use proper variable syntax: {#var#}
Ensure template matches your registered business category
Contact DLT portal support with rejection reason
High Delivery Costs
Symptoms: Unexpected charges or high per-message cost
Solutions:
Switch from international to domestic routing (requires DLT)
Negotiate volume discounts with your provider
Optimize message length to avoid segmentation
Use GSM-7 encoding instead of UCS-2 when possible
Implement smart routing based on message type
Rate Limiting Issues
Symptoms: Error 1003 or 429 responses
Solutions:
Implement exponential backoff retry logic
Use message queuing systems (Redis, RabbitMQ)
Spread campaigns over longer time periods
Upgrade to enterprise rate limits
Use multiple sender IDs to distribute load
Recap and Additional Resources
Pre-Launch Compliance Checklist
Complete DLT registration with Principal Entity ID
Register all sender IDs with operators
Submit and approve all message templates
Implement consent collection and documentation
Set up NDND registry checking
Configure opt-out keyword handling
Test message delivery across all major carriers
Implement delivery receipt tracking
Set up error monitoring and alerting
Document compliance processes for audit
Frequently Asked Questions
Q: How long does DLT registration take?
A: 7–10 business days for complete setup (entity registration + sender IDs + template approval).
Q: Can I send messages without DLT registration?
A: Yes, using international routes, but delivery rates are lower (85–90% vs. 95–98%) and costs are higher.
Q: What happens if I send to a DND-registered number?
A: Transactional messages deliver normally. Promotional messages are blocked, and repeated violations result in penalties.
Q: Can I use the same template for multiple sender IDs?
A: Yes, but you must register the template separately for each sender ID in the DLT portal.
Q: How do I handle messages in multiple languages?
A: Register separate templates for each language. Use UCS-2 encoding for non-English scripts.
Key Takeaways
Compliance First: Complete DLT registration and template approval before sending
Technical Integration: Choose an API provider with strong India support
Monitoring: Implement robust tracking and error handling
Best Practices: Follow timing, content, and opt-out guidelines
Use Twilio's SMS API with your Account SID and Auth Token. Remember to include the +91 country code, your registered sender ID, and a status callback URL for delivery tracking and compliance in India.
Distributed Ledger Technology (DLT) registration is mandatory in India for sending commercial SMS messages. It's a TRAI-regulated system to combat spam and ensure compliance with the Telecom Commercial Communications Customer Preference Regulations (TCCCPR).
Explicit consent is required for all commercial SMS in India to protect consumers from unwanted messages. This is part of the Telecom Commercial Communications Customer Preference Regulations (TCCCPR) overseen by TRAI.
SMS messages in India are limited to 160 characters when using GSM-7 encoding. Longer messages are split into multiple segments (concatenated SMS). UCS-2 encoding allows only 70 characters per segment.
TRAI recommends sending promotional SMS messages between 9:00 AM and 9:00 PM IST. Transactional messages, however, can be sent 24/7.
No, sending SMS to landline numbers in India is not supported. Attempts to do so will result in a 400 error response (code 21614) from the API.
You must process opt-out requests within 24 hours. Maintain a database of opted-out numbers, include clear opt-out instructions in every message (STOP, CANCEL, etc.), and confirm the opt-out via SMS.
Violating the National Do Not Disturb (NDND) registry can result in significant penalties. Businesses must scrub their contact lists against the NDND registry and respect user preferences.
Alphanumeric sender IDs are supported in India, but they require pre-registration through the DLT platform. Mobile operators also append a two-letter prefix to these sender IDs.
Short codes are available for high-volume SMS campaigns, time-sensitive alerts, and marketing messages in India. They require a longer provisioning time of 10-12 weeks.
International long codes are supported for transactional and 2FA messages. Domestic long codes aren't available. Short codes are for high-volume marketing but require a longer setup time through operators.
Use Sinch's SMS API with your API token, service plan ID, and sender ID. Ensure to include India-specific parameters like the dlt_template_id and dlt_principal_entity_id for DLT compliance.
Content related to gambling, adult material, cryptocurrency, unauthorized financial services, and political messaging (without approval) is restricted. Religious content, controlled substances, alcohol, and cannabis products are also prohibited.
Register all URLs in the DLT platform and avoid using shortened URLs, which are generally blocked. Use approved message templates, avoid spam trigger words, and maintain consistent sender IDs.
Keep messages under 160 characters, include clear calls to action, personalize with approved variables, respect time zone and frequency limits (3 per week), and support local languages.
Learn everything about sending SMS in India, from DLT registration and TRAI compliance to API integration with Twilio, Sinch, and Bird. This comprehensive guide covers regulatory requirements, sender ID types, message templates, and best practices for successful SMS campaigns in India's market.
SMS Market Overview in India
Market Conditions: India represents one of the world's largest and most dynamic SMS markets, with over 1.2 billion mobile subscribers. Major operators include Reliance Jio, Airtel, and Vodafone Idea. While OTT messaging apps like WhatsApp dominate consumer communications, SMS remains crucial for business messaging and authentication. Android devices command approximately 95% market share, with iOS devices accounting for 5%.
SMS Features and Technical Capabilities
India supports comprehensive SMS capabilities through both international and domestic routes, though regulatory requirements restrict certain features based on your routing choice.
Routing Options: International vs. Domestic
Two-Way SMS Support
Two-way SMS is not supported through standard A2P channels in India due to TRAI regulations. For two-way communication, explore dedicated short code services or alternative channels like WhatsApp Business API.
Concatenated Messages (Segmented SMS)
Support: Yes, though availability varies by sender ID type.
Message length rules: Messages split after 160 characters with GSM-7 encoding or 70 characters with UCS-2 encoding (Unicode/local languages).
Character limits per segment:
MMS Support
MMS messages automatically convert to SMS with an embedded URL link. This ensures compatibility across all devices while allowing rich media sharing through a web interface.
Recipient Phone Number Compatibility
Number Portability
Number portability is available in India. Users can switch carriers while keeping their phone numbers. This doesn't impact message delivery or routing.
Sending SMS to Landlines
You cannot send SMS to landline numbers in India. Attempts return a 400 error (code 21614) from the API, and you won't be charged.
SMS Compliance Requirements: TRAI & DLT Registration
India maintains strict SMS oversight through the Telecom Regulatory Authority of India (TRAI). You must comply with the Telecom Commercial Communications Customer Preference Regulations (TCCCPR) and register with the Distributed Ledger Technology (DLT) platform before sending commercial messages.
What is DLT (Distributed Ledger Technology)?
The DLT platform is a blockchain-based system mandated by TRAI to combat spam and unauthorized commercial messaging. Every business must register their:
How to Register on DLT Platform: Step-by-Step Guide
{#var#})Registration timeline: 7–10 business days total
SMS Consent Requirements and Opt-In Best Practices
You must obtain explicit consent for all commercial communications in India. Best practices:
HELP/STOP and Other Commands
Support these opt-out keywords in both English and local languages:
Example opt-out handler:
function handleOptOut(phoneNumber: string, keyword: string) { if (['STOP', 'CANCEL', 'UNSUBSCRIBE', 'END'].includes(keyword.toUpperCase())) { // Add to suppression list suppressionList.add(phoneNumber); // Send confirmation sendSMS(phoneNumber, 'You have been unsubscribed. Reply START to opt back in.'); // Log for compliance logOptOut(phoneNumber, new Date(), keyword); } }Do Not Call / Do Not Disturb Registries
India maintains a National Do Not Disturb (NDND) registry managed by TRAI:
How to check NDND status:
Time Zone Sensitivity
India operates in a single time zone (IST, UTC+5:30). TRAI recommends:
SMS Sender ID Types: Alphanumeric, Long Codes & Short Codes
Choose your sender type based on your use case, timeline, and budget:
Alphanumeric Sender ID
Operator network capability: Fully supported through domestic routes
Registration requirements: Pre-registration mandatory through DLT platform
Sender ID preservation: Mobile operators append a two-letter prefix (e.g., "VM-TWILIO")
Long Codes
Domestic vs. International: International long codes supported; domestic not available
Sender ID preservation: International sender IDs are replaced with 5–9 digit format (5NNNN–5NNNNNNN)
Provisioning time: Immediate for international routes
Use cases: Transactional messaging and two-factor authentication
Short Codes
Support: Available through select operators
Provisioning time: 10–12 weeks for approval and setup
Cost: ₹50,000–₹2,00,000 setup fee + monthly rental (₹25,000–₹75,000)
Application process: Contact operators directly (Airtel, Jio, Vodafone Idea)
Use cases: High-volume campaigns, time-sensitive alerts, marketing messages
Restricted Content: What You Cannot Send via SMS in India
These content types and industries face strict restrictions:
Content Filtering
Known carrier filtering rules:
Tips to avoid blocking:
Message Template Examples
Approved templates:
Rejected templates:
What happens to filtered messages:
SMS Best Practices: Messaging Strategy & Optimization
Messaging Strategy
Good vs. Bad Messages:
Best practices:
Sending Frequency and Timing
Localization
Localization tips:
Opt-Out Management
Testing and Monitoring
Expected performance benchmarks:
Testing checklist:
SMS API Integration: Twilio, Sinch & Bird for India
Twilio
Twilio provides SMS API with features for India's regulatory requirements. Authenticate with Account SID and Auth Token.
import { Twilio } from 'twilio'; // Initialize client with authentication credentials const client = new Twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN); // Function to send SMS to India with DLT compliance async function sendSMSToIndia( to: string, message: string, entityId: string, templateId: string ) { try { // Create message with required parameters for India const response = await client.messages.create({ to: `+91${to}`, // India country code from: 'YOUR_REGISTERED_SENDER_ID', // DLT registered sender ID body: message, // DLT compliance parameters messagingServiceSid: 'YOUR_MESSAGING_SERVICE_SID', statusCallback: 'YOUR_WEBHOOK_URL', // India-specific DLT parameters contentSid: templateId, contentVariables: JSON.stringify({ entity_id: entityId }) }); console.log(`Message sent successfully: ${response.sid}`); return response; } catch (error) { // Handle India-specific errors if (error.code === 21614) { console.error('Invalid phone number (landline or invalid format)'); } else if (error.code === 21408) { console.error('DLT registration failure – check entity ID and template ID'); } else if (error.code === 30007) { console.error('Message filtered by carrier – check template and content'); } else { console.error('Error sending message:', error.message); } throw error; } }Sinch
Sinch offers dedicated India SMS capabilities with DLT compliance support built-in.
import axios from 'axios'; interface SinchSMSConfig { apiToken: string; servicePlanId: string; senderId: string; } class SinchSMSService { private readonly baseUrl: string; private readonly config: SinchSMSConfig; constructor(config: SinchSMSConfig) { this.config = config; this.baseUrl = 'https://sms.api.sinch.com/xms/v1'; } async sendSMS( to: string, message: string, templateId: string, entityId: string ) { try { const response = await axios.post( `${this.baseUrl}/${this.config.servicePlanId}/batches`, { from: this.config.senderId, to: [`+91${to}`], body: message, // India-specific parameters dlt_template_id: templateId, dlt_principal_entity_id: entityId }, { headers: { 'Authorization': `Bearer ${this.config.apiToken}`, 'Content-Type': 'application/json' } } ); return response.data; } catch (error) { // Handle India-specific errors if (axios.isAxiosError(error)) { const status = error.response?.status; const errorCode = error.response?.data?.code; if (status === 400 && errorCode === 'invalid_dlt_params') { console.error('Invalid DLT parameters – verify entity ID and template ID'); } else if (status === 403) { console.error('Sender ID not authorized – complete DLT registration'); } else if (status === 429) { console.error('Rate limit exceeded – implement retry with exponential backoff'); } } console.error('Sinch SMS Error:', error); throw error; } } }Bird
Bird's API provides specialized features for India's SMS market with built-in DLT compliance.
import axios from 'axios'; class BirdSMSService { private readonly apiKey: string; private readonly baseUrl: string; constructor(apiKey: string) { this.apiKey = apiKey; this.baseUrl = 'https://api.bird.com/v1'; } async sendSMS(to: string, message: string, templateId: string) { try { const response = await axios.post( `${this.baseUrl}/messages`, { destination: `+91${to}`, message_text: message, sender_id: 'YOUR_SENDER_ID', template_id: templateId, entity_id: 'YOUR_ENTITY_ID' }, { headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' } } ); return response.data; } catch (error) { console.error('Bird SMS Error:', error); throw error; } } }API Rate Limits and Throughput
Best practices:
Error Handling and Reporting
Common error codes and solutions:
Retry strategies:
async function sendWithRetry( sendFunction: () => Promise<any>, maxRetries: number = 3 ): Promise<any> { let lastError; for (let attempt = 0; attempt < maxRetries; attempt++) { try { return await sendFunction(); } catch (error) { lastError = error; // Don't retry for permanent failures if (isPermanentError(error)) { throw error; } // Exponential backoff: 1s, 2s, 4s const delayMs = Math.pow(2, attempt) * 1000; await new Promise(resolve => setTimeout(resolve, delayMs)); } } throw lastError; } function isPermanentError(error: any): boolean { const permanentCodes = [1001, 1002, 21614, 30007]; return permanentCodes.includes(error.code); }Monitoring best practices:
Troubleshooting SMS Delivery Issues in India
Messages Not Delivering
Symptoms: Messages sent successfully but not received
Solutions:
Template Rejection
Symptoms: Template approval pending for >7 days or rejected
Solutions:
{#var#}High Delivery Costs
Symptoms: Unexpected charges or high per-message cost
Solutions:
Rate Limiting Issues
Symptoms: Error 1003 or 429 responses
Solutions:
Recap and Additional Resources
Pre-Launch Compliance Checklist
Frequently Asked Questions
Q: How long does DLT registration take? A: 7–10 business days for complete setup (entity registration + sender IDs + template approval).
Q: Can I send messages without DLT registration? A: Yes, using international routes, but delivery rates are lower (85–90% vs. 95–98%) and costs are higher.
Q: What happens if I send to a DND-registered number? A: Transactional messages deliver normally. Promotional messages are blocked, and repeated violations result in penalties.
Q: Can I use the same template for multiple sender IDs? A: Yes, but you must register the template separately for each sender ID in the DLT portal.
Q: How do I handle messages in multiple languages? A: Register separate templates for each language. Use UCS-2 encoding for non-English scripts.
Key Takeaways
Next Steps
Review Regulations
Legal Compliance
Technical Setup
Additional Resources
Industry Guidelines: