Başlayın
Toplu SMS API referansı
BulkSMSAPI, geliştiriciler için bir toplu SMS API'sidir: REST üzerinden 227 ülkeye tek bir metin veya istek başına 10.000 numaraya kadar bir grup gönderin, her mesajı imzalı webhook'larla takip edin ve ön ödemeli bakiyeden mesaj başına ödeme yapın. Bu referans, API'nin sahip olduğu her endpoint, alan, olay ve hatayı kapsar. Her sayfa aynı zamanda Markdown olarak da mevcuttur: adresine .md ekleyin.
Temel URL ve format
Tüm istekler HTTPS üzerinden https://bulksmsapi.cc/v1 adresine gider. Gövdeler JSON'dur (Content-Type: application/json, UTF-8) ve her yanıt, hatalar dahil JSON'dur. Zamanlar UTC'de ISO 8601 formatındadır. Para, beş ondalık basamaklı ABD doları cinsinden bir string'dir ("0.00507"), böylece bir sentin altındaki fiyatlar kesindir.
Endpoint'ler
| Metod ve yol | Ne yapar | Key |
|---|---|---|
| POST /v1/messages | Bir numaraya bir metin gönder | Yes |
| POST /v1/batches | 10.000 numaraya kadar gönderim, tek metin veya numara başına bir tane | Yes |
| GET /v1/messages/{id} | Durumu ve fiyatıyla bir mesaj | Yes |
| GET /v1/messages | Mesajlar, en yeniden eskiye, parti veya duruma göre filtrele | Yes |
| GET /v1/batches/{id} | Durum başına sayılarla bir parti | Yes |
| GET /v1/batches | Partiler, en yeniden eskiye | Yes |
| POST /v1/batches/{id}/cancel | Planlanmış bir partiyi iptal et, tam geri ödeme | Yes |
| POST /v1/estimates | Göndermeden bir isteği fiyatlandır | Yes |
| GET /v1/balance | Bakiye (USD) | Yes |
| GET /v1/pricing | Her ülke için segment başına fiyat | No |
| GET /v1/pricing/{country} | Bir ülke için fiyat (ISO kodu) | No |
İlk istek
Konsolda bir API anahtarı oluşturun, dışa aktarın ve bir mesaj gönderin. Yanıt, mesaj nesnesiyle birlikte 202 olacaktır: maliyet bakiyeden alınır ve mesaj sıraya alınır.
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
}Bir mesajın yolculuğu
Kabul edilen mesajlar queued (veya scheduled eğer istekte send_at varsa) olur. Kuyruk, bunları her iki saniyede bir ağa aktarır, hesap başına dakikada 1.200'e kadar, ve sent olurlar. Son durum delivered veya failed olur; başarısız bir mesajın maliyeti hemen bakiyeye iade edilir. Her son durum, imzalı bir etkinlikle webhook'unuzu çağırır.
Sınırlara genel bakış
| Limit | Değer |
|---|---|
| API isteği başına alıcı sayısı | 10,000 |
| Konsol kampanyası başına alıcı sayısı | 50,000 |
| Anahtar başına dakikada istek sayısı | 600 |
| Hesap başına dakikada ağa aktarılan mesaj sayısı | 1,200 |
| En uzun metin | 10 segment (1.530 GSM-7 veya 670 UCS-2 karakter) |
| Planlama penceresi | 2 dakika ile 45 gün öncesi |
| Etkinlik başına webhook denemesi sayısı | 10 |
| Idempotency-Key belleği | 24 saat |
| Hesap başına API anahtarı sayısı | 10 |
Makine tarafından okunabilir dosyalar
- OpenAPI 3.1 spec kod üreticileri ve API istemcileri için.
- llms-full.txt: bu referansın tamamı bir düz metin dosyası olarak.
- Her belge sayfası Markdown olarak, örneğin /en/docs/webhooks.md.