Your system generates the code. We deliver it to any Malaysian mobile number from a 5-digit short code, in seconds, for RM0.20 — with no monthly fee and no sender ID paperwork to start.
Small and mid-sized businesses that need to confirm a phone number belongs to a real person: an online shop verifying new accounts, a booking system confirming the customer's number, a membership or loyalty app, a SaaS product adding login codes, a delivery or service platform that has to reach the customer later. Typical volumes are a few hundred to a few tens of thousands of codes a month — too small to negotiate a carrier contract, too important to leave on a free tool that stops working when you grow.
What we do is narrow on purpose: your system creates and checks the code; we deliver the SMS. There is no hosted "verify" widget to install and no per-verification fee on top of the SMS. If you already have a sign-up form and a database, you add one HTTP request.
RM0.20 per SMS, the same on every Malaysian mobile network. A normal OTP ("Your MyShop code is 482913. Valid for 5 minutes.") is about 60 characters — one segment, so one charge. Prepaid credit, no setup fee, no monthly fee, no minimum, and the credit does not expire. The rate drops automatically once your account's total volume passes the volume tiers.
| Codes per month | Cost at RM0.20 | Per day (approx.) |
|---|---|---|
| 500 | RM100 | RM3.30 |
| 2,000 | RM400 | RM13 |
| 10,000 | RM2,000 | RM66 |
When comparing with international platforms, compare the whole bill, not the headline rate: most charge in US dollars to a credit card (so the ringgit cost moves with the exchange rate), and a hosted verification product usually adds a fee per successful verification on top of the SMS itself. Retries count too — a provider that double-sends on a timeout doubles your cost for those users. Our full breakdown of what drives an SMS bill is in bulk SMS cost in Malaysia.
A request with three numbers or fewer is not queued behind anyone's bulk campaign — it is handed to the carrier as soon as it is accepted. Over the two weeks to 9 October 2026, small sends on our platform reached the carrier in 2.3 seconds on average; 84% took 5 seconds or less and 97% took 10 seconds or less.
That is the time to the carrier, not to the handset. Most codes then land within a few seconds, but a phone that is switched off, out of coverage or roaming receives it later or not at all — no SMS provider can change that. Design for it: show the code screen straight away, and offer a "resend" button after about 60 seconds rather than retrying automatically.
Codes arrive from the 5-digit short code 66886. Malaysians are used to receiving bank and e-wallet codes from 5-digit numbers, so it reads as legitimate. Two things to know before you choose us:
Idempotency-Key.
If your server times out and retries with the same key, the user still gets one SMS and you pay once.curl https://hantarsms.com/api/v1/messages \
-H "X-API-Key: $HANTARSMS_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: otp-7f3a91" \
-d '{"to":"60123456789","text":"MyShop: your code is 482913. Valid for 5 minutes. Do not share it."}'
Ready-to-paste PHP, Laravel and WordPress code and message templates are in our guides; Python, Node.js and Java examples and the full OTP checklist are in the API documentation. If you do not have a developer, the dashboard can send a single message by hand, but for sign-up codes you do need the API.
Every OTP request costs money, including requests from bots. Public sign-up and "forgot password" forms are a well-known target: a script submits thousands of numbers, and the business pays for every code. This is the most common way a small business gets a surprise SMS bill. On your side:
On ours, each API key has a send-rate limit (60 requests a minute by default, adjustable if your real peak is higher), and every message is listed per number in the dashboard, so an attack shows up as a wall of unfamiliar numbers rather than a line on next month's bill.
Whoever you use, ask these before you integrate:
No. Your system generates the code, stores it with an expiry, and checks what the user types. We deliver the SMS. This keeps the code inside your own system and means there is no extra per-verification fee.
RM0.20 per segment on HantarSMS. A normal verification message in plain English is one segment. Writing it in Chinese or adding an emoji switches it to Unicode, which halves the characters per segment, so keep OTP text in plain English or Malay.
Not on our platform. Codes come from the shared 5-digit short code 66886. Put your brand at the start of the message text, for example "MyShop: your code is 482913".
No. We deliver to Malaysian mobile numbers (60…) only. If your users are in several countries you will need an international provider for the others.
Look the number up in the dashboard or through the API: it shows whether the SMS was submitted and, when the carrier reports it, whether it was delivered. A phone that is off or out of coverage receives it late or not at all. Let the user request a new code after about 60 seconds.
No. Prepaid credit, no setup fee, no monthly fee, no minimum and no contract. The credit does not expire.
Create an account, claim the RM1 trial credit on WhatsApp, and you can send your first OTP from the dashboard or the API the same day.