পাঠানো
POST /v1/batches ব্যবহার করে বাল্ক এসএমএস পাঠান
/v1/batchesএকটি অনুরোধে 10,000 নম্বর পর্যন্ত পাঠান। সম্পূর্ণ খরচ একবারে ব্যালেন্স থেকে কেটে নেওয়া হয়।
অনুরোধ বডি
- toarray of stringsঐচ্ছিক
একটি শেয়ার্ড টেক্সটের জন্য নম্বর। text সহ to ব্যবহার করুন, অথবা messages।
- textstringঐচ্ছিক
শেয়ার্ড টেক্সট, to এর সাথে বাধ্যতামূলক।
- messagesarray of objectsঐচ্ছিক
প্রতিটি প্রাপকের জন্য একটি {to, text}, ব্যক্তিগত টেক্সটের জন্য।
- namestringঐচ্ছিক
কনসোলের জন্য একটি লেবেল, সর্বোচ্চ 100 অক্ষর।
- referencestringঐচ্ছিক
আপনার নিজস্ব আইডি, সর্বোচ্চ 100 অক্ষর, ব্যাচ এবং প্রতিটি বার্তায় ফেরত দেওয়া হয়।
- send_atstringঐচ্ছিক
ISO 8601 সময়, 2 মিনিট থেকে 45 দিন আগে।
curl https://bulksmsapi.cc/v1/batches \
-H "Authorization: Bearer $BULKSMSAPI_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: spring-sale-0412" \
-d '{
"name": "Spring sale",
"text": "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to": [
"+14155550123",
"+447400123456",
"+4915123456789"
]
}'const res = await fetch("https://bulksmsapi.cc/v1/batches", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BULKSMSAPI_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": "spring-sale-0412",
},
body: JSON.stringify({
name: "Spring sale",
text: "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
to: ["+14155550123", "+447400123456", "+4915123456789"],
}),
});
const batch = await res.json();
console.log(res.status, batch.id, batch.recipients, batch.cost);import json, os, urllib.request
req = urllib.request.Request(
"https://bulksmsapi.cc/v1/batches",
data=json.dumps({
"name": "Spring sale",
"text": "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to": ["+14155550123", "+447400123456", "+4915123456789"],
}).encode(),
headers={
"Authorization": "Bearer " + os.environ["BULKSMSAPI_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": "spring-sale-0412",
"User-Agent": "northwind-app/1.0",
},
method="POST",
)
with urllib.request.urlopen(req) as res:
batch = json.load(res)
print(res.status, batch["id"], batch["recipients"], batch["cost"])<?php
$ch = curl_init("https://bulksmsapi.cc/v1/batches");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BULKSMSAPI_KEY"),
"Content-Type: application/json",
"Idempotency-Key: spring-sale-0412",
],
CURLOPT_POSTFIELDS => json_encode([
"name" => "Spring sale",
"text" => "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to" => ["+14155550123", "+447400123456", "+4915123456789"],
]),
]);
$batch = json_decode(curl_exec($ch), true);
echo $batch["id"], " ", $batch["recipients"], " ", $batch["cost"], "\n";package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"name": "Spring sale",
"text": "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to": []string{"+14155550123", "+447400123456", "+4915123456789"},
})
req, _ := http.NewRequest("POST", "https://bulksmsapi.cc/v1/batches", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("BULKSMSAPI_KEY"))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Idempotency-Key", "spring-sale-0412")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var batch map[string]any
json.NewDecoder(res.Body).Decode(&batch)
fmt.Println(res.StatusCode, batch["id"], batch["recipients"], batch["cost"])
}{
"id": "bat_6TQ2W8M1ZK4N",
"object": "batch",
"name": "Spring sale",
"status": "queued",
"source": "api",
"encoding": "GSM-7",
"recipients": 3,
"max_segments": 1,
"cost": "0.02741",
"refunded": "0.00000",
"currency": "USD",
"counts": { "scheduled": 0, "queued": 3, "sent": 0, "delivered": 0, "failed": 0, "canceled": 0 },
"send_at": null,
"reference": null,
"created_at": "2026-11-07T09:31:40.102Z",
"completed_at": null,
"set_aside": []
}যেসব নম্বর সেট-অ্যাসাইড করা হয়েছে
প্রতিটি নম্বর আলাদাভাবে পরিষ্কার এবং মূল্যায়ন করা হয়। পাঠানো যায় না এমন নম্বরগুলি ব্যাচ থেকে বাদ দেওয়া হয়, চার্জ করা হয় না, এবং set_aside তে একটি কারণ সহ তালিকাভুক্ত করা হয়:
| reason | অর্থ |
|---|---|
| invalid_number | পরিষ্কারের পর + এবং 7 থেকে 15 ডিজিট হিসেবে পাঠযোগ্য নয়। |
| duplicate | অনুরোধে একই নম্বর আগে দেখা গেছে। |
| unsupported_country | নম্বরটি কোনো মূল্যায়িত দেশের নয়। |
| too_long | এর ব্যক্তিগত টেক্সটের 10টির বেশি সেগমেন্ট প্রয়োজন। |
| empty_text | এর ব্যক্তিগত টেক্সট খালি। |
| suppressed | নম্বরটি আপনার ডু-নট-সেন্ড তালিকায় আছে। |
যদি কোনো নম্বর অবশিষ্ট না থাকে, অনুরোধটি প্রথম কারণের কোড সহ ব্যর্থ হয় (যেমন invalid_number) এবং কিছু চার্জ করা হয় না।
প্রতিটি নম্বরে ব্যক্তিগত টেক্সট
প্রতিটি প্রাপককে তাদের নিজস্ব টেক্সট দিতে messages ব্যবহার করুন: নাম, সময়, পরিমাণ। প্রতিটি টেক্সট আলাদাভাবে গণনা এবং মূল্যায়ন করা হয়, তাই একটি ব্যাচে এক-সেগমেন্ট এবং দুই-সেগমেন্ট বার্তা মিশ্রিত হতে পারে।
curl https://bulksmsapi.cc/v1/batches \
-H "Authorization: Bearer $BULKSMSAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Appointment reminders, 14 May",
"send_at": "2026-05-13T16:00:00Z",
"messages": [
{ "to": "+14155550123", "text": "Hi Ana, your dental check-up is tomorrow at 09:30." },
{ "to": "+14155550178", "text": "Hi Sam, your dental check-up is tomorrow at 11:00." }
]
}'শিডিউলিং
send_at এর সাথে ব্যাচ এবং এর বার্তাগুলি scheduled অবস্থায় অপেক্ষা করে এবং সেই মিনিটে কিউতে চলে যায়। অনুরোধ গৃহীত হলে খরচ কেটে নেওয়া হয়, তাই একটি শিডিউল্ড ব্যাচের সর্বদা তার তহবিল থাকে। একটি শিডিউল্ড ব্যাচ শুরু হওয়ার আগে পর্যন্ত বাতিল করা যেতে পারে।
/v1/batches/{id}/cancelএকটি শিডিউল্ড ব্যাচ বাতিল করে: প্রতিটি বার্তা বাতিল হয়ে যায় এবং সম্পূর্ণ খরচ একটি রিফান্ড লাইন হিসেবে ব্যালেন্সে ফেরত আসে। একটি শুরু হয়ে যাওয়া ব্যাচ 409 not_cancelable উত্তর দেয়।
curl -X POST https://bulksmsapi.cc/v1/batches/bat_6TQ2W8M1ZK4N/cancel \
-H "Authorization: Bearer $BULKSMSAPI_KEY"ব্যাচগুলি পুনরুদ্ধার এবং তালিকাভুক্ত করুন
/v1/batches/{id}স্ট্যাটাস অনুযায়ী লাইভ কাউন্ট সহ ব্যাচ। অগ্রগতির জন্য এটি পোল করুন, অথবা ওয়েবহুক ব্যবহার করুন।
/v1/batchesঅ্যাকাউন্টের ব্যাচগুলি, নতুনতম প্রথম, লিমিট (1 থেকে 100) এবং starting_after (একটি bat_ id) সহ।
ব্যাচ ফিল্ডস
- idstring
bat_ এর পরে 12টি অক্ষর।
- statusstring
শিডিউল্ড, কিউড, সেন্ডিং, কমপ্লিটেড বা ক্যান্সেলড।
- sourcestring
api বা console।
- encodingstring
GSM-7, অথবা UCS-2 যখন কোনো টেক্সটে ইউনিকোড প্রয়োজন।
- recipientsinteger
ব্যাচে গৃহীত নম্বরগুলি।
- max_segmentsinteger
টেক্সটগুলির মধ্যে সবচেয়ে বড় সেগমেন্ট কাউন্ট।
- coststring
ব্যালেন্স থেকে নেওয়া মোট, USD।
- refundedstring
ব্যর্থ বা বাতিল করা মেসেজের জন্য এখন পর্যন্ত ফেরত দেওয়া মোট।
- countsobject
স্ট্যাটাস অনুযায়ী মেসেজ: শিডিউল্ড, কিউড, সেন্ট, ডেলিভার্ড, ফেইলড, ক্যান্সেলড।
- send_atstring or null
শিডিউল্ড সময়, যদি থাকে।
- completed_atstring or null
শেষ মেসেজটি যখন চূড়ান্ত স্ট্যাটাসে পৌঁছেছে।
বড় তালিকা
10,000 নম্বরের বেশি লিস্টকে একাধিক রিকোয়েস্টে ভাগ করুন, প্রতিটির নিজস্ব Idempotency-Key সহ (উদাহরণস্বরূপ লিস্ট id এবং পার্ট নম্বর)। মেসেজগুলি নেটওয়ার্কে প্রতি মিনিটে প্রতি অ্যাকাউন্টে সর্বোচ্চ 1,200 টি ক্রমানুসারে হস্তান্তর করা হয়, তাই একটি 50,000 নম্বরের ক্যাম্পেইন এক ঘন্টার মধ্যে শুরু হয়ে যায়। কনসোল একটি পেস্ট বা CSV ফাইল থেকে প্রতি ক্যাম্পেইনে 50,000 নম্বর নেয়।