sms compliance
sms compliance
Liechtenstein SMS Guide: Send SMS to Liechtenstein (2025 Regulations & API)
Complete guide to sending SMS in Liechtenstein. Learn GDPR compliance, mobile operators (FL1, 7acht, Cubic), alphanumeric sender IDs, API integration with Twilio, Sinch & Bird, and best practices for 2025.
Liechtenstein SMS Guide: Best Practices, Compliance, and API Integration
Looking to send SMS to Liechtenstein? This comprehensive guide covers everything you need: GDPR compliance requirements, mobile operators (FL1, 7acht, Cubic Telecom), technical specifications, and API integration with Twilio, Sinch, and Bird. Learn how to implement SMS authentication, marketing campaigns, and transactional notifications while meeting European Economic Area (EEA) regulations and configure alphanumeric sender IDs correctly for maximum deliverability.
Liechtenstein SMS Market Overview: Operators & Network Details
| Locale name: | Liechtenstein |
|---|---|
| ISO code: | LI |
| Region | Europe |
| Mobile country code (MCC) | 295 |
| Dialing Code | +423 |
Market Conditions: Liechtenstein maintains a modern telecommunications infrastructure with high mobile penetration rates despite its small size. As of January 2025, 53,900 active mobile connections were active—equivalent to 135% of the total population—indicating many residents use multiple mobile subscriptions. Three main operators serve the principality's mobile market: FL1 (Telecom Liechtenstein) as market leader, 7acht (Salt Liechtenstein AG), and Cubic Telecom. All operators use Mobile Country Code 295. Phone numbers follow a 7-digit format (+423 XXXXXXX), with mobile numbers starting with 6 or 7. Understanding E.164 phone number format is essential for proper SMS delivery. As of December 31, 2023, 3G services shut down completely. All operators now provide 4G/LTE services. As a European Economic Area (EEA) member, Liechtenstein follows European telecommunications standards and regulations. OTT messaging apps see wide adoption, but SMS remains important for business communications and authentication services.
SMS Delivery & Pricing: Expect delivery rates above 95% for well-configured campaigns. Typical SMS pricing ranges from $0.0161 to $0.0334 per message segment depending on provider and volume, with alphanumeric sender IDs often available at no extra cost.
Key SMS Features and Capabilities in Liechtenstein
Liechtenstein supports standard SMS features – including concatenated messages and alphanumeric sender IDs – while maintaining strict compliance with European telecommunications standards.
Two-way SMS Support
Two-way SMS is unavailable in Liechtenstein through standard API providers. Consider these alternatives for interactive messaging:
- WhatsApp Business API: Supports rich media and two-way conversations
- RCS (Rich Communication Services): Enhanced messaging with delivery receipts and typing indicators—learn more about iPhone RCS messaging
- Web-based chat widgets: Real-time communication through your website or app
Concatenated Messages (Segmented SMS)
Support: Yes – Liechtenstein supports concatenated messages.
Message length rules: 160 characters maximum for single SMS using GSM-7 encoding, or 70 characters for Unicode messages.
Encoding considerations: Both GSM-7 and UCS-2 encodings work. Use UCS-2 for messages containing special characters or non-Latin alphabets.
Segment billing: Carriers bill each segment separately. A 320-character GSM-7 message costs 2× a single SMS. A 161-character message requires 2 segments, with each limited to 153 characters (7 characters reserved for concatenation headers). Most carriers support up to 6–8 segments (approximately 918–1,224 characters). Keep messages under 320 characters for optimal deliverability.
MMS Support
MMS messages automatically convert to SMS with an embedded URL link. This conversion ensures delivery compatibility while letting recipients access multimedia content through secure web links.
Technical specifications:
- Maximum total size: 900 KB (including all attachments)
- Maximum single file: 600 KB
- Supported formats: JPEG, PNG, GIF, MP4, MP3
- Link expiration: Typically 30 days (provider-dependent)
- Security: HTTPS-only links with no authentication required
Recipient Phone Number Compatibility
Number Portability
Number portability is available in Liechtenstein. Users can keep their phone numbers when switching between mobile operators. This feature does not impact SMS delivery or routing.
Sending SMS to Landlines
Liechtenstein does not support sending SMS to landline numbers. Attempts to send messages to landlines fail and generate a 400 response error code (21614) through API services. Your account will not be charged for these failures.
SMS Compliance and GDPR Requirements in Liechtenstein
As a European Economic Area (EEA) member, Liechtenstein adheres to both GDPR and the E-Privacy Directive for electronic communications. The Office for Communications (Amt für Kommunikation) serves as the primary telecommunications regulator, while the Data Protection Authority (Datenschutzstelle) oversees privacy compliance.
GDPR Penalties: Violations of Liechtenstein's Data Protection Act (DSG) of October 4, 2018 result in monetary penalties up to 22 million Swiss francs or 4% of total worldwide annual turnover, depending on severity. Organizations sending SMS must maintain strict data protection standards to avoid penalties.
Consent and Opt-In
Explicit Consent Requirements:
- Obtain written or electronic consent before sending marketing messages
- Maintain consent records and make them easily accessible
- Clearly state the purpose of messaging during opt-in
- Use double opt-in for marketing campaigns (recommended)
Best Practices for Documentation:
- Store timestamp and source of consent
- Maintain detailed records of opt-in methods
- Keep proof of consent for at least 2 years
- Enable easy access to consent history for auditing
Recommended database schema for consent tracking:
CREATE TABLE user_consent (
user_id VARCHAR(255) PRIMARY KEY,
phone_number VARCHAR(20),
consent_given BOOLEAN,
consent_timestamp TIMESTAMP,
consent_source VARCHAR(50), -- 'web_form', 'api', 'sms_reply'
ip_address VARCHAR(45),
user_agent TEXT,
opt_out_timestamp TIMESTAMP NULL
);HELP/STOP and Other Commands
- Support STOP, STOPP, and ENDE in German
- Provide support information via HELP/HILFE commands
- Process all opt-out keywords within 24 hours
- Send confirmation messages in German or English
Do Not Call / Do Not Disturb Registries
Liechtenstein does not maintain a centralized Do Not Call registry. You must:
- Maintain internal suppression lists
- Honor opt-out requests immediately
- Remove numbers within 24 hours of receiving STOP commands
- Keep records of opted-out numbers for at least 5 years
Time Zone Sensitivity
Liechtenstein follows Central European Time (CET/CEST):
- Recommended Sending Hours: 08:00 – 20:00 CET
- Avoid Sending: Sundays and public holidays
- Emergency Messages: Permitted outside standard hours
- Best Practice: Schedule campaigns between 10:00 – 18:00 on business days
Liechtenstein SMS Sender IDs: Alphanumeric, Long Codes & Short Codes
Alphanumeric Sender ID for Liechtenstein SMS
Operator network capability: Fully supported across all Liechtenstein mobile networks
Registration requirements: No pre-registration required – dynamic usage allowed
Sender ID preservation: Yes – sender IDs appear exactly as specified
Formatting rules (industry standard):
- Length: 3–11 characters maximum
- Allowed characters: A-Z (uppercase and lowercase), 0–9, and spaces
- Must contain at least one letter (cannot be all numbers)
- Case-sensitive (appears exactly as sent)
- Prohibited: Generic sender IDs like "INFO," "SMS," "NOTICE" (use representative brand names)
Long Codes
Domestic vs. International:
- Domestic long codes unavailable due to regulatory restrictions and limited number availability in the small principality
- International long codes fully supported (particularly from neighboring countries like Switzerland, Austria, or pan-European providers)
Sender ID preservation: Yes – the original sender ID is preserved
Provisioning time: Typically 1–2 business days
Use cases: Ideal for transactional messages and two-factor authentication
Typical throughput: 1–10 messages per second depending on source country
Short Codes
Support: Not available in Liechtenstein
Provisioning time: N/A
Use cases: N/A
Restricted SMS Content, Industries, and Use Cases
Restricted Industries:
- Gambling and betting services
- Adult content
- Cryptocurrency promotions
- Unauthorized financial services
Regulated Industries:
- Banking: Comply with due diligence requirements and implement two-factor authentication (2FA) for transaction messages—see our guide on OTP and 2FA implementation
- Healthcare: Maintain patient confidentiality per GDPR Article 9 (special category data)
- Insurance services: Include clear disclaimers and obtain opt-in consent under E-Privacy Directive
Content Filtering
Known Carrier Rules:
- Use URLs from verified domains (registered business domains with valid SSL certificates)
- Limit capitalization to 30% of message content
- Limit special characters to 5% of message content
- Use no more than 3 consecutive punctuation marks
Tips to Avoid Blocking:
- Use registered sender IDs consistently (same sender for brand recognition)
- Maintain regular sending patterns (avoid sudden volume spikes >300% day-over-day)
- Avoid URL shorteners where possible (use branded short domains instead of bit.ly, goo.gl)
- Include clear opt-out instructions (e.g., "Reply STOP to unsubscribe")
Examples of filtered vs. allowed content:
- ❌ Blocked: "🎉🎉🎉 WIN NOW!!! Click http://bit.ly/xyz FREE MONEY!!!"
- ✅ Allowed: "Your order #12345 has shipped. Track: https://yourbrand.com/track"
Best Practices for Sending SMS in Liechtenstein
Messaging Strategy
- Keep messages under 160 characters when possible
- Include clear call-to-action
- Personalize using recipient's name or preferences
- Maintain consistent sender ID across campaigns
Sending Frequency and Timing
- Limit to 2–3 messages per week per recipient
- Respect quiet hours (20:00 – 08:00)
- Consider local holidays and events
- Space out bulk campaigns to avoid network congestion
Localization
- Primary language: German (preferred for 90%+ of population)
- Include English support (widely understood)
- Consider French and Italian for specific audiences
- Use local date/time formats (DD.MM.YYYY, 24-hour clock)
Sample message formats:
- Formal German: "Guten Tag [Name], Ihre Bestellung #12345 wurde versendet."
- Informal German: "Hallo [Name], deine Bestellung ist unterwegs! 📦"
- English: "Hello [Name], your order #12345 has been shipped."
Opt-Out Management
- Process opt-outs within 24 hours
- Send confirmation of opt-out
- Maintain single opt-out list across campaigns
- Audit opt-out database regularly
Testing and Monitoring
- Test across all major carriers (FL1, 7acht/Salt, Cubic Telecom)
- Monitor delivery rates daily (benchmark: >95%)
- Track opt-out rates and patterns (benchmark: <1.5%)
- Test opt-out functionality regularly
Expected benchmarks (industry data):
- Delivery rate: 95%+ (investigate if below 90%)
- Open rate: 90–98% (inherent to SMS)
- Click-through rate: 20%+ (for messages with links)
- Opt-out rate: <1.5% (higher rates indicate content issues)
SMS API integrations for Liechtenstein
Twilio
Twilio provides robust SMS capabilities for Liechtenstein through their REST API. Authenticate using your account SID and auth token credentials.
import * as Twilio from 'twilio';
// Initialize Twilio client
const client = new Twilio(
process.env.TWILIO_ACCOUNT_SID, // Your Account SID
process.env.TWILIO_AUTH_TOKEN // Your Auth Token
);
// Function to send SMS to Liechtenstein
async function sendSMSToLiechtenstein(
to: string,
message: string,
senderId: string
) {
try {
// Ensure proper formatting for Liechtenstein numbers
const formattedNumber = to.startsWith('+423') ? to : `+423${to}`;
const response = await client.messages.create({
body: message,
from: senderId, // Alphanumeric sender ID or phone number
to: formattedNumber,
// Optional parameters for delivery tracking
statusCallback: 'https://your-webhook.com/status'
});
console.log(`Message sent successfully! SID: ${response.sid}`);
return response;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}Sinch
Sinch offers direct carrier connections for Liechtenstein messaging. Authenticate using your API token and service plan ID.
import { SinchClient } from '@sinch/sdk-core';
// Initialize Sinch client
const sinchClient = new SinchClient({
projectId: process.env.SINCH_PROJECT_ID,
keyId: process.env.SINCH_KEY_ID,
keySecret: process.env.SINCH_KEY_SECRET
});
// Function to send SMS via Sinch
async function sendSinchSMS(
recipientNumber: string,
messageText: string
) {
try {
const response = await sinchClient.sms.batches.send({
sendSMSRequestBody: {
to: [recipientNumber],
from: "YourBrand", // Alphanumeric sender ID
body: messageText,
// Optional delivery report flag
delivery_report: "summary"
}
});
console.log('Message sent:', response);
return response;
} catch (error) {
console.error('Sinch SMS Error:', error);
throw error;
}
}Bird
Bird's API provides SMS capabilities with straightforward REST endpoints. Authenticate using your API key and workspace ID.
import axios from 'axios';
// Bird API configuration
const BIRD_API_CONFIG = {
baseURL: 'https://api.bird.com/v1',
headers: {
'Authorization': `Bearer ${process.env.BIRD_API_KEY}`,
'Content-Type': 'application/json'
}
};
// Send SMS using Bird API
async function sendBirdSMS(
phoneNumber: string,
message: string,
workspaceId: string
) {
try {
const response = await axios.post(
`/workspaces/${workspaceId}/messages`,
{
recipient: phoneNumber,
content: message,
channel: 'sms',
sender_id: 'YourBrand'
},
BIRD_API_CONFIG
);
return response.data;
} catch (error) {
console.error('Bird API Error:', error.response?.data || error);
throw error;
}
}API Rate Limits and Throughput
Rate Limits for Liechtenstein:
- Twilio: 100 messages per second
- Sinch: 30 messages per second
- Bird: 50 messages per second
Throughput Management Strategies:
- Implement exponential backoff for retries
- Use queue systems (Redis/RabbitMQ) for high volume
- Batch messages when possible
- Monitor delivery rates and adjust sending speed
Rate limiting implementation example:
import Bottleneck from 'bottleneck';
// Configure rate limiter (example: 30 messages/second for Sinch)
const limiter = new Bottleneck({
reservoir: 30, // Initial capacity
reservoirRefreshAmount: 30,
reservoirRefreshInterval: 1000, // Refresh every 1 second
maxConcurrent: 5
});
// Wrap your SMS function with rate limiting
const rateLimitedSendSMS = limiter.wrap(sendSinchSMS);
// Use in your code
await rateLimitedSendSMS('+4236712345', 'Your message here');Error Handling and Reporting
Common Error Scenarios:
| Error Code | Description | Resolution |
|---|---|---|
| 21614 | Invalid phone number format or landline | Validate number with Lookup API before sending |
| 21610 | Unsubscribed recipient | Remove from campaign list; check opt-out database |
| 20429 | Rate limit exceeded | Implement exponential backoff; reduce sending speed |
| 21211 | Invalid 'To' number | Verify E.164 format (+423XXXXXXX) |
| 30003 | Unreachable destination | Retry after delay; phone may be off or out of coverage |
| 30005 | Unknown destination handset | Number may be deactivated; validate with carrier lookup |
Logging Best Practices:
// Example error handling middleware
const handleSMSError = (error: any) => {
// Log detailed error information
logger.error({
error_code: error.code,
message: error.message,
timestamp: new Date().toISOString(),
carrier_response: error.carrier_response
});
// Categorize errors for reporting
switch (error.code) {
case 21614:
case 'INVALID_NUMBER':
// Handle invalid number errors - remove from list
removeFromCampaign(error.recipient);
break;
case 20429:
case 'RATE_LIMIT_EXCEEDED':
// Implement backoff strategy
return retryWithBackoff(error.originalRequest, 5000);
case 21610:
// Already unsubscribed
addToSuppressionList(error.recipient);
break;
default:
// Handle other errors - log and alert
alertOpsTeam(error);
}
};
// Exponential backoff helper
async function retryWithBackoff(fn: Function, initialDelay: number, maxRetries = 3) {
let delay = initialDelay;
for (let i = 0; i < maxRetries; i++) {
try {
await new Promise(resolve => setTimeout(resolve, delay));
return await fn();
} catch (error) {
if (i === maxRetries - 1) throw error;
delay *= 2; // Exponential backoff
}
}
}Recap and Additional Resources
Key Takeaways
-
Compliance Priorities
- GDPR compliance is mandatory
- Obtain explicit consent
- Maintain opt-out records
-
Technical Considerations
- Use proper number formatting (+423)
- Implement retry logic
- Monitor delivery rates
-
Best Practices
- Send during business hours
- Localize content (German preferred)
- Test regularly across carriers
Next Steps
-
Review Regulations
- Contact the Amt für Kommunikation
- Review GDPR requirements
- Document your compliance procedures
-
Technical Setup
- Choose an API provider
- Implement error handling
- Set up monitoring systems
-
Testing and Validation
- Test across all carriers
- Verify delivery rates
- Test opt-out functionality
Additional Resources
Official Resources:
- Amt für Kommunikation – Liechtenstein Office for Communications
- Datenschutzstelle – Data Protection Authority
- European Communications Code – EU Telecommunications Framework
Industry Guidelines:
- Mobile Marketing Association Guidelines
- GSMA Messaging Principles
- European SMS Marketing Best Practices
Troubleshooting Common Issues
| Issue | Possible Cause | Solution |
|---|---|---|
| Low delivery rate (<90%) | Invalid numbers, spam filters | Validate numbers; review message content; check sender reputation |
| High opt-out rate (>2%) | Excessive frequency, irrelevant content | Reduce send frequency; improve targeting and personalization |
| Messages marked as spam | URL shorteners, excessive caps | Use branded domains; follow content filtering guidelines |
| Slow delivery | Network congestion, rate limits | Implement queuing; space out message batches |
Support Contacts:
- Twilio Support: https://support.twilio.com
- Sinch Support: https://www.sinch.com/contact-us
- Bird Support: https://support.bird.com
Frequently Asked Questions
How to send SMS messages to Liechtenstein phone numbers?
Use the international format (+423) followed by the subscriber number. Ensure the recipient number is a mobile number, as sending to landlines is not supported and will result in a delivery failure with a 400 response error code (21614). Several APIs like Twilio, Sinch, and Bird offer services for sending messages to Liechtenstein, each with its own authentication and formatting requirements. Remember to handle potential errors like invalid number formats and rate limits within your application logic.
What is the process for getting consent for SMS marketing in Liechtenstein?
Liechtenstein follows GDPR and E-Privacy Directive rules, requiring explicit consent before sending marketing SMS messages. This can be obtained through written or electronic means, clearly stating the purpose of the communication. Double opt-in, while not mandatory, is a recommended practice. Detailed records of consent, including timestamps and methods, should be maintained for at least two years for potential auditing.
Why does Liechtenstein convert MMS messages to SMS?
Liechtenstein automatically converts MMS to SMS messages containing a URL link to ensure delivery compatibility across all devices and networks. This conversion approach allows recipients to access multimedia content through a secure web link rather than directly through an MMS message, simplifying delivery and enhancing compatibility.
When should I send marketing SMS in Liechtenstein to respect local time?
The best practice is to schedule SMS campaigns between 10:00 and 18:00 CET on business days. Avoid sending messages on Sundays and public holidays. While emergency messages are permitted outside these hours, adhering to these recommended times ensures higher engagement and respects recipients' time.
Can I use an alphanumeric sender ID for SMS in Liechtenstein?
Yes, alphanumeric sender IDs are fully supported in Liechtenstein without pre-registration requirements, allowing for dynamic usage. Sender IDs are preserved as specified, meaning the ID you set will be displayed to the recipient. This is beneficial for branding and recognition.
What are the rules for STOP/HELP commands in Liechtenstein SMS?
Liechtenstein requires support for German stop commands (STOP, STOPP, ENDE), with HELP/HILFE commands also recommended. All opt-out keywords must be processed within 24 hours. Confirmation messages for these commands should be sent in either German or English, catering to the linguistic landscape.
What is the character limit for SMS messages in Liechtenstein?
Standard SMS messages in Liechtenstein are limited to 160 characters when using GSM-7 encoding, while Unicode messages are restricted to 70 characters. Longer messages can be sent as concatenated SMS, but keeping messages concise is a best practice. This ensures optimal delivery and cost-effectiveness.
How to handle opt-outs for SMS campaigns in Liechtenstein?
Opt-outs must be processed within 24 hours of receiving STOP commands like STOP, STOPP, or ENDE. Send a confirmation message to acknowledge the opt-out. Businesses are required to maintain internal suppression lists and keep records of opted-out numbers for at least five years, even without a centralized Do Not Call registry.
What SMS content is restricted in Liechtenstein?
Certain industries like gambling, adult content, cryptocurrency promotions, and unauthorized financial services are restricted from sending SMS messages. Regulated industries like banking, healthcare, and insurance face additional requirements like verification, confidentiality, and clear disclaimers respectively.
What are the best practices for sending SMS messages in Liechtenstein?
Best practices include using German (or English) for content localization, keeping messages under 160 characters, including a clear call-to-action, and personalizing whenever possible. Respect quiet hours and local holidays, and limit messages to 2-3 per recipient weekly. Consistently using a registered sender ID builds trust and recognition.
How to use Twilio for sending SMS messages in Liechtenstein?
Initialize the Twilio client with your Account SID and Auth Token. Use the `client.messages.create` method, ensuring the 'to' number includes the +423 country code. Provide the message body and your chosen sender ID. Optionally, include a `statusCallback` URL for delivery tracking. Proper number formatting is crucial for successful delivery.
What are the API rate limits for SMS in Liechtenstein?
Rate limits vary by provider. Twilio allows 100 messages per second, Sinch permits 30, and Bird allows 50. Implement strategies like exponential backoff and message queuing to manage high volumes and avoid exceeding these limits, ensuring smooth operation of your messaging services.
How to implement proper error handling for SMS API integrations?
Log detailed error information, including error codes, messages, timestamps, and any carrier responses. Categorize errors for reporting and implement appropriate handling strategies like retries with exponential backoff for rate limit issues or number format validation for invalid number errors. This helps maintain service reliability and identify areas for improvement.