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

একটি HTTP রিকোয়েস্টেই আপনার ওয়েবসাইট, অ্যাপ বা সফটওয়্যার থেকে SMS পাঠান। মাস্কিং ও নন-মাস্কিং, ইংরেজি ও বাংলা, একক বা বাল্ক — সাথে ডেলিভারি স্ট্যাটাস ও ব্যালেন্স চেক।

বেস URL
https://app.buysms.bd/api/v1
অথেনটিকেশন
X-API-KEY হেডার (অথবা api_key প্যারামিটার)
ফরম্যাট
JSON পাঠান, JSON পান (UTF-8)
নম্বর
01XXXXXXXXX, 8801XXXXXXXXX বা +8801XXXXXXXXX
সময় অঞ্চল
Asia/Dhaka (UTC+6)
মুদ্রা
BDT (৳)

দ্রুত শুরু

১. অ্যাকাউন্ট খুলে https://app.buysms.bd প্যানেলে লগইন করুন।

২. Developer API পেজ থেকে আপনার API কী কপি করুন। কী গোপন রাখুন: কী যার কাছে থাকবে সে আপনার ব্যালেন্স থেকে SMS পাঠাতে পারবে।

৩. প্রথম SMS পাঠান:

cURL
curl -X POST "https://app.buysms.bd/api/v1/sms/send" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"01711000000,01811000000","message":"Your OTP is 4821"}'
রেসপন্স
{
  "success": true,
  "batch_id": "5f0c2a1e-7b1d-4c55-9a7e-2d1f0c9b8a10",
  "queued": 2,
  "parts": 2,
  "cost": 0.70,
  "balance": 199.30,
  "invalid_numbers": [],
  "messages": [
    { "id": "b1e2c3d4-0000-4000-8000-000000000001", "to": "8801711000000" },
    { "id": "c9d0e1f2-0000-4000-8000-000000000002", "to": "8801811000000" }
  ]
}

অথেনটিকেশন

প্রতিটি রিকোয়েস্টে আপনার API কী লাগবে। X-API-KEY হেডারে পাঠান (প্রস্তাবিত), অথবা কুয়েরি স্ট্রিং, ফর্ম ফিল্ড বা JSON বডিতে api_key প্যারামিটার হিসেবে।

ভুল বা অনুপস্থিত কী, অথবা নিষ্ক্রিয় অ্যাকাউন্ট হলে HTTP 401 ও কোড invalid_api_key আসবে। প্যানেল থেকে যেকোনো সময় নতুন কী তৈরি করা যায়; পুরনো কী সাথে সাথে বন্ধ হয়ে যায়।

Header
X-API-KEY: YOUR_API_KEY

SMS পাঠানো

POST/api/v1/sms/send
GET/api/v1/sms/send?api_key=…&to=…&message=…

একই মেসেজ এক বা একাধিক নম্বরে পাঠান। বডি হতে পারে JSON, ফর্ম ফিল্ড (application/x-www-form-urlencoded), অথবা সহজ ইন্টিগ্রেশনের জন্য GET কুয়েরি স্ট্রিং।

প্যারামিটারআবশ্যকবিবরণ
to✔মোবাইল নম্বর। একাধিক নম্বর কমা দিয়ে আলাদা করুন (সেমিকোলন, স্পেস বা নতুন লাইনও চলবে)। প্রতি রিকোয়েস্টে সর্বোচ্চ ৫০,০০০।
message✔ইংরেজি বা বাংলায় SMS টেক্সট, সর্বোচ্চ ১,০০০ অক্ষর।
sender_id—আপনার অ্যাকাউন্টে দেওয়া মাস্কিং সেন্ডার আইডি (ব্র্যান্ড নাম)। নন-মাস্কিং হলে খালি রাখুন বা বাদ দিন।
api_key—X-API-KEY হেডার না পাঠালে আপনার API কী।
cURL (JSON)
curl -X POST "https://app.buysms.bd/api/v1/sms/send" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"01711000000,01811000000","message":"Your OTP is 4821"}'
রেসপন্স
{
  "success": true,
  "batch_id": "5f0c2a1e-7b1d-4c55-9a7e-2d1f0c9b8a10",
  "queued": 2,
  "parts": 2,
  "cost": 0.70,
  "balance": 199.30,
  "invalid_numbers": [],
  "messages": [
    { "id": "b1e2c3d4-0000-4000-8000-000000000001", "to": "8801711000000" },
    { "id": "c9d0e1f2-0000-4000-8000-000000000002", "to": "8801811000000" }
  ]
}
  • রিকোয়েস্টের খরচ সাথে সাথে কাটা হয় এবং প্রতিটি SMS ডেলিভারি কিউতে যায়।
  • ভুল নম্বর বাদ দিয়ে invalid_numbers-এ দেখানো হয়; বাকিগুলো পাঠানো হয়।
  • পরে ডেলিভারি স্ট্যাটাস দেখতে প্রতিটি messages[].id সংরক্ষণ করুন।

বাল্ক SMS (প্রতি নম্বরে আলাদা মেসেজ)

POST/api/v1/sms/bulk

একটি রিকোয়েস্টেই অনেক নম্বরে ব্যক্তিগত মেসেজ — বিল, OTP, নাম — পাঠান (সর্বোচ্চ ৫০,০০০টি)। পুরো রিকোয়েস্টের খরচ একবারে কাটা হয়। শুধু JSON বডি।

প্যারামিটারআবশ্যকবিবরণ
messages✔{ "to": "01XXXXXXXXX", "message": "টেক্সট" } অবজেক্টের অ্যারে।
sender_id—রিকোয়েস্টের সব মেসেজের মাস্কিং সেন্ডার আইডি। খালি = নন-মাস্কিং।
api_key—X-API-KEY হেডার না পাঠালে আপনার API কী।
cURL
curl -X POST "https://app.buysms.bd/api/v1/sms/bulk" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sender_id": "",
    "messages": [
      { "to": "01711000000", "message": "Dear Rahim, your bill is 1,200 Tk." },
      { "to": "01811000000", "message": "প্রিয় করিম, আপনার বিল ৮৫০ টাকা।" }
    ]
  }'
রেসপন্স
{
  "success": true,
  "batch_id": "5f0c2a1e-7b1d-4c55-9a7e-2d1f0c9b8a10",
  "queued": 2,
  "parts": 2,
  "cost": 0.70,
  "balance": 199.30,
  "invalid_numbers": [],
  "messages": [
    { "id": "b1e2c3d4-0000-4000-8000-000000000001", "to": "8801711000000" },
    { "id": "c9d0e1f2-0000-4000-8000-000000000002", "to": "8801811000000" }
  ]
}

ডেলিভারি স্ট্যাটাস

GET/api/v1/sms/status/{id}

পাঠানোর সময় পাওয়া id দিয়ে একটি মেসেজের অবস্থা দেখুন।

cURL
curl "https://app.buysms.bd/api/v1/sms/status/b1e2c3d4-0000-4000-8000-000000000001" \
  -H "X-API-KEY: YOUR_API_KEY"
রেসপন্স
{
  "success": true,
  "id": "b1e2c3d4-0000-4000-8000-000000000001",
  "to": "8801711000000",
  "status": "sent",
  "parts": 1,
  "cost": 0.35,
  "error": null,
  "queued_at": "28 Sep 2026, 03:15 PM",
  "finished_at": "28 Sep 2026, 03:15 PM"
}
  • status হবে: queued (অপেক্ষায়), sending (পাঠানো হচ্ছে), sent (অপারেটর গ্রহণ করেছে), failed (ব্যর্থ)।
  • ব্যর্থ SMS-এর টাকা স্বয়ংক্রিয়ভাবে ব্যালেন্সে ফেরত আসে; কারণ error-এ লেখা থাকে।
  • সময় বাংলাদেশ সময়ে। মেসেজ লগ ৩ মাস রাখা হয়; পুরনো id-তে 404 not_found আসে।

ব্যালেন্স

GET/api/v1/balance

আপনার বর্তমান ব্যালেন্স, প্রতি SMS-এর রেট এবং ব্যবহারযোগ্য মাস্কিং সেন্ডার আইডি।

cURL
curl "https://app.buysms.bd/api/v1/balance" -H "X-API-KEY: YOUR_API_KEY"
রেসপন্স
{
  "success": true,
  "balance": 199.30,
  "currency": "BDT",
  "rate_non_masking": 0.35,
  "rate_masking": 0.60,
  "masking_sender_ids": ["YourBrand"]
}

এরর

এররে success: false, মেশিন-রিডেবল code এবং পড়ার উপযোগী error আসে। রিকোয়েস্ট ব্যর্থ হলে কোনো টাকা কাটা হয় না।

রেসপন্স
{
  "success": false,
  "code": "insufficient_balance",
  "error": "Insufficient balance. Needed ৳12.50, available ৳3.00.",
  "invalid_numbers": null
}
HTTPcodeঅর্থ
401invalid_api_keyকী নেই বা ভুল, অথবা অ্যাকাউন্ট নিষ্ক্রিয়।
402insufficient_balanceপুরো রিকোয়েস্টের জন্য যথেষ্ট ব্যালেন্স নেই। কিছুই কিউতে যায়নি।
400missing_to / missing_message / missing_messagesআবশ্যক প্যারামিটার খালি।
400invalid_jsonরিকোয়েস্ট বডি সঠিক JSON নয়।
400rejectedকোনো সঠিক নম্বর নেই, মেসেজ খুব বড়, মাস্কিং আইডি আপনাকে দেওয়া হয়নি, অতিরিক্ত প্রাপক ইত্যাদি। error দেখুন।
404not_foundঅজানা মেসেজ id, অথবা তার লগ মুছে ফেলা হয়েছে।

SMS দৈর্ঘ্য, মাস্কিং ও ভালো অভ্যাস

  • ইংরেজি (GSM) টেক্সট: এক SMS-এ ১৬০ অক্ষর; বড় হলে প্রতি অংশে ১৫৩।
  • বাংলা বা অন্য ইউনিকোড টেক্সট: এক SMS-এ ৭০ অক্ষর; বড় হলে প্রতি অংশে ৬৭।
  • খরচ অংশ হিসেবে: খরচ = অংশ × আপনার রেট।
  • নম্বর বাংলাদেশি মোবাইল (০১৩–০১৯)। 01XXXXXXXXX, 8801XXXXXXXXX ও +8801XXXXXXXXX সবই চলে; সংরক্ষিত হয় 8801XXXXXXXXX হিসেবে।
  • মাস্কিং = সেন্ডার হিসেবে আপনার ব্র্যান্ড নাম (sender_id)। নন-মাস্কিং = সেন্ডার হিসেবে একটি নম্বর (sender_id খালি)। মাস্কিং নাম প্যানেলে অনুমোদন ও বরাদ্দ করা হয়।
  • API কী আপনার সার্ভারে রাখুন। মোবাইল অ্যাপ, ওয়েব পেজ বা পাবলিক রিপোজিটরিতে কখনো রাখবেন না।
  • শুধু নেটওয়ার্ক এরর বা HTTP 5xx হলে আবার চেষ্টা করুন; 4xx একই ইনপুটে আবার ব্যর্থ হবে।

মেশিন-রিডেবল সংস্করণ

AI অ্যাসিস্ট্যান্ট, বট ও কোড জেনারেটরের জন্য: