A single SMS message technically supports up to 160 characters, or up to 70 if the message contains one or more Unicode characters (such as emoji or Chinese characters).
However, modern phones and mobile networks support message concatenation, which enables longer messages to be sent. Messages longer than 160 characters are automatically split into parts (called "segments") and then re-assembled when they are received. Message concatenation allows you to send long SMS messages, but this increases your per-message cost, because SMS are billed per segment.
The 160-character limit is for messages encoded using the GSM-7 character set. Messages not encoded with GSM-7 are limited to 70 characters. For detail on how these character limits change on concatenated (multi-segment) messages, see below.
Twilio's platform supports long messages up to 1600 characters across all Programmable Messaging channels, including SMS. However, for SMS messaging, Twilio recommends sending messages that are no more than 320 characters to ensure the best deliverability and user experience. See this article for details.
When you send an SMS message containing more than 160 characters, the message is split into smaller messages for transmission. Large messages are split into 153-character "segments" and sent individually, then re-assembled by the recipient's device. The effective character limit per segment is 153 rather than 160, because a data header must be included with each segment to ensure correct re-assembly.
For example, a 161-character message will be sent as two messages: one with 153 characters and a second with eight characters.
If you include non-GSM-7 characters, such as Chinese script or emoji, in SMS messages, those messages have to be sent using the UCS-2 encoding. Messages containing one or more UCS-2 characters can contain up to 70 characters in a single, non-segmented message. UCS-2 messages of more than 70 characters will be split into 67-character segments.
If you choose, Twilio's Smart Encoding feature can replace certain non-GSM characters with equivalent GSM characters, to reduce message cost when possible. For example, angled quotation marks "" are not in the GSM character set, but Twilio Smart Encoding will replace them automatically with straight quotation marks "".
Twilio bills SMS for every message segment sent. So, for example, if you need to send a message that is 140 characters long and contains only one non-GSM character, you (or Twilio Smart Encoding) can avoid the cost of a second message segment by removing that UCS-2 character.
Toll-Free multi-segment SMS messages sent to the US or Canada have a total of 152 characters available per segment for GSM-encoded messages and 66 for UCS-2 messages.
The Short Messaging Service (SMS) is a standardized communication protocol that enables devices to send and receive brief text messages. It was designed to "fit in between" other signalling protocols, which is why SMS message length is limited to 160 7-bit characters, i.e., 1120 bits, or 140 bytes. SMS was first standardized as part of the 1985 GSM protocol and was subsequently codified into the SMPP signalling protocol that transmits SMS.
But things get tricky because GSM-7, the original character set designed for SMS, can only encompass 128 different characters, thanks to that 7-bit limit. So if you want to include characters from extended Latin or non-Latin scripts, you'll need to use UCS-2.
A common mistake is to inadvertently use a UCS-2 character. GSM-7 isn't a supported character set in many text editors, which may replace GSM-7 compatible characters with characters outside of GSM-7. For example, if your text editor changes
“ — a 'curly' or 'smart' quote mark — you will have a UCS-2 character in your message and that will reduce the character limit from 160 to 70.
We recommend that you check any messages that you plan to send frequently using our Message Segment calculator before you send them. This tool can flag any characters that would force the message to be sent using UCS-2 encoding, so you can decide whether to remove those characters and reduce the cost per message.
You can see whether any Twilio SMS message sent from your account was encoded as UCS-2 or GSM-7 by viewing the message in your Console logs.