How many segments
is this message?
SMS is billed per segment, not per message. Paste a body below and this counts it with the same engine that bills Nishchit traffic — not an approximation of it.
An SMS carries 140 bytes. English packs into GSM-7 at seven bits per character, so one segment holds 160 characters. Bangla has no GSM-7 representation, so a single Bangla character moves the whole message to UCS-2 at sixteen bits per character — one segment holds 70 characters. That is why the same notification costs about three times as much in Bangla.
Every character here exists in the GSM 03.38 table, so the message packs into GSM-7 at 160 characters per single segment and 153 per segment once it splits. The characters ^ { } \ [ ~ ] | € each cost two.
- Characters
- 27
- Septets billed
- 27
- Per segment
- 160
- Segments
- 1
- Credits per message
- 1
- Recipients
- 1,000
This is the same segment engine used by POST /v1/pricing/preview, which is authoritative at send time. A calculator that disagrees with the invoice would be worse than no calculator at all.
Four numbers,
and they are not 160 and 70.
Once a message splits, each part carries a six-byte header identifying its position, so the per-segment capacity drops. These are the numbers that actually apply.
| ENCODING | USED FOR | SINGLE SEGMENT | PER PART WHEN SPLIT |
|---|---|---|---|
| GSM-7 | English, digits and common punctuation | 160 | 153 |
| UCS-2 | Bangla, emoji, and any character outside GSM-7 | 70 | 67 |
Eight messages,
counted by the engine.
Every number in this table is computed at build time by the same function the API calls. None of them is typed in by hand.
| CASE | ENCODING | CHARS | BILLED UNITS | SEGMENTS |
|---|---|---|---|---|
Short English passcode Every character is in the GSM 03.38 table. | GSM-7 | 16 | 16 | 1 |
160 English characters Exactly the single-segment limit. | GSM-7 | 160 | 160 | 1 |
161 English characters One character over, so it splits — and the limit drops to 153 per part. | GSM-7 | 161 | 161 | 2 |
159 English characters plus € The euro sign costs two septets, so 160 visible characters bill as 161. | GSM-7 | 160 | 161 | 2 |
Short Bangla passcode Same character count as the English passcode, same one segment. | UCS-2 | 16 | 16 | 1 |
70 Bangla characters Exactly the UCS-2 single-segment limit. | UCS-2 | 70 | 70 | 1 |
71 Bangla characters One character over, so it splits at 67 per part. | UCS-2 | 71 | 71 | 2 |
English sentence with one emoji A single emoji moves an English message to UCS-2 and cuts capacity to 70. | UCS-2 | 24 | 25 | 1 |
Why billed units can exceed the character count
Nine characters live in a GSM-7 extension table and cost two septets each rather than one: ^ { } \ [ ~ ] | €. A message of 160 visible characters that contains one of them bills as 161 units, which splits it into two segments. This is the most common reason a message costs twice what its author expected while looking like it fits.
UCS-2 counts the same way for a different reason. Most characters, Bangla included, cost one unit — but anything outside the Basic Multilingual Plane, which is most emoji, is stored as a surrogate pair and costs two. That is why the emoji row above shows one more billed unit than it has characters.
Segments are a cost,
not a delivery promise.
This tool counts what a message will cost. It says nothing about whether it arrives. The primary Bangladesh route returns no delivery receipts, so messages sent over it end at sent with delivery_status: unknown, permanently — and no segment calculator anywhere can change that. It is worth knowing before you design a delivery screen.
Your product has something to say.
Give it a reliable way to say it.
Self-serve signup, live immediately. Content checked instead of paperwork.
One credit per segment at ৳0.35. No contract, no minimum.
An nk_test_ key never reaches a carrier or spends a credit.
One country, done properly — Bangla pricing, observable delivery.