sms compliance
sms compliance
El Salvador SMS Guide: API Integration, Compliance & Best Practices 2025
Complete guide to SMS messaging in El Salvador: API integration with Twilio, Sinch, and MessageBird, compliance requirements, sender ID options, and optimization strategies for businesses.
El Salvador SMS Best Practices, Compliance, and Features
SMS Market Overview in El Salvador
| Locale name: | El Salvador |
|---|---|
| ISO code: | SV |
| Region | North America |
| Mobile country code (MCC) | 706 |
| Dialing Code | +503 |
Market Conditions: El Salvador maintains a robust mobile communications market with widespread SMS adoption. Three major operators dominate the ecosystem: Tigo, Movistar, and Claro. SMS remains critical for business communications and authentication despite growing WhatsApp usage, offering universal reach and proven reliability. Android devices significantly outnumber iOS in the region, shaping messaging platform choices and user behavior.
Key SMS Features and Capabilities in El Salvador
El Salvador supports standard SMS features including concatenated messages and MMS conversion. Two-way messaging capabilities are restricted.
Two-way SMS Support
Major messaging providers do not support two-way SMS in El Salvador. This restriction impacts interactive messaging campaigns and automated response systems.
Concatenated Messages (Segmented SMS)
Support: Yes, concatenation is supported for most sender ID types.
Message length rules: Messages split after 160 characters for GSM-7 encoding or 70 characters for Unicode (UCS-2) encoding.
Encoding considerations: The system supports both GSM-7 and UCS-2 encodings, automatically splitting and rejoining messages based on character encoding.
Message Segmentation by Length
| Message Length | GSM-7 Encoding | UCS-2 Encoding | Segments |
|---|---|---|---|
| Up to 160 chars | ✓ Single | – | 1 |
| Up to 70 chars | – | ✓ Single | 1 |
| 161–306 chars | ✓ Splits | – | 2 |
| 71–134 chars | – | ✓ Splits | 2 |
| 307–459 chars | ✓ Splits | – | 3 |
| 135–201 chars | – | ✓ Splits | 3 |
MMS Support
The system automatically converts MMS messages to SMS with an embedded URL link to the media content, ensuring device compatibility while preserving rich media sharing.
Recipient Phone Number Compatibility
Number Portability
El Salvador supports number portability, letting users keep their phone numbers when switching carriers. Messages route correctly through the current carrier network without impacting delivery.
Sending SMS to Landlines
El Salvador does not support SMS to landline numbers. Landline message attempts return a 400 error (code 21614) with no delivery and no charge.
SMS Compliance and Regulatory Requirements in El Salvador
The Superintendencia General de Electricidad y Telecomunicaciones (SIGET) regulates El Salvador's telecommunications sector. Businesses must follow general consumer protection regulations and international messaging best practices while SMS marketing laws continue to develop.
Consent and Opt-In Requirements
Explicit Consent Requirements:
- Obtain clear, documented opt-in consent before sending any marketing messages
- Maintain detailed records of when and how consent was obtained
- Include clear terms of service and privacy policy information during opt-in
- Specify message frequency and content type during the consent process
Example Spanish Opt-In Message:
¡Hola! Suscríbete para recibir ofertas exclusivas de [TU MARCA].
Frecuencia: 4–5 mensajes/mes. Responde STOP para cancelar.
Términos: [URL]
HELP/STOP and Other Commands
All SMS campaigns must support standard opt-out keywords:
- Spanish: "STOP," "CANCELAR," "NO" for opt-out | "AYUDA" for assistance
- English: "STOP," "UNSUBSCRIBE" for opt-out | "HELP" for assistance
- Recognize commands in both Spanish and English (case-insensitive)
- Send response messages in the same language as the received command
Example STOP Response (Spanish):
Has sido dado de baja. No recibirás más mensajes de [TU MARCA].
Para ayuda: contacto@tumarca.com
Example HELP Response (Spanish):
[TU MARCA] – Ofertas y actualizaciones. 4–5 msgs/mes.
STOP para cancelar. Ayuda: contacto@tumarca.com
Do Not Call / Do Not Disturb Registries
El Salvador does not maintain a centralized Do Not Call registry. Businesses must:
- Maintain their own suppression lists
- Honor opt-out requests within 24 hours
- Implement database management to prevent messaging blocked numbers
- Audit and clean contact lists regularly
Time Zone Sensitivity
El Salvador follows Central Standard Time (CST/GMT-6):
- Recommended Sending Hours: 8:00 AM to 8:00 PM CST
- Avoid Sending: Sundays and national holidays unless urgent
- Emergency Messages: Can be sent 24/7 for critical notifications
Major El Salvador Holidays to Avoid:
- January 1 – New Year's Day
- March/April – Holy Week (Semana Santa)
- May 1 – Labor Day
- August 6 – Feast of El Salvador del Mundo (Patron Saint)
- September 15 – Independence Day
- November 2 – Day of the Dead
- December 25 – Christmas
SMS Sender ID Types and Phone Number Options for El Salvador
Alphanumeric Sender ID
Operator network capability: Not supported by El Salvador mobile operators
Registration requirements: N/A
Sender ID preservation: Sender IDs are overwritten with either a shortcode or longcode outside the platform
Long Codes
Domestic vs. International:
- Domestic long codes are supported but not available through international providers
- International long codes are supported for cross-border messaging
Sender ID preservation: No, original sender IDs are not preserved
Provisioning time: 1–2 business days for international long codes
Use cases: Ideal for transactional messages and two-factor authentication
Short Codes
Support: Available and supported in El Salvador
Provisioning time: 8–12 weeks for approval and implementation
Use cases:
- High-volume marketing campaigns
- Customer service applications
- Two-factor authentication
- Alert systems
Short Code vs Long Code Comparison
| Feature | Short Code | Long Code |
|---|---|---|
| Number Format | 4–6 digits | +503XXXXXXXX |
| Provisioning Time | 8–12 weeks | 1–2 business days |
| Best For | High-volume campaigns | Transactional messages |
| Throughput | High (100+ msg/sec) | Moderate (1–10 msg/sec) |
| Two-way SMS | Not supported | Not supported |
| Recognition | High brand visibility | Lower visibility |
Restricted SMS Content, Industries, and Use Cases
Prohibited Content:
- Gambling and betting services
- Adult content or explicit material
- Unauthorized pharmaceutical promotions
- Political campaign messages without proper authorization
- Cryptocurrency and high-risk investment schemes
Content Filtering
Carrier Filtering Rules:
- Messages containing blocked keywords are automatically filtered
- URLs must be from approved domains
- Message frequency limits per number are enforced
Tips to Avoid Blocking:
- Avoid excessive punctuation (!!!, ???) and special characters
- Use approved URL shorteners
- Maintain consistent sending patterns
- Include clear business identification
- Avoid spam trigger words (FREE, WIN, URGENT, ACT NOW, LIMITED TIME)
Common Spam Trigger Words to Avoid:
- FREE, GRATIS
- WIN, GANAR, PREMIO
- URGENT, URGENTE
- ACT NOW, ACTÚA YA
- LIMITED TIME, TIEMPO LIMITADO
- CLICK HERE, HAZ CLIC AQUÍ
- GUARANTEED, GARANTIZADO
Best Practices for Sending SMS in El Salvador
Messaging Strategy
- Keep messages under 160 characters when possible
- Include clear call-to-actions (CTAs)
- Use personalization tokens (name, account info) sparingly and only with explicit consent
- Maintain consistent branding
Effective CTAs: ✓ "Reply YES to confirm your appointment" ✓ "Visit bit.ly/offer123 to claim your 20% discount" ✓ "Call us at +503-1234-5678 for support"
Ineffective CTAs: ✗ "Check our website for more info" (vague, no URL) ✗ "Act now!" (spammy, no specific action) ✗ "Click here" (no context)
Sending Frequency and Timing
- Limit to 4–5 messages per month per recipient (industry best practice)
- Space campaigns at least 72 hours apart
- Respect local holidays and cultural events
- Monitor engagement metrics: open rates, click-through rates, opt-out rates, delivery rates
Localization
- Primary language: Spanish
- Consider using both Spanish and English for international businesses
- Date format: DD/MM/YYYY (e.g., 04/10/2025)
- Time format: 24-hour format common, but 12-hour with AM/PM also acceptable
- Respect cultural nuances and local expressions
Spanish SMS Templates:
Order Confirmation:
Hola [Nombre], tu pedido #[ID] ha sido confirmado.
Entrega estimada: [Fecha]. Rastrea aquí: [URL]
Appointment Reminder:
Recordatorio: Tienes una cita el [Fecha] a las [Hora] en [Lugar].
Responde SI para confirmar o NO para cancelar.
Two-Factor Authentication:
Tu código de verificación es: [CÓDIGO]. Válido por 10 minutos.
No compartas este código.
Opt-Out Management
- Process opt-outs within 24 hours
- Send confirmation message for opt-outs
- Maintain centralized opt-out database
- Audit opt-out compliance regularly
Example Opt-Out Processing Workflow:
async function processOptOut(phoneNumber: string, keyword: string) {
// 1. Add to suppression list
await db.suppressionList.create({
phoneNumber,
optOutDate: new Date(),
keyword,
source: 'SMS'
});
// 2. Send confirmation
const confirmMsg = keyword.match(/stop|cancelar|no/i)
? "Has sido dado de baja. No recibirás más mensajes."
: "You have been unsubscribed. You will receive no further messages.";
await sendSMS(phoneNumber, confirmMsg);
// 3. Log event
logger.info(`Opt-out processed: ${phoneNumber}`);
}Testing and Monitoring
- Test across all major carriers (Tigo, Movistar, Claro)
- Monitor delivery rates by carrier
- Track engagement metrics
- Run A/B tests on message content
- Maintain delivery rate benchmarks (target: >95% for El Salvador)
Acceptable Delivery Rate Benchmarks for El Salvador:
- Excellent: >98%
- Good: 95–98%
- Acceptable: 90–95%
- Poor: <90% (investigate immediately)
Troubleshooting Low Delivery Rates:
- Check carrier-specific issues: Test each carrier separately
- Review content filtering: Remove spam trigger words
- Verify number format: Ensure E.164 compliance (+503XXXXXXXX)
- Monitor error codes: Track 21614, 30003, 30007 errors
- Adjust sending speed: Slow down to avoid rate limits
- Review opt-out list: Ensure suppression list is current
SMS API Integration Options for El Salvador
Twilio
Twilio provides a robust SMS API with comprehensive support for El Salvador messaging.
Authentication & Setup:
- Account SID and Auth Token required (find in Twilio Console → Account → API Keys)
- E.164 format mandatory for phone numbers (+503)
- Supports webhook callbacks for delivery status
import { Twilio } from 'twilio';
// Initialize Twilio client
const client = new Twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
async function sendSMSToElSalvador(to: string, message: string) {
try {
// Ensure number is in E.164 format
const formattedNumber = to.startsWith('+503') ? to : `+503${to}`;
const response = await client.messages.create({
body: message,
to: formattedNumber,
from: process.env.TWILIO_PHONE_NUMBER,
// Optional status callback URL
statusCallback: 'https://your-webhook.com/status'
});
console.log(`Message sent! SID: ${response.sid}`);
return response;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}Common Twilio Error Codes:
- 21614: Invalid phone number format
- 21211: Invalid "To" phone number
- 21408: Permission denied for sending to this number
- 30003: Unreachable destination handset
- 30005: Unknown destination handset
- 30007: Message blocked by carrier (content filtering)
Example Webhook Handler for Delivery Status:
import express from 'express';
const app = express();
app.use(express.urlencoded({ extended: false }));
app.post('/status', (req, res) => {
const { MessageSid, MessageStatus, To, ErrorCode } = req.body;
console.log(`Message ${MessageSid} to ${To}: ${MessageStatus}`);
if (ErrorCode) {
console.error(`Error ${ErrorCode} occurred`);
// Log to monitoring system
}
// Update database with delivery status
db.messages.update({ sid: MessageSid }, { status: MessageStatus });
res.sendStatus(200);
});Sinch
Sinch offers direct carrier connections in El Salvador with high deliverability rates.
Key Features:
- REST API with JSON payload
- Batch messaging support (up to 1,000 recipients per request)
- Delivery receipt webhooks
import axios from 'axios';
interface SinchMessage {
to: string[];
message: string;
from: string;
}
async function sendSinchSMS(message: SinchMessage) {
const SINCH_API_TOKEN = process.env.SINCH_API_TOKEN;
const SINCH_SERVICE_PLAN_ID = process.env.SINCH_SERVICE_PLAN_ID;
try {
const response = await axios.post(
`https://sms.api.sinch.com/xms/v1/${SINCH_SERVICE_PLAN_ID}/batches`,
message,
{
headers: {
'Authorization': `Bearer ${SINCH_API_TOKEN}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
} catch (error) {
console.error('Sinch SMS Error:', error);
throw error;
}
}Batch Optimization Guidelines:
- Batch size: 100–1,000 recipients per request (optimal: 500)
- Use batching for campaigns, not time-sensitive messages
- Monitor batch status via webhook or polling
MessageBird
MessageBird provides reliable SMS delivery with advanced features for El Salvador.
import messagebird from 'messagebird';
const messageBirdClient = messagebird(process.env.MESSAGEBIRD_API_KEY);
interface MessageParams {
recipient: string;
message: string;
originator: string;
}
function sendMessageBirdSMS({ recipient, message, originator }: MessageParams): Promise<any> {
return new Promise((resolve, reject) => {
messageBirdClient.messages.create({
originator: originator,
recipients: [recipient],
body: message,
datacoding: 'auto' // Automatic encoding detection
}, (err, response) => {
if (err) {
reject(err);
return;
}
resolve(response);
});
});
}Advanced Features:
- Automatic encoding detection (GSM-7 vs UCS-2)
- Delivery reports with timestamps
- Balance alerts and usage tracking
- Multi-channel support (SMS, Voice, WhatsApp)
Plivo
Plivo offers competitive rates and reliable delivery for El Salvador SMS.
import plivo from 'plivo';
const client = new plivo.Client(
process.env.PLIVO_AUTH_ID,
process.env.PLIVO_AUTH_TOKEN
);
async function sendPlivoSMS(to: string, message: string) {
try {
const response = await client.messages.create({
src: process.env.PLIVO_PHONE_NUMBER,
dst: to,
text: message,
// Optional parameters for El Salvador
url: 'https://your-callback-url.com',
method: 'POST'
});
return response;
} catch (error) {
console.error('Plivo SMS Error:', error);
throw error;
}
}API Provider Pricing Comparison for El Salvador
| Provider | Cost per SMS | Throughput | Best For |
|---|---|---|---|
| Twilio | $0.0450–$0.0550 | 250 msg/sec | Enterprise, high reliability |
| Sinch | $0.0400–$0.0500 | 30 msg/sec | Batch campaigns, cost-effective |
| MessageBird | $0.0420–$0.0520 | 60 msg/sec | Multi-channel integration |
| Plivo | $0.0380–$0.0480 | 50 msg/sec | Budget-conscious, SMBs |
Prices are approximate and vary by volume commitments
API Rate Limits and Throughput
Standard Rate Limits:
- Twilio: 250 messages/second
- Sinch: 30 messages/second
- MessageBird: 60 messages/second
- Plivo: 50 messages/second
Throughput Management Strategies:
- Low volume (<1,000 msg/day): Direct API calls, no queue needed
- Medium volume (1,000–50,000 msg/day): Implement queue system (Redis/RabbitMQ)
- High volume (>50,000 msg/day): Use batch API endpoints with multiple queues
Exponential Backoff Implementation:
async function sendWithRetry(sendFn: () => Promise<any>, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await sendFn();
} catch (error: any) {
if (error.code === 429 && attempt < maxRetries - 1) {
const delay = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
console.log(`Rate limited. Retrying in ${delay}ms...`);
await new Promise(resolve => setTimeout(resolve, delay));
} else {
throw error;
}
}
}
}Queue System Example (Redis):
import Queue from 'bull';
const smsQueue = new Queue('sms-queue', {
redis: { host: 'localhost', port: 6379 }
});
// Add messages to queue
smsQueue.add({ to: '+50312345678', message: 'Hello!' }, {
attempts: 3,
backoff: { type: 'exponential', delay: 2000 }
});
// Process queue
smsQueue.process(async (job) => {
const { to, message } = job.data;
return await sendSMS(to, message);
});Error Handling and Reporting
Implement comprehensive logging and error tracking:
- Logger: Winston, Bunyan, or Pino
- Monitoring: Track delivery receipts via webhooks
- Alerting: Set up alerts for error rates >5%
- Storage: Store message status in database for audit
Common Error Codes Across Providers:
- 21614 / 1004: Invalid number format
- 30003 / 2001: Unreachable destination
- 30007 / 3001: Carrier filtering (content blocked)
- 429: Rate limit exceeded
Example Winston Logging Configuration:
import winston from 'winston';
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'sms.log' })
]
});
// Log message attempts
logger.info('SMS sent', {
to: '+50312345678',
provider: 'twilio',
messageId: 'SM1234567890',
status: 'queued'
});
// Log errors
logger.error('SMS failed', {
to: '+50312345678',
provider: 'twilio',
errorCode: '30007',
errorMessage: 'Message blocked by carrier'
});Alert Setup Example:
// Monitor error rates
async function checkErrorRates() {
const last24Hours = new Date(Date.now() - 24 * 60 * 60 * 1000);
const stats = await db.messages.aggregate([
{ $match: { createdAt: { $gte: last24Hours } } },
{ $group: {
_id: null,
total: { $sum: 1 },
errors: { $sum: { $cond: [{ $ne: ['$status', 'delivered'] }, 1, 0] } }
}}
]);
const errorRate = (stats[0].errors / stats[0].total) * 100;
if (errorRate > 5) {
// Send alert to monitoring system
alerting.send({
severity: 'high',
message: `SMS error rate is ${errorRate.toFixed(2)}% (threshold: 5%)`,
data: stats[0]
});
}
}
// Run every hour
setInterval(checkErrorRates, 60 * 60 * 1000);Summary and Additional Resources
Key Takeaways:
- Always use E.164 number formatting (+503XXXXXXXX)
- Implement proper opt-out handling (STOP, CANCELAR)
- Respect local time zones (CST/GMT-6) and sending hours (8 AM–8 PM)
- Monitor delivery rates (target >95%) and error codes
- Maintain consent records and suppression lists
Next Steps:
- Review SIGET regulations at https://www.siget.gob.sv
- Implement error handling and monitoring with Winston or similar
- Set up delivery receipt webhooks for real-time status tracking
- Test throughput with small batches (100–500 messages)
- Monitor carrier filtering rules and adjust content accordingly
Frequently Asked Questions
Q: Why is my delivery rate below 90%? A: Check for invalid number formats (must be E.164: +503XXXXXXXX), content filtering by carriers (remove spam trigger words), or landline numbers in your list (not supported).
Q: How do I get my domain approved for URL inclusion? A: Contact your SMS provider (Twilio, Sinch, etc.) to register your domain. Use established URL shorteners (bit.ly, tinyurl.com) as alternatives.
Q: Can I send promotional messages on Sundays? A: While not legally prohibited, it's best practice to avoid Sundays and national holidays unless urgent.
Q: What happens if I exceed the rate limit? A: You'll receive a 429 error. Implement exponential backoff (see examples above) to retry automatically.
Q: Do I need different sender IDs for different carriers? A: No, the carrier or platform assigns sender IDs automatically in El Salvador since alphanumeric sender IDs are not supported.
Common Issues and Solutions
| Issue | Cause | Solution |
|---|---|---|
| 400 error (21614) | Invalid number format or landline | Validate E.164 format; exclude landlines |
| Low delivery rate | Content filtering | Remove spam words; test with plain text |
| Messages not received | Carrier blocking | Check sender reputation; reduce frequency |
| Rate limit errors | Exceeding throughput | Implement queue system; add retry logic |
| High costs | Multi-segment messages | Keep under 160 chars (GSM-7) or 70 (UCS-2) |
Additional Resources:
- SIGET Telecommunications Guidelines: https://www.siget.gob.sv/telecomunicaciones/
- El Salvador Consumer Protection Law: https://www.defensoria.gob.sv/
- Carrier Integration Guides:
- Tigo: https://tigo.com.sv/empresas
- Movistar: https://www.movistar.com.sv/empresas
- Claro: https://www.claro.com.sv/empresas
Frequently Asked Questions
How to send SMS messages to El Salvador?
Use a reputable SMS API provider like Twilio, Sinch, MessageBird, or Plivo. Ensure all phone numbers are in E.164 format (+503) and comply with local regulations and best practices for sending SMS in El Salvador. Remember to handle opt-outs and monitor delivery rates.
What is the preferred SMS encoding for El Salvador?
Both GSM-7 and UCS-2 encodings are supported in El Salvador. Messages are automatically split and rejoined based on the chosen encoding, with GSM-7 allowing 160 characters and UCS-2 allowing 70 characters before splitting.
Why does El Salvador not support two-way SMS?
Two-way SMS is not supported through major messaging providers, which limits interactive messaging campaigns and automated responses. This impacts businesses seeking real-time engagement with customers via SMS.
When should I send marketing SMS in El Salvador?
The recommended sending window is between 8:00 AM and 8:00 PM CST, avoiding Sundays and national holidays unless it's an emergency. Respecting local time zones and cultural sensitivities is essential for successful SMS campaigns in El Salvador.
What are the rules for sending SMS to landlines in El Salvador?
Sending SMS to landlines in El Salvador is not supported. Attempts to do so will result in a 400 response error (code 21614). No message will be delivered, and no charges will be incurred.
How to manage opt-outs for SMS campaigns in El Salvador?
You must support opt-out keywords like "STOP", "CANCELAR", "NO", "AYUDA", and "HELP" in both English and Spanish. Process opt-out requests within 24 hours, send a confirmation message, and maintain a centralized opt-out database for compliance.
What SMS sender ID types are available in El Salvador?
While alphanumeric sender IDs are not supported, you can utilize long codes and short codes. International long codes are commonly used for transactional messages, while short codes are better suited for high-volume marketing campaigns and two-factor authentication in El Salvador.
How to comply with SMS regulations in El Salvador?
Obtain explicit opt-in consent before sending marketing messages. Maintain records of consent, adhere to consumer protection regulations, and respect best practices for messaging, including honoring opt-out requests and avoiding prohibited content.
Can I use an alphanumeric sender ID for my SMS campaign in El Salvador?
No, alphanumeric sender IDs are not supported by El Salvador mobile operators. Sender IDs will be overwritten with a short code or long code outside the platform.
What are the prohibited content categories for SMS in El Salvador?
Gambling, adult content, unauthorized pharmaceutical promotions, and political campaign messages without authorization are strictly prohibited. Cryptocurrency and high-risk investment schemes are also among the restricted content categories for SMS in El Salvador.
How to handle SMS API rate limits in El Salvador?
Standard rate limits vary per provider (e.g., Twilio: 250/second, Sinch: 30/second). Implement strategies like exponential backoff for retries, queue systems for high volume, batch messaging, and monitoring delivery rates to adjust sending speed.
El Salvador SMS what are the best practices?
Keep messages concise (under 160 characters), include clear call-to-actions, personalize thoughtfully, maintain consistent branding, limit frequency to 4-5 messages per recipient per month, and respect local holidays.
What is the MCC for El Salvador?
The Mobile Country Code (MCC) for El Salvador is 706. This is a crucial piece of information used for routing international SMS messages and identifying the country's mobile network.
What is the process for getting a short code in El Salvador?
Short codes are available in El Salvador, but the provisioning process takes 8-12 weeks for approval and implementation. They are ideal for high-volume marketing campaigns, customer service, two-factor authentication, and alert systems.
What are some SMS API integration options for El Salvador?
Several providers offer reliable SMS API integrations for El Salvador, including Twilio, Sinch, MessageBird, and Plivo. Each platform offers different features and pricing, allowing businesses to choose the best fit for their needs.