Mulai
Referensi API Bulk SMS
BulkSMSAPI adalah API SMS massal untuk pengembang: kirim satu teks atau batch hingga 10.000 nomor per permintaan ke 227 negara melalui REST, lacak setiap pesan dengan webhook yang ditandatangani, dan bayar per pesan dari saldo prabayar. Referensi ini mencakup setiap endpoint, bidang, acara, dan kesalahan yang dimiliki API. Setiap halaman juga tersedia sebagai Markdown: tambahkan .md ke alamatnya.
URL dasar dan format
Semua permintaan dikirim ke https://bulksmsapi.cc/v1 melalui HTTPS. Badan permintaan adalah JSON (Content-Type: application/json, UTF-8), dan setiap jawaban adalah JSON, termasuk kesalahan. Waktu dalam format ISO 8601 di UTC. Uang adalah string dalam dolar AS dengan lima desimal ("0.00507"), sehingga harga di bawah satu sen tepat.
Endpoint
| Metode dan jalur | Apa yang dilakukannya | Key |
|---|---|---|
| POST /v1/messages | Kirim satu teks ke satu nomor | Yes |
| POST /v1/batches | Kirim ke hingga 10.000 nomor, satu teks atau satu teks per nomor | Yes |
| GET /v1/messages/{id} | Satu pesan dengan status dan harganya | Yes |
| GET /v1/messages | Pesan, terbaru dulu, filter berdasarkan batch atau status | Yes |
| GET /v1/batches/{id} | Satu batch dengan jumlah per status | Yes |
| GET /v1/batches | Batch, terbaru dulu | Yes |
| POST /v1/batches/{id}/cancel | Batalkan batch terjadwal, pengembalian dana penuh | Yes |
| POST /v1/estimates | Hitung harga permintaan tanpa mengirimkannya | Yes |
| GET /v1/balance | Saldo dalam USD | Yes |
| GET /v1/pricing | Harga per segmen untuk setiap negara | No |
| GET /v1/pricing/{country} | Harga untuk satu negara (kode ISO) | No |
Permintaan pertama
Buat kunci API di konsol, ekspor, dan kirim pesan. Jawabannya adalah 202 dengan objek pesan: biaya diambil dari saldo dan pesan dimasukkan ke antrian.
curl https://bulksmsapi.cc/v1/messages \
-H "Authorization: Bearer $BULKSMSAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155550123",
"text": "Your Northwind code is 482913. It expires in 10 minutes.",
"reference": "login-7781"
}'// Node.js 18 or newer (built-in fetch)
const res = await fetch("https://bulksmsapi.cc/v1/messages", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BULKSMSAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
to: "+14155550123",
text: "Your Northwind code is 482913. It expires in 10 minutes.",
reference: "login-7781",
}),
});
const message = await res.json();
console.log(res.status, message.id, message.status, message.price);# Python 3, standard library only
import json, os, urllib.request
req = urllib.request.Request(
"https://bulksmsapi.cc/v1/messages",
data=json.dumps({
"to": "+14155550123",
"text": "Your Northwind code is 482913. It expires in 10 minutes.",
"reference": "login-7781",
}).encode(),
headers={
"Authorization": "Bearer " + os.environ["BULKSMSAPI_KEY"],
"Content-Type": "application/json",
"User-Agent": "northwind-app/1.0",
},
method="POST",
)
with urllib.request.urlopen(req) as res:
message = json.load(res)
print(res.status, message["id"], message["status"], message["price"])<?php
// PHP 7.4 or newer with the curl extension
$ch = curl_init("https://bulksmsapi.cc/v1/messages");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BULKSMSAPI_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"to" => "+14155550123",
"text" => "Your Northwind code is 482913. It expires in 10 minutes.",
"reference" => "login-7781",
]),
]);
$message = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $message["id"], " ", $message["status"], "\n";// Go 1.20 or newer, standard library only
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"to": "+14155550123",
"text": "Your Northwind code is 482913. It expires in 10 minutes.",
"reference": "login-7781",
})
req, _ := http.NewRequest("POST", "https://bulksmsapi.cc/v1/messages", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("BULKSMSAPI_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var message map[string]any
json.NewDecoder(res.Body).Decode(&message)
fmt.Println(res.StatusCode, message["id"], message["status"], message["price"])
}{
"id": "msg_8F3K2Q9TZ1MX",
"object": "message",
"batch_id": "bat_4M7Q1X0PK2RS",
"to": "+14155550123",
"country": "US",
"text": "Your Northwind code is 482913. It expires in 10 minutes.",
"segments": 1,
"price": "0.00507",
"currency": "USD",
"status": "queued",
"error": null,
"reference": "login-7781",
"created_at": "2026-11-07T09:30:12.418Z",
"sent_at": null,
"done_at": null
}Bagaimana pesan bergerak
Pesan yang diterima akan queued (atau scheduled jika permintaan memiliki send_at). Antrian menyerahkannya ke jaringan setiap dua detik, hingga 1.200 per menit per akun, dan mereka menjadi sent. Status akhir adalah delivered atau failed; pesan yang gagal akan dikembalikan ke saldo segera. Setiap status akhir memanggil webhook Anda dengan acara yang ditandatangani.
Batas sekilas
| Batas | Nilai |
|---|---|
| Penerima per permintaan API | 10,000 |
| Penerima per kampanye konsol | 50,000 |
| Permintaan per menit per kunci | 600 |
| Pesan yang diserahkan ke jaringan per menit per akun | 1,200 |
| Teks terpanjang | 10 segmen (1.530 karakter GSM-7 atau 670 karakter UCS-2) |
| Jadwal jendela | 2 menit hingga 45 hari ke depan |
| Percobaan webhook per acara | 10 |
| Memori Idempotency-Key | 24 jam |
| Kunci API per akun | 10 |
File yang dapat dibaca mesin
- OpenAPI 3.1 spec untuk generator kode dan klien API.
- llms-full.txt: seluruh referensi ini sebagai satu file teks biasa.
- Setiap halaman dokumen sebagai Markdown, contohnya /en/docs/webhooks.md.