IOSOR Learn
Segment accounting: why one SMS is not one spend line
A pricing guide to SMS segment accounting — GSM-7 vs UCS-2 encoding, multipart concatenation overhead, and how to reconcile every send against the prepaid wallet without guesswork.
A user typed one message. The prepaid wallet debited three units. That gap is not a bug — it is segment accounting, and finance teams that do not understand GSM-7 vs UCS-2 and multipart concatenation will file support tickets against a billing engine that is working exactly as designed.
IOSOR treats every SMS spend line as reconstructable to segment count, encoding, and destination — not an opaque platform fee. Near USD 1,000+ monthly platform usage, segment discipline is the difference between a clean monthly reconciliation and a recurring "why did this cost more" escalation.
Why one SMS is not one spend line
| What the sender sees | What the wallet sees |
|---|---|
| "I sent one text" | 1–3 billed units depending on encoding and length |
| One emoji added at the end | The whole message flips to UCS-2 |
| A template variable a few characters longer | The message crosses a segment boundary |
GSM-7 vs UCS-2: why the character set changes the math
- GSM-7 covers a limited Latin alphabet and a small symbol set; each character costs less "budget" per segment
- UCS-2 (any character outside GSM-7 — emoji, most non-Latin scripts, some punctuation) forces the whole message into a wider encoding with a lower per-segment character limit
- One "invisible" character (a smart quote pasted from a document, a checkmark, an emoji) can silently flip the whole message from GSM-7 to UCS-2
Multipart segmentation and concatenation overhead
| Encoding | Single-segment limit | Multipart segment limit | Why multipart is smaller |
|---|---|---|---|
| GSM-7 | 160 chars | 153 chars | Concatenation header reserves space |
| UCS-2 | 70 chars | 67 chars | Same header, smaller alphabet budget |
Crossing the single-segment limit does not "round up" gracefully — the message splits into multiple segments, each carrying concatenation overhead, and rebills accordingly.
Where segment counts hide
- A composer preview showing "1 message" while the actual encoding produces 2–3 billed segments
- Template variables that push length over a boundary only for some recipients
- Locale-specific characters (accents, non-Latin scripts) that pass QA in one language and multiply cost in another
Red flags
- Composer or API response reporting message count instead of segment count
- No visibility into which encoding was used for a specific send
- Support says "encoding issues are rare, don't worry about it"
- Ledger rows that cannot be traced back to length, encoding, and destination
- Bulk sends billed as a flat estimate reconciled only at month-end
Start with IOSOR
Review your outbound template payloads in the IOSOR console before triggering large dispatches. Configure API validation gates to flag any payload that exceeds a single segment or unexpectedly shifts from GSM-7 to UCS-2 encoding. Ensure your delivery report webhooks explicitly tie balance deductions back to exact billed segment counts rather than generic message counts.
- Prepaid Hold Reserves: Calculating Available Wallet Balance Under High Campai…
- Pricing invoice week: quote vs billed rows
- Prevent Silent Debits When Campaigns Flip Charsets Mid-Send
IOSOR takeaway
A single outbound text message rarely translates into a single spend line. The choice between GSM-7 and UCS-2 encodings, combined with the header overhead of multipart concatenation, means a slight variation in dynamic text or a single special character can easily double your billing per recipient.
Do enforce strict character encoding checks and template length limits at the dispatch composer level. Don't rely on high-level message-count previews or untraceable ledger rows that mask encoding flips and multi-segment billing penalties.
Was this guide helpful?
Related guides
- Incident Week Route Failover: Reconciling Rate Discrepancies After Emergency Switching
Master post-incident wallet ledger reconciliation for high-cost secondary carrier failovers on your white-label CPaaS platform.
- Sub-Account Volume Recalibration: Transitioning Clients Beyond Initial Monthly Floors
Adjust client prepaid rate structures and top-up floors once monthly dispatch volume consistently exceeds baseline thresholds.
- Toll-Free Verification Surcharges: Accounting for One-Time Prepaid Registry Fees
Learn how white-label CPaaS platforms debit one-time carrier verification and campaign registry surcharges from child account prepaid balances.