-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.import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
public class IsmsSender {
public static void main(String[] args) throws Exception {
String apiUrl = "https://www.isms.com.my/isms_send_all_id.php";
String params = "un=" + URLEncoder.encode("your_username", "UTF-8") +
"&pwd=" + URLEncoder.encode("your_password", "UTF-8") +
"&dstno=" + URLEncoder.encode("601X-XXXXXXX", "UTF-8") +
"&msg=" + URLEncoder.encode("Hello from iSMS!", "UTF-8") +
"&type=1" + // 1 = ASCII, 2 = Unicode
"&agreedterm=YES" +
"&sendid=" + URLEncoder.encode("MyBrand", "UTF-8");
byte[] postData = params.getBytes(StandardCharsets.UTF_8);
URL url = new URL(apiUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setConnectTimeout(15000);
conn.setReadTimeout(30000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postData.length));
try (OutputStream os = conn.getOutputStream()) {
os.write(postData);
}
int status = conn.getResponseCode();
InputStream is = (status == 200) ? conn.getInputStream() : conn.getErrorStream();
try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
String response = br.readLine();
if (response != null && response.startsWith("2000")) {
String trxId = response.split(":")[1];
System.out.println("SMS sent! Transaction ID: " + trxId);
} else {
System.err.println("Failed: " + response);
}
}
conn.disconnect();
}
}2000 = 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 your API credentials, and start sending in minutes.