ডেভেলপার

Bulk SMS API ডকুমেন্টেশন

SendBulkSMS REST API প্রতি অনুরোধে 10,000 টি নম্বরে SMS পাঠায়, অবিলম্বে একটি প্রচারাভিযান ID প্রদান করে এবং প্রতিটি বার্তা আপনার ওয়েবহুকে রিপোর্ট করে। এটি HTTPS এর উপর JSON ব্যবহার করে, একটি Bearer API কী ব্যবহার করে এবং কনসোলের মতো প্রতি বার্তার জন্য একই হার চার্জ করে।

https://sendbulksms.cc/api/v1

দ্রুত শুরু

  1. কনসোলে একটি অ্যাকাউন্ট তৈরি করুন এবং আপনার ব্যালেন্স টপ আপ করুন।
  2. API কী খুলুন এবং একটি কী তৈরি করুন। প্রথম টপ-আপ ক্রেডিট হওয়ার পর কী তৈরি করা যাবে। কীটি একবার দেখানো হয়; এটি একটি সিক্রেট হিসেবে সংরক্ষণ করুন।
  3. সংখ্যা এবং টেক্সট সহ /sms-এ একটি POST রিকোয়েস্ট পাঠান। ফেরত দেওয়া ক্যাম্পেইন আইডি পড়ুন, তারপর কনসোলে বা ওয়েবহুকের মাধ্যমে ডেলিভারি অনুসরণ করুন।

প্রমাণীকরণ

পাবলিক রেট লিস্ট ছাড়া প্রতিটি রিকোয়েস্ট আপনার কীকে অথরাইজেশন হেডারে বহন করে। কীগুলি sbk_live_ দিয়ে শুরু হয়। একটি নতুন কী অবিলম্বে পুরানো কী প্রতিস্থাপন করে।

Authorization: Bearer sbk_live_YOUR_KEY

এসএমএস পাঠান

POST/sms

একটি ক্যাম্পেইন তৈরি করে, এটি ব্যালেন্স থেকে চার্জ করে এবং প্রতিটি বার্তা কুয়েতে রাখে। সংখ্যাগুলি পরিষ্কার এবং ডুপ্লিকেট মুক্ত করা হয়; যেগুলি ব্যবহার করা যাবে না সেগুলি dropped-এ একটি কারণ সহ ফেরত দেওয়া হয় এবং চার্জ করা হয় না।

ফিল্ডবিবরণ
toপ্রয়োজনীয়একটি সংখ্যা বা 10,000 সংখ্যা পর্যন্ত একটি অ্যারে আন্তর্জাতিক ফরম্যাটে, উদাহরণস্বরূপ "+447700900461"
textপ্রয়োজনীয়বার্তা টেক্সট, 10 সেগমেন্ট পর্যন্ত। GSM-7 টেক্সট প্রতি সেগমেন্টে 160 ক্যারেক্টার ফিট করে, UCS-2 70 ফিট করে
schedule_atঐচ্ছিকISO 8601 সময় 5 মিনিট থেকে 60 দিন আগে। এখন পাঠাতে বাদ দিন
client_refঐচ্ছিকআপনার নিজের রেফারেন্স, a-z A-Z 0-9 _ . :, পর্যন্ত 64, রিপোর্ট এবং ওয়েবহুকগুলিতে ফেরত দেওয়া হয়
opt_outঐচ্ছিকtrue আপনার অ্যাকাউন্ট সেটিংসে সেট করা অপ্ট-আউট লাইন সংযুক্ত করে
curl -X POST https://sendbulksms.cc/api/v1/sms \
  -H "Authorization: Bearer sbk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["+447700900461", "+5511955550123"],
    "text": "Hi, your order 4821 ships today.",
    "client_ref": "orders-4821"
  }'

প্রতিক্রিয়া: ক্যাম্পেইন তার খরচ এবং প্রথম 1,000 বার্তা সহ। ক্যাম্পেইন বার্তা দিয়ে আরও আনুন।

HTTP/1.1 201 Created
{
  "id": "CP-7KQ2-M9XA-4HTD",
  "status": "sending",
  "source": "api",
  "recipients": 2,
  "segments": 1,
  "encoding": "GSM-7",
  "cost": "0.01078",
  "refunded": "0.00000",
  "client_ref": "orders-4821",
  "scheduled_at": null,
  "created_at": "2026-11-07T10:32:04.118Z",
  "done_at": null,
  "counts": { "queued": 2, "sent": 0, "delivered": 0, "failed": 0, "canceled": 0 },
  "dropped": [],
  "balance": "248.30422",
  "messages": [
    { "id": "SM-2RBW-8MZN-QF6K", "campaign_id": "CP-7KQ2-M9XA-4HTD", "to": "+447700900461", "country": "GB", "parts": 1, "price": "0.00819", "status": "queued", "error": null, "created_at": "2026-11-07T10:32:04.118Z", "sent_at": null, "done_at": null }
  ]
}

একটি পাঠান অনুমান করুন

POST/estimate

/sms-এর মতো একই বডি নেয় এবং প্রাপক, সেগমেন্ট, এনকোডিং, মোট খরচ এবং দেশ প্রতি খরচ ফেরত দেয় কোন চার্জ বা পাঠানো ছাড়াই।

{ "recipients": 2, "dropped": [], "segments": 1, "encoding": "GSM-7", "cost": "0.01078", "balance": "248.31500",
  "countries": [ { "country": "GB", "recipients": 1, "cost": "0.00819" }, { "country": "BR", "recipients": 1, "cost": "0.00259" } ] }

বার্তা অবস্থা

GET/sms/{message_id}

একটি বার্তা ফেরত দেয়: সংখ্যা, দেশ, সেগমেন্ট, মূল্য, অবস্থা, ব্যর্থ বার্তার জন্য ত্রুটি এবং প্রতিটি ধাপের সময়।

ক্যাম্পেইন

GET/campaigns/{campaign_id}

ক্যাম্পেইন তার খরচ, রিফান্ড এবং প্রতি অবস্থায় বার্তার সংখ্যা সহ।

GET/campaigns/{campaign_id}/messages?offset=0&limit=100

বার্তাগুলি যে ক্রমে কুয়েতে রাখা হয়েছিল, প্রতি পৃষ্ঠায় 1,000 পর্যন্ত।

POST/campaigns/{campaign_id}/cancel

একটি নির্ধারিত ক্যাম্পেইন বাতিল করে যা শুরু হয়নি এবং তার সম্পূর্ণ খরচ ব্যালেন্সে ফেরত দেয়।

ব্যালেন্স এবং রেট

GET/balance

{ "balance": "248.31500", "currency": "USD" }

GET/rates

পাবলিক, কোন কী প্রয়োজন নেই। প্রতিটি দেশ তার কলিং কোড এবং প্রতি সেগমেন্ট মূল্য সহ। /rates/GB একটি দেশ ফেরত দেয়।

{ "updated": "2026-11-07", "rates": [ { "country": "GB", "name": "United Kingdom", "calling_code": "+44", "price": "0.00819", "currency": "USD", "unit": "SMS segment" } ] }

ডেলিভারি ওয়েবহুক

API কী-এর অধীনে কনসোলে একটি ওয়েবহুক URL সেট করুন। যখন একটি বার্তা একটি চূড়ান্ত অবস্থায় পৌঁছায় (ডেলিভার্ড বা ব্যর্থ) আমরা একটি রিপোর্ট এটিতে POST করি। 8 সেকেন্ডের মধ্যে যেকোনো 2xx স্ট্যাটাস দিয়ে উত্তর দিন; অন্যথায় কলটি প্রায় 11 ঘন্টার মধ্যে 8 বার পর্যন্ত পুনরায় চেষ্টা করা হয়। id ব্যবহার করে একটি রিপোর্ট উপেক্ষা করুন যা আপনি ইতিমধ্যে প্রসেস করেছেন।

POST https://your-server.example/sms-status
Content-Type: application/json
X-SendBulkSMS-Signature: t=1794047524,v1=5f0c3b9e...

{
  "event": "message.status",
  "id": "evt_8c1d2e4f6a7b9c0d1e2f",
  "created_at": "2026-11-07T10:32:09.004Z",
  "data": {
    "message_id": "SM-2RBW-8MZN-QF6K",
    "campaign_id": "CP-7KQ2-M9XA-4HTD",
    "to": "+447700900461",
    "country": "GB",
    "status": "delivered",
    "error": null,
    "parts": 1,
    "price": "0.00819",
    "client_ref": "orders-4821",
    "done_at": "2026-11-07T10:32:08.912Z"
  }
}

একটি রিপোর্ট বিশ্বাস করার আগে স্বাক্ষর পরীক্ষা করুন: t + "." + raw body এর HMAC-SHA256 আপনার ওয়েবহুক সিক্রেট দিয়ে, ধ্রুব সময়ে তুলনা করুন, এবং 5 মিনিটের পুরানো সময় প্রত্যাখ্যান করুন।

import { createHmac, timingSafeEqual } from "node:crypto";

// raw = the request body exactly as received (string), header = X-SendBulkSMS-Signature
export function verify(raw, header, secret) {
  const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header || "");
  if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
  const want = Buffer.from(createHmac("sha256", secret).update(m[1] + "." + raw).digest("hex"));
  const got = Buffer.from(m[2]);
  return want.length === got.length && timingSafeEqual(want, got);
}

স্ট্যাটাস

স্ট্যাটাসঅর্থ
queuedগ্রহণ করা হয়েছে এবং চার্জ করা হয়েছে, সারিতে অপেক্ষা করছে
sentরুটে হস্তান্তর করা হয়েছে, ডেলিভারি রিপোর্টের অপেক্ষায়
deliveredনেটওয়ার্ক হ্যান্ডসেটে ডেলিভারি নিশ্চিত করেছে
failedডেলিভারি হয়নি; মূল্য ফেরত দেওয়া হয়েছে এবং ত্রুটিতে কারণ উল্লেখ করা হয়েছে
canceledশুরু হওয়ার আগে একটি নির্ধারিত প্রচারণার অংশ বাতিল করা হয়েছে; ফেরত দেওয়া হয়েছে

ত্রুটি

ত্রুটিগুলি HTTP স্ট্যাটাস কোড এবং একটি JSON বডি ব্যবহার করে: { "error": { "code": "insufficient_balance", "message": "..." } }। একটি অনুরোধ যা ত্রুটি ফেরত দেয় তা ব্যালেন্সে চার্জ করে না।

HTTPকোড
400bad_requestএকটি ফিল্ড অনুপস্থিত বা বৈধ নয়; বার্তাটি ব্যাখ্যা করে কোনটি
400no_valid_numbers"to"-তে দেওয়া কোনো নম্বর ব্যবহারযোগ্য ছিল না
401unauthorizedAPI কী অনুপস্থিত বা বৈধ নয়
402insufficient_balanceব্যালেন্সে পাঠানোর জন্য যথেষ্ট টাকা নেই; কোনো চার্জ করা হয়নি
404not_foundপ্রচারণা, বার্তা বা এন্ডপয়েন্ট আপনার অ্যাকাউন্টে নেই
409not_scheduledশুধুমাত্র একটি নির্ধারিত প্রচারণা যা শুরু হয়নি তা বাতিল করা যাবে
413too_many_recipientsএকটি অনুরোধে 10,000 টির বেশি নম্বর
429rate_limitedএই কী-এর জন্য এক মিনিটে 300 টির বেশি অনুরোধ
500server_errorআবার চেষ্টা করুন; একটি ব্যর্থ অনুরোধের জন্য কোনো চার্জ করা হয় না

সীমা

  • প্রতি API কী-এর জন্য এক মিনিটে 300 টি অনুরোধ।
  • প্রতি পাঠানোর অনুরোধে 10,000 টি নম্বর; প্রতি বার্তায় 10 টি সেগমেন্ট।
  • বার্তাগুলি প্রতি সারিতে এক মিনিটে 200 টি পর্যন্ত পাঠানো হয়, যেই ক্রমে সেগুলি গ্রহণ করা হয়েছিল।
  • 5 মিনিট থেকে 60 দিন আগে পর্যন্ত শিডিউলিং করা যায়।
  • আপনার না-পাঠানোর তালিকায় থাকা নম্বরগুলি বাদ দেওয়া হয় এবং dropped-এ suppressed কোড সহ ফেরত দেওয়া হয়; সেগুলির জন্য চার্জ করা হয় না।
বাল্ক এসএমএস API ডকুমেন্টেশন: REST API দিয়ে এসএমএস পাঠান | SendBulkSMS