🏠 Home ℹ️ About Us
📩 Contact Us 🔔 Notice
🔑 Log In 📝 Free Sign Up
HomeAPI & DevSend SMS with PHP

Send SMS with PHP

Integrate iSMS bulk SMS into your PHP application using our HTTPS API. Send single or multiple SMS messages with cURL — no SDK required.

PHP · cURL HTTPS POST v2.1
⚠️
IP whitelist required. Every API request must originate from a whitelisted server IP. Email support@mobiweb.com.my to whitelist your IP before your first call — non-whitelisted requests are rejected with -1003.
ℹ️
You will also need to register a free iSMS account and purchase SMS credits. Full parameters, response codes and delivery callbacks are in the SMS API documentation.
API Endpoints
Classic HTTPS GET / POST — point your integration at the primary
// 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
ℹ️
Use 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.
💡
Sending different text to each recipient? The newer JSON API (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.
Step 2 — Send a Single SMS
PHP · cURL POST
<?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
}
Step 3 — Send to Multiple Recipients
Separate multiple numbers with semicolons ; — recommended max 30 numbers per API call for reliability.
PHP · Multiple Recipients
$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 above
API Response
✅ Success
2000 = SUCCESS:1143007207
// 1143007207 is the TRX_ID — store it
// to match delivery callbacks later
❌ Error codes
-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 AGREEMENT
⚠️
Delivery status scope (Malaysia): a 2000 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.

Ready to Integrate?

Register free, get API credentials, and start sending in minutes.

📱 SMS Coverage — Every Country We Reach Jump to a country's rate by first letter

A B C D E F G H I J K L M N O P Q R S T U V Y Z