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.

EncodingOne segmentEach part of a longer text10 segments
GSM-7160 characters153 characters1,530 characters
UCS-2 (Unicode)70 characters67 characters670 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.

Text, encoding and SMS segments | BulkSMSAPI Docs