Market Conditions: Denmark has a highly developed mobile market with near-universal smartphone penetration. While OTT messaging apps like WhatsApp and Facebook Messenger are popular for personal communications, SMS remains crucial for business communications, particularly for authentication, notifications, and marketing. The market is dominated by three major operators: TDC, Telenor, and Telia, with Android and iOS having roughly equal market share.
Key SMS Features and Capabilities in Denmark
Denmark offers comprehensive SMS capabilities including two-way messaging, concatenated messages, and number portability, though MMS is handled through SMS conversion with embedded URLs.
Two-way SMS Support
Denmark fully supports two-way SMS communications with no special restrictions. This enables interactive messaging campaigns and customer service applications through SMS.
Concatenated Messages (Segmented SMS)
Support: Yes, concatenated messages are fully supported across all Danish mobile networks. Message length rules: Standard GSM-7 encoding allows 160 characters per segment, while Unicode (UCS-2) allows 70 characters per segment. Encoding considerations: GSM-7 is recommended for basic Latin alphabet messages to maximize character count. UCS-2 should be used when sending messages containing special characters or non-Latin alphabets.
MMS Support
MMS messages are automatically converted to SMS with an embedded URL link to the multimedia content. This ensures reliable delivery while maintaining the ability to share rich media content. Best practice is to use short, branded URLs and include clear instructions for accessing the content.
Recipient Phone Number Compatibility
Number Portability
Number portability is fully available in Denmark, allowing users to keep their phone numbers when switching carriers. This feature doesn't impact SMS delivery or routing as the Danish telecommunications infrastructure handles porting transparently.
Sending SMS to Landlines
Sending SMS to landline numbers is not supported in Denmark. Attempts to send messages to landline numbers will result in a failed delivery and a 400 response error (code 21614) from the API. These messages won't appear in logs and won't incur charges.
Compliance and Regulatory Guidelines for SMS in Denmark
Denmark follows strict GDPR compliance requirements and is regulated by the Danish Business Authority (Erhvervsstyrelsen) and the Danish Data Protection Agency (Datatilsynet). SMS marketing must comply with both the Danish Marketing Practices Act and EU privacy regulations.
Consent and Opt-In
Explicit Consent Requirements:
Written or digital confirmation of opt-in is mandatory before sending marketing messages
Consent must be freely given, specific, and informed
Double opt-in is recommended for marketing campaigns
Records of consent must be maintained and easily accessible
Purpose of messaging must be clearly stated during opt-in
HELP/STOP and Other Commands
All marketing messages must include clear opt-out instructions
STOP command must be supported in both Danish ("STOP") and English
HELP command must provide information in Danish about the service
Common Danish keywords like "AFMELD" (unsubscribe) should also be supported
Response to opt-out commands must be immediate and confirmed
Do Not Call / Do Not Disturb Registries
Denmark maintains the Robinson List (Robinson-listen), a national do-not-contact registry. Best practices include:
Regular checking against the Robinson List
Maintaining internal suppression lists
Immediate processing of opt-out requests
Proactive filtering of registered numbers
Keeping opt-out records for at least 2 years
Time Zone Sensitivity
Denmark observes Central European Time (CET/CEST). Recommended sending hours:
Business days: 8:00 AM to 8:00 PM CET
Weekends: 9:00 AM to 6:00 PM CET
Avoid sending during major holidays
Emergency messages exempt from time restrictions
Phone Numbers Options and SMS Sender Types for Denmark
Alphanumeric Sender ID
Operator network capability: Fully supported Registration requirements: No pre-registration required, dynamic usage allowed Sender ID preservation: Yes, sender IDs are preserved as-is across all major networks
Long Codes
Domestic vs. International: Both supported with full functionality Sender ID preservation: Yes, Denmark preserves original Sender IDs Provisioning time: Immediate to 24 hours Use cases: Ideal for two-way communication, customer service, and transactional messages
Short Codes
Support: Not currently supported in Denmark Provisioning time: N/A Use cases: N/A
Restricted SMS Content, Industries, and Use Cases
Prohibited Content and Industries:
Gambling and lottery services
Adult content
Unauthorized financial services
Political messaging without proper disclosure
Cryptocurrency promotions without proper authorization
Content Filtering
Known Carrier Filtering Rules:
URLs must be pre-registered to avoid filtering
URL shorteners are generally blocked
Keywords related to restricted industries trigger filters
Multiple exclamation marks or all-caps messages may be filtered
Tips to Avoid Filtering:
Register all domains and URLs
Use approved sender IDs
Avoid spam-like language
Maintain consistent sending patterns
Include clear company identification
Best Practices for Sending SMS in Denmark
Messaging Strategy
Keep messages under 160 characters when possible
Include clear call-to-actions
Personalize using recipient's name or relevant data
Maintain consistent branding
Use clear, professional language
Sending Frequency and Timing
Limit to 2-4 messages per month per recipient
Respect Danish holidays and vacation periods
Avoid sending during weekend evenings
Space out bulk campaigns to prevent network congestion
Localization
Primary language should be Danish
Consider bilingual messages (Danish/English) for international audiences
Use proper Danish character encoding
Respect local cultural norms and expressions
Opt-Out Management
Process opt-outs within 24 hours
Maintain centralized opt-out database
Confirm opt-out with one final message
Regular audit of opt-out lists
Train staff on opt-out procedures
Testing and Monitoring
Test across all major Danish carriers
Monitor delivery rates by carrier
Track engagement metrics
Regular content and URL testing
A/B test message formats and timing
SMS API integrations for Denmark
Twilio
Twilio provides a robust SMS API with comprehensive support for Danish numbers and messaging requirements.
TypeScript
import { Twilio } from'twilio';
// Initialize Twilio client with your credentialsconst client = newTwilio(
process.env.TWILIO_ACCOUNT_SID,
process.env.TWILIO_AUTH_TOKEN
);
// Function to validate Danish phone numbersconst validateDanishNumber = (phoneNumber: string): boolean => {
return/^\+45[0-9]{8}$/.test(phoneNumber);
};
// Send SMS to Denmark with error handlingasyncfunctionsendDanishSMS(to: string,
message: string,
senderId: string): Promise<void> {
try {
if (!validateDanishNumber(to)) {
thrownewError('Invalid Danish phone number format');
}
const response = await client.messages.create({
body: message,
from: senderId, // Alphanumeric or long codeto: to,
// Optional parameters for delivery trackingstatusCallback: 'https://your-webhook.com/status'
});
console.log(`Message sent successfully: ${response.sid}`);
} catch (error) {
console.error('SMS sending failed:', error);
throw error;
}
}
Sinch
Sinch offers direct operator connections in Denmark with high delivery rates.
Denmark's mobile market is highly developed with widespread smartphone use. While messaging apps are popular, SMS remains essential for business uses like authentication and marketing. Three major operators, TDC, Telenor, and Telia, dominate the market.
Concatenated SMS messages are supported. Use GSM-7 encoding (160 characters/segment) for basic Latin alphabets and UCS-2 (70 characters/segment) for special characters or non-Latin alphabets.
MMS messages are converted to SMS with a URL linking to the multimedia content. Use short, branded URLs and clear instructions for accessing the content.
No, sending SMS to landlines in Denmark is not supported and will result in a failed delivery with a 400 response error (code 21614). These messages won't be logged or charged.
Denmark follows GDPR and is regulated by Erhvervsstyrelsen and Datatilsynet. Explicit consent, opt-out options (STOP, HELP, AFMELD), and adherence to the Robinson List are crucial.
The best times are 8:00 AM to 8:00 PM CET on weekdays and 9:00 AM to 6:00 PM CET on weekends. Avoid major holidays and weekend evenings.
Alphanumeric sender IDs are fully supported and don't require pre-registration. Sender IDs are preserved across major networks.
No, short codes are not currently supported in Denmark for SMS messaging.
Gambling, adult content, unauthorized financial services, undisclosed political messaging, and cryptocurrency promotions without authorization are prohibited.
Pre-register URLs, use approved sender IDs, avoid spam-like language, maintain consistent sending patterns, and include clear company identification.
Keep messages concise, include clear calls-to-action, personalize, maintain consistent branding, and use professional Danish language. Limit frequency, respect holidays, and localize content.
Process opt-outs promptly (within 24 hours), use a central database, confirm opt-out, audit lists regularly, and train staff on procedures.
Twilio: 100/second, Sinch: 250/second, MessageBird: 60/second, Plivo: 50/second. Use queues, batch APIs, and backoff strategies for large-scale sending.
This method ensures reliable delivery across all devices while still enabling rich media sharing. It leverages the robust SMS infrastructure in Denmark.
The article provides code examples for Twilio, Sinch, MessageBird, and Plivo, demonstrating how to send SMS messages using their respective APIs and best practices for Denmark.
Denmark SMS Market Overview
Market Conditions: Denmark has a highly developed mobile market with near-universal smartphone penetration. While OTT messaging apps like WhatsApp and Facebook Messenger are popular for personal communications, SMS remains crucial for business communications, particularly for authentication, notifications, and marketing. The market is dominated by three major operators: TDC, Telenor, and Telia, with Android and iOS having roughly equal market share.
Key SMS Features and Capabilities in Denmark
Denmark offers comprehensive SMS capabilities including two-way messaging, concatenated messages, and number portability, though MMS is handled through SMS conversion with embedded URLs.
Two-way SMS Support
Denmark fully supports two-way SMS communications with no special restrictions. This enables interactive messaging campaigns and customer service applications through SMS.
Concatenated Messages (Segmented SMS)
Support: Yes, concatenated messages are fully supported across all Danish mobile networks.
Message length rules: Standard GSM-7 encoding allows 160 characters per segment, while Unicode (UCS-2) allows 70 characters per segment.
Encoding considerations: GSM-7 is recommended for basic Latin alphabet messages to maximize character count. UCS-2 should be used when sending messages containing special characters or non-Latin alphabets.
MMS Support
MMS messages are automatically converted to SMS with an embedded URL link to the multimedia content. This ensures reliable delivery while maintaining the ability to share rich media content. Best practice is to use short, branded URLs and include clear instructions for accessing the content.
Recipient Phone Number Compatibility
Number Portability
Number portability is fully available in Denmark, allowing users to keep their phone numbers when switching carriers. This feature doesn't impact SMS delivery or routing as the Danish telecommunications infrastructure handles porting transparently.
Sending SMS to Landlines
Sending SMS to landline numbers is not supported in Denmark. Attempts to send messages to landline numbers will result in a failed delivery and a 400 response error (code 21614) from the API. These messages won't appear in logs and won't incur charges.
Compliance and Regulatory Guidelines for SMS in Denmark
Denmark follows strict GDPR compliance requirements and is regulated by the Danish Business Authority (Erhvervsstyrelsen) and the Danish Data Protection Agency (Datatilsynet). SMS marketing must comply with both the Danish Marketing Practices Act and EU privacy regulations.
Consent and Opt-In
Explicit Consent Requirements:
HELP/STOP and Other Commands
Do Not Call / Do Not Disturb Registries
Denmark maintains the Robinson List (Robinson-listen), a national do-not-contact registry. Best practices include:
Time Zone Sensitivity
Denmark observes Central European Time (CET/CEST). Recommended sending hours:
Phone Numbers Options and SMS Sender Types for Denmark
Alphanumeric Sender ID
Operator network capability: Fully supported
Registration requirements: No pre-registration required, dynamic usage allowed
Sender ID preservation: Yes, sender IDs are preserved as-is across all major networks
Long Codes
Domestic vs. International: Both supported with full functionality
Sender ID preservation: Yes, Denmark preserves original Sender IDs
Provisioning time: Immediate to 24 hours
Use cases: Ideal for two-way communication, customer service, and transactional messages
Short Codes
Support: Not currently supported in Denmark
Provisioning time: N/A
Use cases: N/A
Restricted SMS Content, Industries, and Use Cases
Prohibited Content and Industries:
Content Filtering
Known Carrier Filtering Rules:
Tips to Avoid Filtering:
Best Practices for Sending SMS in Denmark
Messaging Strategy
Sending Frequency and Timing
Localization
Opt-Out Management
Testing and Monitoring
SMS API integrations for Denmark
Twilio
Twilio provides a robust SMS API with comprehensive support for Danish numbers and messaging requirements.
import { Twilio } from 'twilio'; // Initialize Twilio client with your credentials const client = new Twilio( process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN ); // Function to validate Danish phone numbers const validateDanishNumber = (phoneNumber: string): boolean => { return /^\+45[0-9]{8}$/.test(phoneNumber); }; // Send SMS to Denmark with error handling async function sendDanishSMS( to: string, message: string, senderId: string ): Promise<void> { try { if (!validateDanishNumber(to)) { throw new Error('Invalid Danish phone number format'); } const response = await client.messages.create({ body: message, from: senderId, // Alphanumeric or long code to: to, // Optional parameters for delivery tracking statusCallback: 'https://your-webhook.com/status' }); console.log(`Message sent successfully: ${response.sid}`); } catch (error) { console.error('SMS sending failed:', error); throw error; } }Sinch
Sinch offers direct operator connections in Denmark with high delivery rates.
import axios from 'axios'; interface SinchSMSResponse { id: string; status: string; } class SinchSMSClient { private readonly baseUrl: string; private readonly apiToken: string; constructor(serviceId: string, apiToken: string) { this.baseUrl = `https://sms.api.sinch.com/xms/v1/${serviceId}`; this.apiToken = apiToken; } async sendSMS( to: string, message: string, senderId: string ): Promise<SinchSMSResponse> { try { const response = await axios.post( `${this.baseUrl}/batches`, { from: senderId, to: [to], body: message, delivery_report: 'summary' }, { headers: { 'Authorization': `Bearer ${this.apiToken}`, 'Content-Type': 'application/json' } } ); return response.data; } catch (error) { console.error('Sinch SMS error:', error); throw error; } } }MessageBird
MessageBird provides reliable SMS delivery with detailed delivery reporting.
import { MessageBird } from 'messagebird'; class MessageBirdClient { private client: MessageBird; constructor(apiKey: string) { this.client = new MessageBird(apiKey); } async sendSMS( to: string, message: string, originator: string ): Promise<void> { return new Promise((resolve, reject) => { this.client.messages.create({ originator, recipients: [to], body: message, datacoding: 'auto' // Automatic handling of special characters }, (err, response) => { if (err) { reject(err); return; } resolve(response); }); }); } }Plivo
Plivo offers competitive pricing and good coverage in Denmark.
import plivo from 'plivo'; class PlivoSMSClient { private client: plivo.Client; constructor(authId: string, authToken: string) { this.client = new plivo.Client(authId, authToken); } async sendSMS( to: string, message: string, senderId: string ): Promise<any> { try { const response = await this.client.messages.create({ src: senderId, dst: to, text: message, url: 'https://your-webhook.com/delivery-report' }); return response; } catch (error) { console.error('Plivo SMS error:', error); throw error; } } }API Rate Limits and Throughput
Strategies for Large-Scale Sending:
Error Handling and Reporting
Recap and Additional Resources
Key Takeaways
Next Steps
Additional Resources