Sending
Text, encoding and SMS segments
An SMS carries 140 bytes. How many characters fit depends on the alphabet the text needs, and the price of a message is the price per segment times its segments.
| Encoding | One segment | Each part of a longer text | 10 segments |
|---|---|---|---|
| GSM-7 | 160 characters | 153 characters | 1,530 characters |
| UCS-2 (Unicode) | 70 characters | 67 characters | 670 characters |
GSM-7
GSM-7 covers the Latin letters A to Z and a to z, digits, common punctuation and a set of accented letters: à é è ì ò ù Ç Ø ø Å å Ä ä Ö ö Ñ ñ Ü ü É Æ æ ß, plus Greek capitals used in some countries. These extension characters count as two: ^ { } [ ] ~ | \ €.
UCS-2
One character outside GSM-7 switches the whole message to UCS-2. That includes Cyrillic, Arabic, Chinese and every other non-Latin script, accents such as á í ó ú ç ã, curly quotes pasted from a word processor, and emoji. An emoji counts as two characters, because it takes two UTF-16 units.
A single curly apostrophe (’) in an English text halves the characters per segment. The console composer names each character that forces Unicode, and POST /v1/estimates returns the encoding before you send.
Long messages
Texts longer than one segment are split and joined again on the handset, which is why each part holds a little less. The API accepts up to 10 segments; longer texts answer text_too_long.
Opt-out lines and merge fields
The console adds your opt-out wording from Settings (for example "Opt out: northwind.example/sms") to campaign texts and fills merge fields {{1}} to {{9}} from the columns of a pasted list or CSV. Through the API you control the text completely: add the line yourself, and use messages in a batch for personal text.