sms compliance
sms compliance
Pakistan SMS Guide: PTA Regulations, Best Practices & API Integration
Complete guide to SMS messaging in Pakistan. Learn about PTA compliance, Jazz, Telenor, Zong, Ufone networks, sender ID registration, A2P partnerships, and API integration for reliable SMS delivery.
Pakistan SMS Best Practices, Compliance, and Features
SMS Market Overview in Pakistan: Networks, Regulations & Growth
| Locale name: | Pakistan |
|---|---|
| ISO code: | PK |
| Region | Asia |
| Mobile country code (MCC) | 410 |
| Dialing Code | +92 |
Market Conditions: Pakistan's A2P SMS market grows at 13.2% CAGR (2021-2025) – significantly exceeding the global average of 3.8%. Four major mobile operators serve over 192 million subscribers (as of 2024-2025). SMS remains essential for business communications in e-commerce, mobile banking, and ride-hailing services, even as OTT messaging apps like WhatsApp dominate personal communication. Android holds over 90% market share compared to iOS.
Mobile Network Operators (2024-2025 Subscriber Data):
- Jazz (MCC-MNC: 410-07, 410-04) – Market leader with 75 million subscribers
- Telenor (MCC-MNC: 410-06) – 49.19 million subscribers (PTCL announced acquisition September 2024)
- Zong (MCC-MNC: 410-11) – 44.80 million subscribers
- Ufone (MCC-MNC: 410-03) – 23.47 million subscribers (PTCL Group)
A2P SMS Partnerships:
- Jazz: Sinch (exclusive for international A2P traffic)
- Telenor & Ufone: GMS (exclusive A2P partner)
- Zong: GMS, Acmetel, and CMI (preferred partners)
Business Implications: Work with these authorized partners for optimal delivery rates and compliance. Direct operator partnerships offer better throughput, lower latency, and guaranteed message delivery compared to third-party aggregators.
Recent Infrastructure Developments:
- 5G Launch (June 2025): PTA released final auction timetable in January 2025, confirming commercial 5G launch across four spectrum bands
- 3G Shutdown (October 2024): Jazz completed Pakistan's first full 3G shutdown, reallocating spectrum to boost 4G capacity under "4G for All" program
- Market Consolidation (September 2024): IFC-led consortium committed USD 400 million to PTCL for acquisition of Telenor Pakistan and Orion Towers
Key SMS Features and Capabilities in Pakistan
Pakistan supports comprehensive SMS capabilities, including concatenated messages and number portability. Understanding these features helps businesses send SMS messages effectively in Pakistan. Two-way SMS functionality is limited.
Two-way SMS Support
Pakistan does not support two-way SMS through standard A2P channels.
Workarounds:
- Dedicated short codes: Apply for short codes that support inbound messaging (4-6 weeks provisioning time)
- Web callbacks: Direct users to web forms or apps for responses
- WhatsApp Business API: Use for bidirectional communication when SMS limitations apply
- Hybrid approach: Combine outbound SMS with inbound calls to support centers
Concatenated Messages (Segmented SMS)
Support: All major carriers support concatenation, though availability varies by sender ID type.
Message Length Rules:
- GSM-7 encoding: 160 characters per segment
- UCS-2 encoding: 70 characters per segment (required for Urdu and non-Latin characters)
Billing Impact: Each segment counts as one message. A 200-character message splits into 2 segments and costs 2× the single message rate.
Character Count Examples:
- 155 characters (English) = 1 message
- 165 characters (English) = 2 messages
- 68 characters (Urdu/UCS-2) = 1 message
- 75 characters (Urdu/UCS-2) = 2 messages
MMS Support
Operators automatically convert MMS messages to SMS with embedded URL links, ensuring compatibility across all networks.
Conversion Process:
- You send MMS with image/media attachment
- Operator uploads media to secure hosting
- Operator generates shortened URL
- Recipient receives SMS: "View your media: [URL]"
- Link expires after 30 days (varies by operator)
Recipient Phone Number Compatibility
Number Portability
Pakistan was the first country in South Asia to implement Mobile Number Portability (MNP) in March 2007. Subscribers retain their mobile numbers when switching operators.
Process Details:
- Management: PMD (Pakistan Mobile Database) via SMS short-codes 667 and 763xx
- Timeframe: 5 days (mandated by PTA regulations, updated February 2025)
- Quality Standards: PTA enforces strict compliance through automated monitoring
Impact on SMS Delivery: Messages route automatically to the current carrier through the central number portability database. This feature does not affect delivery or routing.
Failure Scenarios:
- Database lookup timeout: Message queues for retry (up to 3 attempts)
- Invalid number post-porting: Returns error code 21614 (invalid number format)
- Porting in progress: Message may delay up to 30 minutes during active port window
Sending SMS to Landlines
You cannot send SMS to landline numbers in Pakistan. Attempts generate error code 21614 (invalid number format), fail delivery, and do not appear in logs or incur charges.
Common Error Codes:
| Error Code | Meaning | Resolution |
|---|---|---|
| 21614 | Invalid number format (landline or malformed) | Verify number format: +923xxxxxxxxx |
| 21408 | Rate limit exceeded | Implement exponential backoff |
| 21611 | Unregistered sender ID | Register sender ID with operator |
| 30007 | Message filtered by carrier | Review content for prohibited terms |
| 30008 | Unknown destination | Verify number is active and reachable |
PTA Compliance and Regulatory Guidelines for SMS in Pakistan
The Pakistan Telecommunication Authority (PTA) regulates all SMS communications in Pakistan. Understanding PTA SMS regulations is essential for businesses sending commercial messages. All A2P SMS providers must comply with PTA guidelines and obtain necessary approvals before sending commercial messages. Operators strictly prohibit peer-to-peer (P2P) traffic.
Consent and Opt-In
Obtain explicit consent before sending marketing or promotional messages. Best practices include:
- Maintain clear records of how and when you obtained consent
- Use double opt-in verification for marketing lists
- Provide clear terms and conditions during opt-in
- Include the business name and purpose in consent requests
- Store consent records for at least 2 years
Example Consent Message:
Reply YES to receive exclusive offers from [YourBrand]. Standard SMS rates apply. Reply STOP to unsubscribe. Privacy Policy: [URL]
HELP/STOP and Other Commands
Support these commands in all SMS campaigns:
- STOP/UNSUBSCRIBE: Opt out of messages
- HELP: Get assistance information
- INFO: Get sender information
Support commands in both English and Urdu. Include clear instructions on how to use these commands in every message.
Example Opt-Out Instructions:
To unsubscribe, reply STOP
سبسکرپشن ختم کرنے کے لیے STOP لکھ کر بھیجیں
Do Not Call / Do Not Disturb Registries
PTA manages Pakistan's national Do Not Call Registry (DNCR). Best practices include:
- Check numbers against the DNCR regularly
- Maintain internal suppression lists
- Process opt-out requests immediately (within 24 hours)
- Filter DNCR numbers proactively before campaign execution
Time Zone Sensitivity
Pakistan follows PKT (UTC+5). Send messages during these hours:
- Weekdays: 9:00 AM to 9:00 PM PKT
- Weekends: 10:00 AM to 6:00 PM PKT
- Ramadan: Adjust timing to respect fasting hours
- Emergency messages: Send 24/7 only if truly urgent
Timezone Handling Example:
import { DateTime } from 'luxon';
function isValidSendTime(): boolean {
const now = DateTime.now().setZone('Asia/Karachi');
const hour = now.hour;
const isWeekend = now.weekday >= 6;
if (isWeekend) {
return hour >= 10 && hour < 18;
}
return hour >= 9 && hour < 21;
}SMS Sender ID Registration and Phone Number Options for Pakistan
Alphanumeric Sender ID Registration
Operator network capability: Major operators (Zong, Warid, and Mobilink) support alphanumeric sender IDs. Registration requirements: Pre-registration not required, but dynamic usage is not supported Sender ID preservation: Varies by operator – Ufone and Telenor replace with numeric IDs
Registering your sender ID with Pakistani mobile operators ensures reliable message delivery and brand recognition.
Registration Process:
- Submit sender ID application to your SMS provider
- Provider submits to operator for approval
- Operator verifies business registration and use case
- Approval takes 3-5 business days
- Sender ID activates across approved operators
Format Rules:
- Length: 3-11 characters
- Characters: Alphanumeric only (A-Z, 0-9)
- Restrictions: No spaces, special characters, or symbols
- Case: Operators may convert to uppercase
Long Codes
Domestic vs. International: International long codes supported; domestic not available Sender ID preservation: No – operators may overwrite sender IDs with short codes Provisioning time: 2-3 business days Use cases: Transactional messages, alerts, notifications
Short Codes
Support: All operators widely support short codes Provisioning time: 4-6 weeks for approval Use cases: High-volume marketing, 2FA, customer service Throughput: 100-500 messages per second (varies by operator)
Application Process:
- Submit application with business documentation
- Define use case and message templates
- PTA reviews and approves (2-3 weeks)
- Operator provisions short code (1-2 weeks)
- Complete technical integration and testing
Restricted SMS Content and PTA Content Filtering Guidelines
Prohibited content includes:
- Gambling and betting
- Adult content
- Political messaging without approval
- Cryptocurrency promotions
- Unauthorized financial services
Filtered Content Examples:
- "Win big at [casino name]" (gambling)
- "Buy Bitcoin now" (cryptocurrency)
- "Vote for [candidate]" (political without approval)
- "Apply for instant loan" (unauthorized financial services without proper licensing)
Consequences: Operators block messages containing prohibited content. Repeated violations result in sender ID suspension, account termination, and potential PTA penalties.
Content Filtering
Known carrier filters:
- URLs from unknown domains
- Specific keywords related to restricted content
- Multiple exclamation marks or all-caps text
Best practices to avoid filtering:
- Use approved URL shorteners (bit.ly, tinyurl.com, or operator-provided shorteners)
- Avoid excessive punctuation
- Include clear sender identification
- Use approved templates for financial services
Content Testing Checklist:
- No prohibited keywords or phrases
- URLs use approved shorteners
- Sender ID clearly identifies your business
- Message includes opt-out instructions
- No excessive punctuation or caps
- Tested across all four major operators
Best Practices for Sending SMS in Pakistan
Messaging Strategy
- Keep messages under 160 characters when possible
- Include clear call-to-actions
- Use personalization (customer name, relevant details)
- Maintain consistent sender ID across campaigns
Message Template Examples:
Transactional (Order Confirmation):
Hi [Name], your order #[OrderID] is confirmed. Expected delivery: [Date]. Track: [URL]. Reply HELP for support.
Promotional:
[BrandName]: Get 30% OFF your next purchase. Use code SAVE30 at checkout. Valid until [Date]. Shop: [URL]. Reply STOP to opt-out.
OTP/2FA:
Your [BrandName] verification code is [CODE]. Valid for 10 minutes. Never share this code. Need help? Visit [URL]
Sending Frequency and Timing
- Limit to 3-4 messages per week per recipient
- Respect religious observances (especially during Ramadan)
- Avoid sending during national holidays
- Space out bulk campaigns to prevent network congestion
Pakistan National Holidays (avoid sending during these dates):
- Kashmir Day (February 5)
- Pakistan Day (March 23)
- Labour Day (May 1)
- Independence Day (August 14)
- Iqbal Day (November 9)
- Quaid-e-Azam Day (December 25)
- Plus Eid-ul-Fitr and Eid-ul-Azha (dates vary annually)
Localization
- Support both English and Urdu
- Use transliterated Urdu (Roman Urdu) when appropriate
- Consider regional languages for targeted campaigns
- Test character rendering across different devices
Urdu Character Encoding:
// UCS-2 encoding for Urdu
const urduMessage = "آپ کا کوڈ: 123456"; // "Your code: 123456"
// Character count: 15 Urdu characters = 1 message segment (< 70 chars)
// Encoding: UCS-2
// Bytes per character: 2Regional Language Coverage:
- Punjabi: 44% of population (consider for regional campaigns in Punjab)
- Sindhi: 12% (Sindh province)
- Pashto: 8% (Khyber Pakhtunkhwa and Balochistan)
- Urdu: National language (understood by 75%+ of population)
Opt-Out Management
- Process opt-outs within 24 hours
- Maintain centralized opt-out database
- Include opt-out instructions in every message
- Confirm opt-out with one final message
Opt-Out Workflow:
- User sends "STOP" to your number/short code
- System immediately adds number to suppression list
- System sends confirmation: "You've unsubscribed from [BrandName]. You'll receive no further messages."
- System syncs suppression list across all campaigns
- Compliance team audits opt-outs weekly
Testing and Monitoring
- Test across all major operators
- Monitor delivery rates by operator
- Track engagement metrics
- Test opt-out functionality regularly
- Monitor customer feedback and complaints
Key Metrics to Track:
- Delivery rate: Target 95%+ (below 90% indicates issues)
- Bounce rate: Keep below 5%
- Opt-out rate: Industry average 0.5-2% (higher rates signal content issues)
- Response rate: Varies by campaign type (OTP: 80%+, promotional: 5-10%)
- Time to delivery: Target under 5 seconds
SMS API Integration for Pakistan: Twilio, Sinch, Plivo & MessageBird
Send SMS to Pakistan with Twilio API
Twilio provides robust SMS API with comprehensive Pakistan support. Send SMS to Pakistani mobile numbers on Jazz, Telenor, Zong, and Ufone networks. Authenticate using account SID and auth token.
import { Twilio } from 'twilio';
// Initialize client with environment variables
const client = new Twilio(
process.env.TWILIO_ACCOUNT_SID!,
process.env.TWILIO_AUTH_TOKEN!
);
async function sendSMSToPakistan() {
try {
// Send message with proper Pakistan number formatting
const message = await client.messages.create({
body: 'Your message in English or Urdu',
from: 'YOUR_SENDER_ID', // Alphanumeric or short code
to: '+923xxxxxxxxx', // Pakistan number format
// Optional parameters for delivery tracking
statusCallback: 'https://your-callback-url.com/status'
});
console.log(`Message sent successfully: ${message.sid}`);
} catch (error) {
console.error('Error sending message:', error);
}
}Pakistan-Specific Error Handling:
async function sendWithErrorHandling() {
try {
const message = await client.messages.create({
body: 'Your message',
from: 'YOUR_SENDER_ID',
to: '+923xxxxxxxxx'
});
return message.sid;
} catch (error: any) {
// Handle Pakistan-specific errors
if (error.code === 21614) {
console.error('Invalid Pakistan number format. Use +923xxxxxxxxx');
} else if (error.code === 21611) {
console.error('Sender ID not registered with operator');
} else if (error.code === 30007) {
console.error('Message filtered by carrier. Review content.');
}
throw error;
}
}Webhook Handling Example:
import express from 'express';
const app = express();
app.use(express.urlencoded({ extended: false }));
app.post('/status', (req, res) => {
const { MessageSid, MessageStatus, ErrorCode, To } = req.body;
console.log(`Message ${MessageSid} to ${To}: ${MessageStatus}`);
if (ErrorCode) {
console.error(`Error code: ${ErrorCode}`);
}
res.sendStatus(200);
});Send SMS to Pakistan with Sinch API
Sinch offers direct operator connections in Pakistan, with exclusive partnership with Jazz for international A2P traffic. Uses bearer token authentication.
import axios from 'axios';
async function sendSinchSMS() {
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`,
{
from: 'YOUR_SENDER_ID',
to: ['+923xxxxxxxxx'],
body: 'Your message content',
delivery_report: 'summary'
},
{
headers: {
'Authorization': `Bearer ${SINCH_API_TOKEN}`,
'Content-Type': 'application/json'
}
}
);
console.log('Message sent:', response.data.id);
} catch (error) {
console.error('Sinch API error:', error.response?.data);
}
}Send SMS to Pakistan with MessageBird API
MessageBird provides reliable SMS delivery in Pakistan with strong operator connections across all major networks.
import messagebird from 'messagebird';
const client = messagebird(process.env.MESSAGEBIRD_API_KEY);
function sendMessageBirdSMS() {
const params = {
originator: 'YOUR_SENDER_ID',
recipients: ['+923xxxxxxxxx'],
body: 'Your message content',
// Optional parameters
reportUrl: 'https://your-callback-url.com/status',
validity: 3600 // Message validity in seconds
};
client.messages.create(params, (error, response) => {
if (error) {
console.error('MessageBird error:', error);
return;
}
console.log('Message sent successfully:', response.id);
});
}Send SMS to Pakistan with Plivo API
Plivo offers competitive rates and good coverage across Pakistani mobile operators including Jazz, Telenor, Zong, and Ufone.
import plivo from 'plivo';
const client = new plivo.Client(
process.env.PLIVO_AUTH_ID!,
process.env.PLIVO_AUTH_TOKEN!
);
async function sendPlivoSMS() {
try {
const response = await client.messages.create({
src: 'YOUR_SENDER_ID', // Your sender ID
dst: '923xxxxxxxxx', // Destination number
text: 'Your message content',
// Optional parameters
url: 'https://your-callback-url.com/status',
method: 'POST'
});
console.log('Message sent:', response.messageUuid[0]);
} catch (error) {
console.error('Plivo error:', error);
}
}Provider Comparison
| Provider | Delivery Rate | Avg. Latency | Rate Limit (default) | Best For |
|---|---|---|---|---|
| Twilio | 96-98% | 2-4 seconds | 1 msg/sec | Enterprise, reliability |
| Sinch | 95-97% | 2-3 seconds | 10 msg/sec | Direct operator access |
| MessageBird | 94-96% | 3-5 seconds | 5 msg/sec | European businesses |
| Plivo | 93-95% | 3-6 seconds | 5 msg/sec | Cost-sensitive projects |
API Rate Limits and Throughput
- Default rate limits vary by provider (typically 1-10 messages per second)
- Implement exponential backoff for retry logic
- Use batch APIs for high-volume sending
- Consider queue systems like Redis or RabbitMQ for large campaigns
Rate Limiting Implementation:
import Bottleneck from 'bottleneck';
// Create rate limiter: 10 messages per second
const limiter = new Bottleneck({
minTime: 100, // 100ms between requests = 10/sec
maxConcurrent: 5
});
// Wrap your SMS function
const sendSMSLimited = limiter.wrap(async (to: string, message: string) => {
return await client.messages.create({
body: message,
from: 'YOUR_SENDER_ID',
to: to
});
});
// Use in bulk sending
async function sendBulkSMS(recipients: string[], message: string) {
const promises = recipients.map(to => sendSMSLimited(to, message));
return await Promise.all(promises);
}Error Handling and Reporting
- Implement comprehensive logging with Winston or similar
- Monitor delivery receipts via webhooks
- Track common error codes
Complete Error Code Reference:
| Error Code | Description | Common Causes | Resolution |
|---|---|---|---|
| 21614 | Invalid number format | Landline, malformed number | Use +923xxxxxxxxx format |
| 21408 | Rate limit exceeded | Too many requests | Implement exponential backoff |
| 21611 | Unregistered sender ID | Sender ID not approved | Register with operator |
| 30007 | Message filtered | Prohibited content | Review content guidelines |
| 30008 | Unknown destination | Number inactive/invalid | Verify number status |
| 21610 | Message body required | Empty message | Include message content |
| 30003 | Unreachable destination | Network/coverage issues | Retry after delay |
Logging Implementation:
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: 'combined.log' })
]
});
async function sendWithLogging(to: string, message: string) {
try {
logger.info('Sending SMS', { to, messageLength: message.length });
const result = await client.messages.create({
body: message,
from: 'YOUR_SENDER_ID',
to: to
});
logger.info('SMS sent successfully', {
messageSid: result.sid,
to,
status: result.status
});
return result;
} catch (error: any) {
logger.error('SMS sending failed', {
to,
error: error.message,
errorCode: error.code,
errorDetails: error
});
throw error;
}
}Recap and Additional Resources
Key Takeaways
-
Compliance First
- Register sender IDs with operators
- Maintain consent records for 2+ years
- Process opt-out requests within 24 hours
-
Technical Considerations
- Use appropriate sender IDs (alphanumeric, short codes, or long codes)
- Implement comprehensive error handling for Pakistan-specific error codes
- Monitor delivery rates by operator (target 95%+)
-
Best Practices
- Send during recommended hours (9 AM-9 PM PKT weekdays)
- Localize content in English and Urdu
- Maintain clean contact lists and honor DNCR
Next Steps
- Review PTA regulations at www.pta.gov.pk
- Consult with local legal counsel for compliance verification
- Set up test accounts with preferred SMS providers (Twilio, Sinch, MessageBird, or Plivo)
- Implement consent management systems with double opt-in
- Configure webhook handling for delivery receipts
- Test across all four major operators (Jazz, Telenor, Zong, Ufone)
Implementation Timeline (typical for new deployments):
- Week 1: Legal review and PTA compliance assessment
- Week 2-3: Sender ID registration (3-5 business days per operator)
- Week 4: API integration and testing
- Week 5-6: Short code application (if needed, 4-6 weeks total)
- Week 7: Pilot campaign with limited audience
- Week 8+: Full production rollout
Additional Resources
- Pakistan Telecommunication Authority: www.pta.gov.pk
- National Do Not Call Registry: https://ndc.pta.gov.pk
- SMS Marketing Guidelines: PTA Guidelines
Industry Resources:
- Mobile Marketing Association Guidelines
- GSMA Messaging Fraud Prevention Guidelines
- Local Telecom Operator Guidelines:
- Jazz Business Solutions
- Telenor Business
- Zong Enterprise Solutions
- Ufone Corporate Services
Frequently Asked Questions:
Q: How long does sender ID registration take? A: 3-5 business days per operator once you submit documentation.
Q: Can I use the same sender ID across all operators? A: Not guaranteed – Ufone and Telenor may replace alphanumeric IDs with numeric codes. Register separately with each operator.
Q: What's the maximum message length for Urdu content? A: 70 characters per segment (UCS-2 encoding). Messages exceeding 70 characters split into multiple segments.
Q: Do I need separate consent for transactional vs. promotional messages? A: Yes. Explicit consent is mandatory for promotional messages. Transactional messages (order confirmations, OTPs) don't require prior consent but must be relevant to existing customer relationships.
Q: What happens if I send to a number on the DNCR? A: Operators block messages to DNCR-registered numbers. Repeated violations result in sender ID suspension and potential PTA penalties.