The same rate on every Malaysian mobile network, lower automatically as your volume grows. You pay per SMS segment sent — no monthly fee, no contract.
standard rate per segment (up to 156 English characters) · all Malaysian networks
SMS is billed per segment, not per message. This is an industry-wide standard, not our rule — but plenty of providers don't explain it, so here it is.
| Message content | Encoding | Characters per segment | Cost per recipient |
|---|---|---|---|
| English only | GSM-7 | 156 | RM0.20 |
| English, 300 characters | GSM-7 | 153 × 2 segments | RM0.40 |
| Any Chinese / Tamil / emoji | Unicode | 66 | RM0.20 |
| Chinese, 100 characters | Unicode | 67 × 2 segments | RM0.40 |
A single emoji anywhere in your message flips the whole thing to Unicode and cuts your single-segment allowance from 156 to 66 (our upstream route adds a 4-character prefix to every message). Our dashboard shows the segment count and total cost live as you type, so this never surprises you at checkout.
Per-segment pricing only becomes concrete when you put a message next to it. These are worked
examples at RM0.20 per segment — the arithmetic is segments × recipients × RM0.20.
| What you send | Chars | Segments | To 1,000 people |
|---|---|---|---|
| OTP: Your code is 481203. Valid 5 minutes. | 37 | 1 | RM200 |
| Booking reminder with date, time and address | 145 | 1 | RM200 |
| Promo with brand, offer, link and opt-out contact | 156 | 1 | RM200 |
| The same promo, 12 characters longer | 168 | 2 | RM400 |
| The same promo with one emoji added | 157 | 3 | RM600 |
| Chinese notice, 60 characters | 60 | 1 | RM200 |
| Chinese notice, 90 characters | 90 | 2 | RM400 |
Rows four and five are the ones that catch people. Twelve extra characters double the bill. One emoji triples it, because it converts the whole message to Unicode and drops the per-segment allowance from 156 characters to 66. Nothing about the offer changed.
Paste your draft into the SMS segment calculator before you commit a budget. It counts what you will actually be billed, including the upstream prefix described below.
A message longer than one segment is not sent as two independent messages. It is split, and each part carries a small header telling the handset how to reassemble them in order. That header occupies space inside the segment, which is why the allowance drops once you cross the boundary:
| Encoding | Fits in one segment | Per segment once split | Lost to the header |
|---|---|---|---|
| GSM-7 (plain English) | 160 | 153 | 7 characters |
| Unicode (any Chinese, Tamil, emoji) | 70 | 67 | 3 characters |
Counting the 4-character prefix described below, 157 characters of English is 2 segments (not 1 + a bit), and 302 characters is 2 — but 303 is 3. The awkward consequence: trimming a message from 157 to 156 characters halves its cost, and no other single edit on this page saves you as much.
One more thing specific to our route: our upstream route adds a 4-character prefix to every message, and those characters come out of your allowance. So one segment holds 156 plain-English characters, or 66 if the message uses Unicode (e.g. Chinese) — a message you measured at exactly 160 characters in a text editor bills as 2 segments. Our calculator and the send screen both count the prefix, so the number you see before confirming is the number you are charged.
This is the part most pricing pages skip, and it is where invoices stop matching expectations. Operators bill on submission, not on delivery — so the honest answer is that some messages that never reach a handset are still billable, and we would rather say so here than argue about it later.
| Outcome | What happened | Charged? |
|---|---|---|
| Delivered | The network confirmed it reached the handset | Yes |
| Processing | Submitted to the operator, delivery receipt not back yet (this can take a few minutes to a few hours) | Yes |
| Undelivered | Accepted by the operator but never reached the handset — phone off for days, number recycled, content filtered | Yes — the operator billed us for it |
| Submission result unknown | The upstream returned an error or the connection dropped while submitting, so the message may already have gone out; shown as not delivered in your report | Yes — not refunded |
| Rejected | Rejected by the upstream and never submitted to the operator | No — refunded automatically |
Your delivery report separates these rather than collapsing them into one "failed" number, because only rejected messages are refunded. If a provider shows you a single failure count, you cannot reconcile their invoice even in principle. More on the mechanics: why SMS is not delivered in Malaysia.
Protected brand names. Malaysian operators penalise messages containing protected international brand names at RM1.50 per segment — seven and a half times the price of the message. A 1,000-recipient promo mentioning one is a RM1,500 penalty on RM200 of traffic. The platform may block or warn about messages containing international brand names, but it cannot catch every one — operators fine these messages and recover the fine from the sender.
Duplicates in your list. The same number three times is three charges and one irritated recipient. We de-duplicate before quoting you, so the price you see is for unique recipients.
There is no API plan, no developer tier and no per-request fee. A message sent through the REST API costs exactly what the same message costs from the web console — the same per-segment rate as your account (RM0.20 standard, lower volume tiers apply automatically), from the same prepaid balance.
| Item | Cost |
|---|---|
| Sending an SMS segment | RM0.20 standard, down to RM0.14 with volume |
| API access | Free |
| API keys (multiple, revocable) | Free |
| Per-number delivery reports | Free |
| Sending from our shared short code | Free |
| Account setup | Free |
| Monthly platform fee | None |
| Minimum spend or contract | None |
| Credit expiry | Never expires |
| Online top-up (FPX / DuitNow) | Small payment-gateway fee per transaction, shown before you pay (plus SST if it applies) |
The reason this matters for transactional sending: OTP and notification volume follows your business, not a plan. A quiet month should cost less, not the same as your busiest one. Prepaid credit with no monthly fee fits that shape; a subscription sized for your peak does not.
We currently send everything from the shared short code 66886 and don't offer branded sender IDs or dedicated short codes. Background on both: short code SMS and sender ID registration.
Most quotes stop at the price of one SMS. A budget needs the total, and the total depends on how many segments each message uses and how far along the volume tiers your account is. At the standard RM0.20 per segment, a new account pays:
| Recipients | 1 segment | 2 segments | 3 segments |
|---|---|---|---|
| 1,000 | RM200 | RM400 | RM600 |
| 10,000 | RM2,000 | RM4,000 | RM6,000 |
| 100,000 | RM20,000 | RM40,000 | RM60,000 |
These are the ceiling, not the typical bill. The rate is set per order from the messages your account has already submitted, so a business that sends every week moves down the tiers within its first months. The calculator below does that arithmetic for a regular schedule.
Assumes every message is submitted (rejected numbers are refunded and do not count towards tiers) and the published tiers stay as they are. Not sure how many segments your message is? Paste it into the segment calculator.
A lot of SMS pricing in Malaysia is sold as packages: buy a bundle of credits up front, with a lower price per credit on bigger bundles. A package can be good value, but its headline price is not comparable with a per-segment rate until you have answered four questions:
HantarSMS has no packages: you top up the amount you need, credit never expires, and the volume rate is applied automatically instead of being bought in advance. For the full checklist when comparing providers, see how to choose an SMS provider in Malaysia, and for a breakdown of what drives the cost of a campaign, bulk SMS cost in Malaysia.
RM0.20 per segment on HantarSMS at the standard rate, the same for every Malaysian network, and lower automatically as your volume grows. The cost of a message depends on how many segments it uses: our upstream route adds a 4-character prefix to every message, so 156 characters of English is one segment, and anything containing a non-English character drops that to 66.
No. No setup fee, no monthly fee, no minimum spend, no contract. You buy prepaid credit and it does not expire; online top-ups carry a small payment-gateway fee per transaction, shown before you pay. If you send nothing for three months, it costs nothing.
Almost always encoding or length. One emoji, one Chinese character or a curly apostrophe pasted from a word processor converts the message to Unicode and cuts the single-segment allowance from 156 characters to 66. The other cause is crossing the one-segment line: because our upstream route adds a 4-character prefix, 157 characters of English is billed as two segments.
It depends which kind of failure. Messages the upstream rejects and never submits are refunded automatically. Messages submitted to the operator are charged even if they never reach the handset, because the operator charges us on submission. If submission ends in an upstream error or a dropped connection, the result is unknown and the message may already have gone out — those are charged, not refunded, and show as not delivered in your report.
No. Same per-segment rate as your console account (RM0.20 standard, lower volume tiers apply automatically), same balance, no API plan or per-request fee. API keys are free and you can hold several.
Same per-segment rate, but a single Unicode segment holds 66 characters instead of 156 (our upstream route adds a 4-character prefix to every message) — so Chinese text costs roughly 2.4× more per character than English. A 60-character Chinese notice is one segment; at 67 characters it becomes two.
Yes, and it applies automatically. The standard rate is RM0.20 per segment; once your account has 5,000 successfully submitted messages it drops to RM0.18, then RM0.17 from 20,000, RM0.16 from 50,000, RM0.15 from 150,000 and RM0.14 from 300,000. Each order is priced in full at the tier your cumulative total has reached when you place it, and refunded (rejected) messages do not count.
Yes. After signing up, message us on WhatsApp to claim RM1 of trial credit — enough for about 5 single-segment English messages to your own handset, so you can read the delivery report before topping up.
The rate drops automatically as your account's total grows: RM0.18 per segment from 5,000 successfully submitted messages, RM0.17 from 20,000, RM0.16 from 50,000, RM0.15 from 150,000 and RM0.14 from 300,000. Each order is priced at the tier you have reached when you place it; refunded messages don't count. No application needed — see the full tier table.
Sign up, then WhatsApp us to claim RM1 of trial credit and send a real SMS before topping up.