Dokumentasi resmi integrasi API pengiriman SMS (Plain & OTP), Cek Kredit, dan Delivery Report untuk pengembang aplikasi.
Endpoint ini digunakan untuk mengirimkan pesan SMS regular maupun OTP ke nomor tujuan single secara langsung.
| Parameter | Tipe | Status | Deskripsi |
|---|---|---|---|
| user | String | Wajib | Username akun NusaSMS Anda (contoh: simulator_api). |
| password | String | Wajib | Password akun NusaSMS Anda. |
| GSM | String | Wajib | Nomor penerima dalam format internasional tanpa tanda + (contoh: 6285100803380). |
| SMSText | String | Wajib | Isi pesan SMS. Pastikan di-encode URL jika dikirim via GET HTTP (contoh: Kode+OTP+1234). |
| otp | String | Opsional | Gunakan Y untuk prioritas rute OTP tinggi, atau N untuk SMS umum. Default: N. |
| output | String | Opsional | Format balasan yang diinginkan: json atau xml. Default: xml. Disarankan menggunakan json. |
Pilih bahasa pemograman di bawah ini untuk melihat contoh implementasi pengiriman SMS:
# Contoh Pengiriman SMS via cURL GET
curl -X GET "https://api.nusasms.com/api/v3/sendsms/plain?user=YOUR_USER&password=YOUR_PASSWORD&GSM=6285100803380&SMSText=Coba+Kirim+Pesan+via+NusaSMS&otp=Y&output=json"
<?php
$params = [
'user' => 'YOUR_USERNAME',
'password' => 'YOUR_PASSWORD',
'GSM' => '6285100803380',
'SMSText' => 'Kode OTP Anda adalah 710433',
'otp' => 'Y',
'output' => 'json'
];
$url = 'https://api.nusasms.com/api/v3/sendsms/plain?' . http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result);
import requests
url = "https://api.nusasms.com/api/v3/sendsms/plain"
params = {
"user": "YOUR_USERNAME",
"password": "YOUR_PASSWORD",
"GSM": "6285100803380",
"SMSText": "Kode OTP Anda adalah 710433",
"otp": "Y",
"output": "json"
}
response = requests.get(url, params=params)
data = response.json()
print(data)
const axios = require('axios');
const params = {
user: 'YOUR_USERNAME',
password: 'YOUR_PASSWORD',
GSM: '6285100803380',
SMSText: 'Kode OTP Anda adalah 710433',
otp: 'Y',
output: 'json'
};
axios.get('https://api.nusasms.com/api/v3/sendsms/plain', { params })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class NusaSMSService {
public static void main(String[] args) throws Exception {
String url = "https://api.nusasms.com/api/v3/sendsms/plain?" +
"user=YOUR_USERNAME" +
"&password=YOUR_PASSWORD" +
"&GSM=6285100803380" +
"&SMSText=Kode+OTP+Anda+adalah+710433" +
"&otp=Y&output=json";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.nusasms.com/api/v3/sendsms/plain"
params := url.Values{}
params.Add("user", "YOUR_USERNAME")
params.Add("password", "YOUR_PASSWORD")
params.Add("GSM", "6285100803380")
params.Add("SMSText", "Kode OTP Anda adalah 710433")
params.Add("otp", "Y")
params.Add("output", "json")
fullURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
resp, err := http.Get(fullURL)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
using var client = new HttpClient();
string url = "https://api.nusasms.com/api/v3/sendsms/plain?" +
"user=YOUR_USERNAME" +
"&password=YOUR_PASSWORD" +
"&GSM=6285100803380" +
"&SMSText=Kode+OTP+Anda+710433" +
"&otp=Y&output=json";
HttpResponseMessage response = await client.GetAsync(url);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
API NusaSMS akan mengembalikan respon dalam format JSON atau XML sesuai dengan parameter output yang Anda masukkan.
{
"status": "0",
"message": "Success",
"messageid": "053380444905641291",
"destination": "6285100803380"
}
{
"status": "-1",
"message": "Invalid Password",
"messageid": "",
"destination": "6285100803380"
}
Untuk mengecek sisa saldo/kredit SMS pada akun Anda secara terprogram:
{
"status": "0",
"credit": 15450,
"type": "sms"
}
Anda dapat mengecek status pengiriman pesan berdasarkan messageid yang didapat saat mengirim SMS:
| Kode Status | Keterangan |
|---|---|
| D / DELIVRD | Pesan telah berhasil terkirim sampai ke HP penerima (Delivered). |
| S / SENT | Pesan sudah terkirim ke sistem Operator/Gateway. |
| R / REJECTD | Pesan ditolak oleh operator / nomor tidak aktif / diluar jangkauan. |
| E / EXPIRED | Pesan kadaluarsa karena HP penerima mati dalam waktu lama. |
Daftar kode status error yang dapat dikembalikan oleh API NusaSMS:
| Kode Status | Pesan Error | Penjelasan / Solusi |
|---|---|---|
| 0 | ALL_RECIPIENTS_PROCESSED | Semua penerima telah berhasil diproses. Tidak ada tindakan yang diperlukan. |
| -1 | SEND_ERROR | Terjadi kesalahan umum saat pengiriman pesan. Periksa konfigurasi request dan coba kirim ulang. |
| -2 | NOT_ENOUGH_CREDITS | Kredit atau saldo tidak mencukupi untuk melakukan pengiriman. Lakukan isi ulang (top-up) kredit akun Anda. |
| -3 | NETWORK_NOTCOVERED | Jaringan/operator pada nomor tujuan tidak didukung atau di luar jangkauan. Pastikan nomor tujuan menggunakan operator yang didukung. |
| -5 | INVALID_USER_OR_PASS | Username atau password API tidak valid. Periksa kembali kredensial otentikasi API Anda. |
| -6 | MISSING_DESTINATION_ADDRESS | Parameter nomor/alamat tujuan tidak diisi atau hilang. Sertakan nomor tujuan pada payload request. |
| -7 | BALANCE_EXPIRED | Masa berlaku saldo/kredit telah habis (kedaluwarsa). Perpanjang atau top-up saldo akun Anda. |
| -9 | NO_ROUTE | Tidak ada rute pengiriman yang tersedia untuk nomor tujuan tersebut. Hubungi penyedia layanan/provider. |
| -10 | REJECTED | Pesan ditolak oleh sistem atau operator. Periksa isi pesan atau batasan aturan pengiriman. |
| -11 | INVALID_DESTINATION_ADDRESS | Format nomor tujuan tidak valid. Pastikan penulisan nomor sesuai standar (misal menggunakan kode negara seperti 628xxx). |
| -12 | MISSING_MESSAGE | Isi/teks pesan kosong. Masukkan konten pesan pada parameter yang sesuai. |
| -13 | INVALID_DESTINATION_ADDRESS | Nomor tujuan tidak terdaftar, tidak aktif, atau ditolak oleh jaringan penerima. Verifikasi kembali nomor penerima. |
| -22 | SYNTAX_ERROR | Kesalahan sintaksis/struktur pada request API. Periksa kembali format JSON, XML, atau query parameter. |
| -23 | ERROR_PROCESSING | Terjadi kesalahan internal pada server saat memproses request. Coba beberapa saat lagi. |
| -26 | COMMUNICATION_ERROR | Terjadi gangguan komunikasi antara aplikasi/server Anda dengan gateway. Periksa koneksi jaringan/endpoint. |
| -27 | INVALID_SENDDATETIME | Format tanggal/waktu penjadwalan pesan tidak sesuai. Gunakan format standar (misal: YYYY-MM-DD HH:mm:ss). |
| -28 | INVALID_DELIVERY_REPORT_PUSH_URL | URL Callback/Webhook untuk Delivery Report (DLR) tidak valid atau tidak dapat diakses oleh server. Periksa endpoint URL Anda. |
| -30 | INVALID_CLIENT_APPID | App ID klien tidak valid atau tidak ditemukan. Periksa kembali konfigurasi Client App ID pada aplikasi Anda. |
| -33 | DUPLICATE_MESSAGEID | ID pesan sudah pernah digunakan (duplikat). Gunakan Message ID yang unik untuk setiap pengiriman baru. |
| -34 | SENDER_NOT_ALLOWED | Sender ID (Nama Pengirim / Masking) tidak diizinkan atau belum terdaftar. Gunakan Sender ID yang sudah disetujui. |
| -40 | IP_ADDRESS_FORBIDDEN | Alamat IP server Anda diblokir atau belum terdaftar di whitelist. Masukkan IP server Anda ke daftar putih di dashboard/admin. |
| -77 | SPAM_PATTERN | Konten pesan terdeteksi mengandung kata/pola spam. Sesuaikan kalimat dalam pesan agar memenuhi aturan regulasi. |
| -78 | LIMIT_REACHED_FOR_DESTINATION_NUMBER | Pengiriman pesan ke nomor tujuan tersebut telah mencapai batas harian/maksimum. Coba kirim kembali setelah kuota reset. |
| -88 | REJECTED_ROUTE | Rute pengiriman menolak pesan (misal: di luar jam operasional pengiriman/jam malam). Kirim ulang pada waktu yang diizinkan. |
| -99 | GENERAL_ERROR | Kesalahan umum yang tidak teridentifikasi secara spesifik. Hubungi tim dukungan (support) jika masalah berlanjut. |