Skip to content

SMS cost is per segment, not per message. Encoding determines how many characters fit in a segment — and a single character can change the encoding of the whole message.

EncodingSingle SMSMulti-part (per segment)Used when
GSM-7160 chars153 charsAll characters fit the GSM alphabet (Latin, digits, common symbols)
UCS-270 chars67 charsAny character outside GSM-7: emoji, Cyrillic, Chinese, Arabic, …

These characters are valid GSM-7 but count as 2 characters each:

€ ^ { } [ ] \ ~ |

A 159-character message containing one is therefore 160 GSM-7 characters — still 1 segment. At 160 it would split into 2.

MessageEncodingSegments
160 Latin charactersGSM-71
161 Latin charactersGSM-72
306 Latin charactersGSM-72 (153 × 2)
50 characters with one emojiUCS-21
71 Cyrillic charactersUCS-22

The send response reports what was detected and billed:

"summary": {
"encoding": "GSM-7",
"total_segments": 2,
"total_cost": 0.017
}

Per-recipient segment counts are in results[].segments.

  • Verification codes & alerts: stick to plain Latin text — they will always be 1 cheap segment.
  • Marketing texts in Cyrillic or with emoji: budget for UCS-2 — keep texts under 70 characters (or under 67 × N for multi-part) to control cost.
  • Watch invisible characters: smart quotes ("…"), long dashes () and non-breaking spaces pasted from editors are not in the GSM alphabet and silently switch the message to UCS-2.
  • Test before a campaign: send the exact text to your own number and check summary.encoding and total_segments in the response.