What makes SMS arrive — and what to do about the cases where it does not.
Every SMS provider claims high delivery rates. The number that matters is not the one on the marketing page — it is whether your OTP arrives in four seconds at 11pm on a public holiday, and whether you can tell what happened when it does not.
Three things decide that: the route your message takes, what happens when a route fails, and how honestly the result is reported back to you. This page covers all three, including the parts that are outside anyone's control.
Why number portability matters. When a subscriber moves their number to a different operator, the prefix no longer tells you which network they are on. A gateway that routes on prefix alone sends to the wrong network and the message fails. iSMS resolves the current network before routing. More on MNP support →
The SMS API is published on four hosts. www.isms.com.my is the production endpoint; three mirrors exist purely so your integration can fail over automatically if the primary is unreachable. The platform itself runs with a live failover environment on a mirrored database.
This is where most providers are vague. In Malaysia, a Delivered status confirms the telco's SMSC accepted your message — it does not confirm the message reached the handset. Malaysian operators do not provide handset-level confirmation on standard routes, and no provider can give you what the operator does not return.
We say so plainly because building business logic on a misunderstood status causes real problems — for instance treating an API 2000 response as proof a customer received their OTP.
Full DLR status reference → | Reading your delivery report →
| What happened | Status you will see | What to do |
|---|---|---|
| Handset off or out of coverage past the validity period | UNDELIVERED | Nothing — the SMSC already retried. Resend later if the message still matters. |
| Number inactive, disconnected or never issued | UNDELIVERED | Flag it in your database and stop sending to it. |
| Recipient inbox full | UNDELIVERED | Out of your control. Common on older handsets. |
| Wrong number format — missing country code, spaces, dashes | -1008 | Normalise to international format with no +, e.g. 60123456789. |
| Destination network unreachable or blocked to the carrier | FAIL | Nothing to do — Fail messages are not charged. |
| Message content filtered | -1009 | Check for prohibited content. URLs in SMS are not supported for Malaysian destinations. |
| Request came from an unapproved server | -1003 | Whitelist your sending IP with support before going live. |
A meaningful share of failed messages are fixable on the sender's side. In rough order of impact:
+, no spaces or dashes. Do it in code, not by asking users to format correctly.
Rates and available networks differ by destination. Search the full coverage list → | See MYR rates →
Related: One-Way Bulk SMS → | Two-Way SMS → | SMS Reports →