-1003.// 1 — PRIMARY — use this
https://www.isms.com.my/isms_send_all_id.php
// 2 — Mirror — backup only
https://smtpapi2.vocotext.com/isms_send_all_id.php
// 3 — Mirror — backup only
https://smtpapi.vocotext.com/isms_send_all_id.php
// 4 — Mirror — backup only
https://ww3.isms.com.my/isms_send_all_id.php
www.isms.com.my as your production endpoint. The other hosts are mirrors for failover only — switch to one automatically if the primary is unreachable, but do not point your integration at a mirror by default.isms_send_json.php) takes up to 50 recipients per call, each with its own message, and returns structured per-recipient results. Same credentials, same sender IDs, same whitelist.<?php
$apiUrl = 'https://www.isms.com.my/isms_send_all_id.php';
$params = [
'un' => 'your_username', // iSMS account username
'pwd' => 'your_password', // iSMS account password
'dstno' => '601X-XXXXXXX', // Recipient — full international format
'msg' => 'Hello from iSMS!', // Message body (URL-encoded auto by http_build_query)
'type' => '1', // 1 = ASCII (English/BM), 2 = Unicode (Chinese/Arabic)
'agreedterm' => 'YES', // Must be YES
'sendid' => 'MyBrand', // Optional: Sender ID (max 11 chars, alphanumeric)
];
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$response = curl_exec($ch);
$curlError = curl_error($ch);
curl_close($ch);
if ($curlError) {
echo 'Connection error: ' . $curlError;
} elseif (strpos($response, '2000') !== false) {
// Success — extract transaction ID
$trxId = explode(':', $response)[1] ?? '';
echo 'SMS sent! Transaction ID: ' . trim($trxId);
} else {
echo 'Failed: ' . $response; // e.g. -1004 = Insufficient credits
}; — recommended max 30 numbers per API call for reliability.$recipients = ['601X-XXXXXXX', '601X-XXXXXXX', '601X-XXXXXXX'];
$params['dstno'] = implode(';', $recipients); // Semicolon-separated
$params['msg'] = 'Dear customer, your order is confirmed!';
// ... same cURL setup as above2000 = SUCCESS:1143007207
// 1143007207 is the TRX_ID — store it
// to match delivery callbacks later-1000 UNKNOWN ERROR
-1001 AUTHENTICATION FAILED
-1002 ACCOUNT SUSPENDED / EXPIRED
-1003 IP NOT ALLOWED
-1004 INSUFFICIENT CREDITS
-1005 INVALID SMS TYPE
-1006 INVALID BODY LENGTH
-1007 INVALID HEX BODY
-1008 MISSING PARAMETER
-1009 INVALID MESSAGE CONTENT
-1010 MAX DESTINATION NUMBERS EXCEEDED
-1012 INVALID MESSAGE TYPE
-1013 INVALID TERM AGREEMENT2000 response confirms submission to the Telco SMSC only — not delivery to the handset. Malaysian telcos do not provide handset-level DLR by default. For confirmed Sent → Received → Read tracking, consider WhatsApp Business API.Register free, get API credentials, and start sending in minutes.