Skip to main content
SMS is billed per segment, not per message. Understanding segments saves you money on long or non-Latin sends.

GSM-7 vs UCS-2

SMS has two encodings: We detect the encoding automatically: the moment any character in your body falls outside the GSM-7 alphabet, the entire message switches to UCS-2 — you don’t get to send 160 Latin chars plus one emoji as one segment.

Examples

Preview the segment count before sending using POST /v1/sms-templates/:id/render for templates, or compute it locally:

Why the count drops on concatenation

Multi-segment SMS uses a small header on each part to tell the phone how to reassemble the message. That header eats 7 chars in GSM-7 and 3 characters in UCS-2 — so a “160-char” segment really only has 153 of your characters to work with once it’s concatenated.

Cost implications

A friendly emoji can 2x or 3x your cost if you weren’t expecting UCS-2:

Best practices

Keep transactional under 160 GSM-7

Tight, no emoji, no fancy quotes. One segment per send.

Ascii-ify URLs

Don’t use URL shorteners with non-Latin chars — those force UCS-2.

Watch smart quotes

Word / Notes replace " with " and ' with ' — both UCS-2.

Preview campaign copy

Use the template render endpoint in CI to assert segment count ≤ 1.

Handy bytes worth avoiding

These tiny Unicode characters force the whole body to UCS-2:
  • " (U+201C) and " (U+201D) — curly quotes
  • ' (U+2019) — typographic apostrophe
  • (U+2026) — ellipsis
  • (U+2013) and (U+2014) — en/em dashes
  • Non-breaking space (U+00A0)
Replace with ", ', ..., -, --, and plain space respectively.