NusaSMS API Reference v3.0

Dokumentasi resmi integrasi API pengiriman SMS (Plain & OTP), Cek Kredit, dan Delivery Report untuk pengembang aplikasi.

1. Pengiriman Pesan (Send SMS Plain / OTP)

Endpoint ini digunakan untuk mengirimkan pesan SMS regular maupun OTP ke nomor tujuan single secara langsung.

GET https://api.nusasms.com/api/v3/sendsms/plain

Parameter Request

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.
Catatan Panjang Pesan:
• Standard GSM 7-bit: Maksimal 160 karakter untuk 1 SMS (153 karakter/SMS jika multi-part).
• Unicode (Arab, Mandarin, Emoji, dll): Maksimal 70 karakter untuk 1 SMS (67 karakter/SMS jika multi-part).

2. Contoh Kode Integration (Multi-Language)

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);
    }
}

3. Format Response API

API NusaSMS akan mengembalikan respon dalam format JSON atau XML sesuai dengan parameter output yang Anda masukkan.

Respon Sukses (JSON)

{
  "status": "0",
  "message": "Success",
  "messageid": "053380444905641291",
  "destination": "6285100803380"
}

Respon Gagal (JSON)

{
  "status": "-1",
  "message": "Invalid Password",
  "messageid": "",
  "destination": "6285100803380"
}

4. Cek Saldo Kredit (Command)

Untuk mengecek sisa saldo/kredit SMS pada akun Anda secara terprogram:

GET https://api.nusasms.com/api/command?user=YOUR_USER&password=YOUR_PASSWORD&cmd=CREDITS&type=sms&output=json

Contoh Respon Saldo:

{
  "status": "0",
  "credit": 15450,
  "type": "sms"
}

5. Cek Status Pesan / Delivery Report (DR)

Anda dapat mengecek status pengiriman pesan berdasarkan messageid yang didapat saat mengirim SMS:

GET https://api.nusasms.com/api/command?user=YOUR_USER&password=YOUR_PASSWORD&cmd=DR&messageid=053380444905641291&output=json

Status Pengiriman (DR Values):

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.

6. Referensi Kode Error API

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.