Magsimula
Sanggunian ng Bulk SMS API
Ang BulkSMSAPI ay isang bulk SMS API para sa mga developer: magpadala ng isang teksto o batch ng hanggang 10,000 numero bawat request sa 227 bansa gamit ang REST, subaybayan ang bawat mensahe gamit ang signed webhooks, at magbayad bawat mensahe mula sa prepaid balance. Saklaw ng sangguniang ito ang bawat endpoint, field, event at error ng API. Available din ang bawat pahina bilang Markdown: idagdag ang .md sa address nito.
Base URL at format
Lahat ng request ay pupunta sa https://bulksmsapi.cc/v1 gamit ang HTTPS. Ang mga body ay JSON (Content-Type: application/json, UTF-8), at ang bawat sagot ay JSON, kasama ang mga error. Ang mga oras ay ISO 8601 sa UTC. Ang pera ay string sa US dollars na may limang decimal ("0.00507"), kaya eksakto ang mga presyong mas mababa sa isang sentimo.
Mga endpoint
| Method at path | Kung ano ang ginagawa nito | Key |
|---|---|---|
| POST /v1/messages | Magpadala ng isang teksto sa isang numero | Yes |
| POST /v1/batches | Magpadala sa hanggang 10,000 numero, isang teksto o isa bawat numero | Yes |
| GET /v1/messages/{id} | Isang mensahe kasama ang status at presyo nito | Yes |
| GET /v1/messages | Mga mensahe, pinakabago muna, i-filter ayon sa batch o status | Yes |
| GET /v1/batches/{id} | Isang batch na may bilang bawat status | Yes |
| GET /v1/batches | Mga batch, pinakabago muna | Yes |
| POST /v1/batches/{id}/cancel | Kanselahin ang naka-schedule na batch, buong refund | Yes |
| POST /v1/estimates | Presyuhan ang request nang hindi ipapadala | Yes |
| GET /v1/balance | Balance sa USD | Yes |
| GET /v1/pricing | Presyo bawat segment para sa bawat bansa | No |
| GET /v1/pricing/{country} | Presyo para sa isang bansa (ISO code) | No |
Unang request
Gumawa ng API key sa console, i-export ito, at magpadala ng mensahe. Ang sagot ay 202 kasama ang message object: ang gastos ay kukunin mula sa balance at ang mensahe ay ma-queue.
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
}Paano gumagalaw ang mensahe
Ang tinanggap na mensahe ay queued (o scheduled kapag ang request ay may send_at). Ang queue ay ipapasa ito sa network tuwing dalawang segundo, hanggang 1,200 bawat minuto bawat account, at magiging sent. Ang huling status ay delivered o failed; ang failed na mensahe ay irerefund sa balance agad. Bawat huling status ay tatawag sa iyong webhook na may signed event.
Mga limitasyon sa isang sulyap
| Limit | Halaga |
|---|---|
| Mga tatanggap bawat API request | 10,000 |
| Mga tatanggap bawat console campaign | 50,000 |
| Mga request bawat minuto bawat key | 600 |
| Mga mensaheng ipinasa sa network bawat minuto bawat account | 1,200 |
| Pinakamahabang text | 10 segments (1,530 GSM-7 o 670 UCS-2 characters) |
| Window ng schedule | 2 minuto hanggang 45 araw nang maaga |
| Mga pagsubok sa webhook bawat event | 10 |
| Memory ng Idempotency-Key | 24 oras |
| Mga API key bawat account | 10 |
Mga file na mababasa ng makina
- OpenAPI 3.1 spec para sa mga code generator at API client.
- llms-full.txt: ang buong reference bilang isang plain text file.
- Bawat docs page bilang Markdown, halimbawa /en/docs/webhooks.md.