SMS (Short Message Service) is the most universal messaging channel, reaching virtually any mobile phone without requiring an internet connection or app installation.
When to Use SMS
Verification codes : OTPs, 2FA
Transactional alerts : Order confirmations, shipping updates
Time-sensitive notifications : Appointment reminders
Universal reach : When you need to reach users without smartphones
Sending an SMS
TypeScript
Python
Ruby
Go
PHP
cURL
const result = await zavu . messages . send ({
to: "+14155551234" ,
text: "Your verification code is 123456" ,
channel: "sms" ,
});
You can optionally specify a sender by passing zavuSender (TypeScript), zavu_sender (Python), or the Zavu-Sender header (cURL). If omitted, your project’s default sender is used.
Message Length
SMS messages are limited to 160 characters (GSM-7 encoding) or 70 characters (Unicode). Longer messages are split into multiple segments.
Encoding Single SMS Concatenated SMS GSM-7 160 chars 153 chars/segment Unicode 70 chars 67 chars/segment
Keep messages under 160 characters when possible to avoid multi-segment charges.
Character Encoding
GSM-7 supports basic Latin characters. Using emojis, accents, or non-Latin scripts triggers Unicode encoding:
GSM-7: "Your code is 123456" (20 chars, 1 segment)
Unicode: "Your code is 123456" (22 chars, 1 segment with special chars)
Unicode: "Tu codigo es 123456" (19 chars, 1 segment, 'o' with accent triggers Unicode)
GSM-7 Character Set
A-Z a-z 0-9
@ $ _ ! " # % & ' ( ) * + , - . / : ; < = > ?
Space, newline, carriage return
Any character outside this set triggers Unicode encoding.
Sender ID
Some countries support alphanumeric sender IDs (e.g., “ZAVU” instead of a phone number).
Alphanumeric sender IDs cannot receive replies. Use a phone number if you need two-way SMS.
Supported Countries
Region Alphanumeric Sender ID US/Canada Not supported (10DLC or short code required) UK Supported EU Mostly supported LATAM Varies by country
Delivery Status
Check message status by ID:
curl https://api.zavu.dev/v1/messages/msg_abc123 \
-H "Authorization: Bearer zv_live_xxx"
Status Description queuedAccepted, pending delivery sentSent to carrier deliveredConfirmed delivered failedDelivery failed
Common Errors
Error Code Description Solution 30003Unreachable destination Invalid number or phone off 30004Message blocked Content filtered by carrier 30005Unknown destination Number doesn’t exist 30006Landline destination Cannot send SMS to landlines 30007Carrier violation Message rejected by carrier
Compliance
SMS messaging is regulated. Ensure you have consent before sending messages.
Requirements
Opt-in consent : Users must explicitly agree to receive SMS
Opt-out mechanism : Include instructions to unsubscribe (e.g., “Reply STOP to unsubscribe”)
Business identification : Identify your business in the message
Time restrictions : Avoid sending during quiet hours (typically 9 PM - 9 AM local time)
Example Compliant Message
[YourBrand] Your order #12345 has shipped! Track: https://track.co/abc
Reply STOP to unsubscribe
Best Practices
Keep it short - Aim for under 160 characters
Identify yourself - Start with your brand name
Be actionable - Include clear next steps or links
Respect timing - Send during business hours in the recipient’s timezone
Provide opt-out - Always include unsubscribe instructions for marketing messages