ISPBills একটি ব্যাপক REST API প্রদান করে যা মোবাইল অ্যাপ্লিকেশন চালিত করে এবং বাহ্যিক সিস্টেম, কাস্টম ড্যাশবোর্ড এবং অটোমেশন ওয়ার্কফ্লোর সাথে ইন্টিগ্রেশন সক্ষম করে। এই গাইডে ক্রেডেনশিয়াল ব্যবস্থাপনা, প্রমাণীকরণ, API v1 ও v2 উভয়ের সম্পূর্ণ এন্ডপয়েন্ট রেফারেন্স এবং ওয়েবহুক কনফিগারেশন কভার করা হয়েছে।

API and Webhooks

API v2 সকল নতুন ইন্টিগ্রেশনের জন্য পছন্দের API। এটি একটি সুসংগত রিসোর্স-ভিত্তিক ডিজাইন, সূক্ষ্ম রেট লিমিটিং এবং বর্ধিত কার্যকারিতা অফার করে। API v1 পশ্চাদগামী সামঞ্জস্যতার জন্য উপলব্ধ থাকবে তবে নতুন এন্ডপয়েন্ট পাবে না।


API ক্লায়েন্ট

একটি API ক্লায়েন্ট তৈরি করা

  1. সাইডবারে Integrations → API Management-এ যান।
  2. Create API Client ক্লিক করুন।
  3. ক্লায়েন্টের জন্য একটি বর্ণনামূলক নাম লিখুন (যেমন, "Mobile App", "Custom Dashboard", "Billing CRM")।
  4. v1 ক্লায়েন্টের জন্য, একটি API token এবং refresh token পেয়ার পেতে Generate Token ক্লিক করুন।
  5. v2 ক্লায়েন্টের জন্য, একটি Client ID এবং Client Secret স্বয়ংক্রিয়ভাবে তৈরি হয়।
  6. সকল ক্রেডেনশিয়াল অবিলম্বে কপি এবং সংরক্ষণ করুন — গোপনীয় মানগুলো শুধুমাত্র একবার প্রদর্শিত হয়।

API ক্লায়েন্ট পরিচালনা

API Management পৃষ্ঠা থেকে আপনি:

  • সকল সক্রিয় API ক্লায়েন্ট, তাদের ধরন (v1 বা v2) এবং তৈরির তারিখ দেখতে পারেন।
  • ক্রেডেনশিয়াল আপোষিত হলে টোকেন এবং সিক্রেট পুনঃতৈরি বা রোটেট করতে পারেন।
  • একটি API ক্লায়েন্ট মুছে অ্যাক্সেস প্রত্যাহার করতে পারেন।
  • পুরনো ইন্টিগ্রেশন শনাক্ত করতে সর্বশেষ ব্যবহৃত টাইমস্ট্যাম্প পর্যবেক্ষণ করতে পারেন।

নিরাপত্তা: API টোকেন এবং ক্লায়েন্ট সিক্রেটকে পাসওয়ার্ডের মতো বিবেচনা করুন। এগুলোকে কখনো ভার্সন কন্ট্রোলে কমিট করবেন না, ক্লায়েন্ট-সাইড কোডে এমবেড করবেন না বা এনক্রিপ্ট না করা চ্যানেলে প্রেরণ করবেন না।


প্রমাণীকরণ

ISPBills দুটি প্রমাণীকরণ ফ্লো সমর্থন করে — প্রতিটি API সংস্করণের জন্য একটি।

API v1 — Bearer Token

লগইন এন্ডপয়েন্টে ক্রেডেনশিয়াল পোস্ট করে একটি টোকেন পান, তারপর প্রতিটি অনুরোধে এটি অন্তর্ভুক্ত করুন:

POST /api/auth/login
Content-Type: application/json
Accept: application/json

{
  "email": "admin@example.com",
  "password": "your_password"
}

রেসপন্স:

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6...",
  "token_type": "bearer",
  "expires_in": 3600,
  "refresh_token": "def50200abc123..."
}

পরবর্তী অনুরোধে টোকেনটি অন্তর্ভুক্ত করুন:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...

টোকেন রিফ্রেশ

অ্যাক্সেস টোকেনের মেয়াদ শেষ হওয়ার আগে, নতুন পেয়ারের জন্য রিফ্রেশ টোকেন এক্সচেঞ্জ করুন:

POST /api/auth/refresh
Content-Type: application/json
Accept: application/json

{
  "refresh_token": "def50200abc123..."
}

রেসপন্সে একটি নতুন access_token এবং refresh_token ফেরত আসে।

API v2 — Client Credentials (OAuth 2.0)

API v2 একটি client-credentials ফ্লো ব্যবহার করে। একটি স্বল্পমেয়াদী অ্যাক্সেস টোকেনের জন্য আপনার Client ID এবং Client Secret এক্সচেঞ্জ করুন:

POST /api/v2/auth/token
Content-Type: application/json
Accept: application/json

{
  "client_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "client_secret": "sVn8K4pQ...xZ2mW"
}

রেসপন্স:

{
  "access_token": "v2_eyJhbGciOiJSUzI1NiIsInR5cCI6...",
  "token_type": "bearer",
  "expires_in": 1800
}

সকল v2 অনুরোধের জন্য Authorization হেডারে টোকেনটি ব্যবহার করুন:

Authorization: Bearer v2_eyJhbGciOiJSUzI1NiIsInR5cCI6...

টোকেন প্রত্যাহার

মেয়াদ শেষ হওয়ার আগে একটি টোকেন অকার্যকর করতে (যেমন, নিরাপত্তা ঘটনার সময়):

POST /api/v2/auth/revoke
Authorization: Bearer v2_eyJhbGciOiJSUzI1NiIsInR5cCI6...

একটি 204 No Content রেসপন্স সফল প্রত্যাহার নিশ্চিত করে।

v2 টোকেনের v1 টোকেনের চেয়ে ছোট ডিফল্ট মেয়াদ (৩০ মিনিট) থাকে। আপনার ইন্টিগ্রেশন একটি 401 Unauthorized রেসপন্স পেলে স্বয়ংক্রিয়ভাবে একটি নতুন টোকেন অনুরোধ করা উচিত।


পেজিনেশন

বড় ফলাফল সেট ফেরত দিতে পারে এমন সকল তালিকা এন্ডপয়েন্ট কোয়েরি প্যারামিটারের মাধ্যমে কার্সর-ভিত্তিক পেজিনেশন সমর্থন করে।

প্যারামিটার ধরন ডিফল্ট বিবরণ
page integer 1 প্রাপ্ত করার পৃষ্ঠা নম্বর।
per_page integer 20 প্রতি পৃষ্ঠায় রেকর্ড সংখ্যা (সর্বোচ্চ 100)।

উদাহরণ অনুরোধ:

GET /api/v2/customers?page=2&per_page=50
Authorization: Bearer YOUR_TOKEN

পেজিনেটেড রেসপন্স এনভেলপ:

{
  "data": [ ... ],
  "meta": {
    "current_page": 2,
    "per_page": 50,
    "total": 523,
    "last_page": 11
  }
}

সকল রেকর্ড প্রাপ্ত হয়েছে কিনা জানতে সবসময় meta.last_page পরীক্ষা করুন। পৃষ্ঠা সংখ্যা হার্ডকোড করা এড়িয়ে চলুন।


ত্রুটি পরিচালনা

API v1 এবং v2 উভয়ে সামঞ্জস্যপূর্ণ ত্রুটি রেসপন্স ফেরত দেয়। ত্রুটিগুলো স্ট্যান্ডার্ড HTTP স্ট্যাটাস কোড ব্যবহার করে এবং একটি স্ট্রাকচার্ড JSON বডি অন্তর্ভুক্ত করে।

ত্রুটি রেসপন্স ফরম্যাট

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The given data was invalid.",
    "details": {
      "email": ["The email field is required."],
      "package_id": ["The selected package is invalid."]
    }
  }
}

সাধারণ স্ট্যাটাস কোড

স্ট্যাটাস কোড অর্থ সাধারণ কারণ
400 Bad Request ত্রুটিপূর্ণ JSON বা অনুপস্থিত প্রয়োজনীয় ফিল্ড।
401 Unauthorized অনুপস্থিত, মেয়াদোত্তীর্ণ বা অবৈধ টোকেন।
403 Forbidden বৈধ টোকেন কিন্তু অপর্যাপ্ত অনুমতি।
404 Not Found রিসোর্সটি বিদ্যমান নেই বা মুছে ফেলা হয়েছে।
422 Unprocessable Entity ভ্যালিডেশন ব্যর্থ — error.details পরীক্ষা করুন।
429 Too Many Requests রেট লিমিট অতিক্রম — নিচে রেট লিমিট দেখুন।
500 Internal Server Error অপ্রত্যাশিত সার্ভার-সাইড ব্যর্থতা।

422 রেসপন্সে সবসময় error.details অবজেক্ট পরীক্ষা করুন। এতে প্রতি-ফিল্ড ভ্যালিডেশন মেসেজ রয়েছে যা শেষ ব্যবহারকারীর কাছে প্রদর্শন করা বা ডিবাগিংয়ের জন্য লগ করা উচিত।


API v1 রেফারেন্স

সকল v1 এন্ডপয়েন্ট /api/v1 প্রিফিক্স সহ এবং POST /api/auth/login-এর মাধ্যমে প্রাপ্ত একটি বৈধ Bearer token প্রয়োজন। প্রমাণীকরণ auth:api middleware দ্বারা প্রয়োগ করা হয়।

ড্যাশবোর্ড

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/dashboard ড্যাশবোর্ড সারসংক্ষেপ
GET /v1/noc/dashboard NOC ড্যাশবোর্ড

গ্রাহক

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/customers সকল গ্রাহক তালিকা (পেজিনেটেড)
POST /v1/customers নতুন গ্রাহক তৈরি
GET /v1/customers/{id} ID দ্বারা একটি গ্রাহক প্রাপ্ত করুন
POST /v1/customers/{id}/action একটি অ্যাকশন সম্পাদন করুন (স্থগিত, সক্রিয় ইত্যাদি)

উদাহরণ — গ্রাহক তৈরি:

POST /api/v1/customers
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "name": "Rafiq Ahmed",
  "email": "rafiq@example.com",
  "phone": "01712345678",
  "package_id": 5,
  "address": "House 12, Road 7, Dhanmondi, Dhaka",
  "connection_type": "pppoe"
}

রেসপন্স (201 Created):

{
  "data": {
    "id": 1042,
    "name": "Rafiq Ahmed",
    "email": "rafiq@example.com",
    "phone": "01712345678",
    "package": "Premium 50 Mbps",
    "status": "active",
    "created_at": "2026-04-10T08:15:00Z"
  }
}

বিলিং

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/invoices সকল ইনভয়েস তালিকা
GET /v1/bills সকল বিল তালিকা
GET /v1/subscriptions সকল সাবস্ক্রিপশন তালিকা
GET /v1/payments সকল পেমেন্ট তালিকা

নেটওয়ার্ক

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/routers সকল রাউটার তালিকা
GET /v1/olts সকল OLT তালিকা

মনিটরিং

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/monitoring/ubiquiti Ubiquiti ডিভাইস স্ট্যাটাস
GET /v1/monitoring/cambium Cambium ডিভাইস স্ট্যাটাস
GET /v1/monitoring/access-logs ডিভাইস অ্যাক্সেস লগ
GET /v1/monitoring/onus ONU তালিকা
GET /v1/monitoring/status-checks অবকাঠামো স্ট্যাটাস চেক
GET /v1/monitoring/zabbix Zabbix মনিটরিং ডেটা

SMS

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/sms/history SMS ডেলিভারি ইতিহাস
GET /v1/sms/balance বর্তমান SMS ব্যালেন্স
POST /v1/sms/send একটি SMS পাঠান

উদাহরণ — SMS পাঠানো:

POST /api/v1/sms/send
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "phone": "01712345678",
  "message": "Your monthly invoice of 1,200 BDT has been generated. Please pay before April 20."
}

রেসপন্স (200 OK):

{
  "data": {
    "message_id": "sms_8a3f2c",
    "status": "queued",
    "phone": "01712345678"
  }
}

অপারেটর

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/operators সকল অপারেটর তালিকা
POST /v1/operators নতুন অপারেটর তৈরি
PUT /v1/operators/{id} একটি অপারেটর আপডেট
POST /v1/operators/{id}/suspend একটি অপারেটর স্থগিত
POST /v1/operators/{id}/fund অপারেটরে তহবিল যোগ

VPN

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/vpn/accounts VPN অ্যাকাউন্ট তালিকা
GET /v1/vpn/accounts/{account}/config VPN কনফিগ ফাইল ডাউনলোড

লগ

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/logs/router রাউটার লগ
GET /v1/logs/hotspot হটস্পট লগ
GET /v1/logs/ppp-auth PPP প্রমাণীকরণ লগ
GET /v1/logs/auto-suspension স্বয়ংক্রিয় স্থগিতকরণ লগ

রিচার্জ কার্ড

মেথড এন্ডপয়েন্ট বিবরণ
GET /v1/recharge-cards সকল রিচার্জ কার্ড তালিকা

API v2 রেফারেন্স

সকল v2 এন্ডপয়েন্ট /api/v2 প্রিফিক্স সহ। প্রমাণীকরণ উপরে বর্ণিত client-credentials ফ্লো ব্যবহার করে (auth.api_v2 middleware)। v2 এন্ডপয়েন্টগুলো প্রতি-ক্লায়েন্ট রেট লিমিটিংয়ের অধীনে।

API v2 সকল নতুন ইন্টিগ্রেশনের জন্য সুপারিশকৃত সংস্করণ। এটি বেশিরভাগ রিসোর্সে সম্পূর্ণ CRUD অপারেশন, মানসম্মত রেসপন্স এনভেলপ এবং v1-এ উপলব্ধ নয় এমন অতিরিক্ত এন্ডপয়েন্ট (ওয়েবহুক ব্যবস্থাপনা, SMS ব্রডকাস্ট, IP পুল এবং আরও) প্রদান করে।

প্রমাণীকরণ

মেথড এন্ডপয়েন্ট বিবরণ
POST /v2/auth/token একটি অ্যাক্সেস টোকেন প্রাপ্ত করুন
POST /v2/auth/revoke একটি অ্যাক্সেস টোকেন প্রত্যাহার করুন

গ্রাহক

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/customers গ্রাহক তালিকা (পেজিনেটেড)
POST /v2/customers একটি গ্রাহক তৈরি
GET /v2/customers/{id} একটি গ্রাহক প্রাপ্ত করুন
PUT /v2/customers/{id} একটি গ্রাহক আপডেট
DELETE /v2/customers/{id} একটি গ্রাহক মুছুন
GET /v2/customers/{id}/bills গ্রাহকের বিল
GET /v2/customers/{id}/payments গ্রাহকের পেমেন্ট
GET /v2/customers/{id}/subscriptions গ্রাহকের সাবস্ক্রিপশন
GET /v2/customers/{id}/usage গ্রাহকের ব্যবহার পরিসংখ্যান

উদাহরণ — গ্রাহক তৈরি:

POST /api/v2/customers
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json

{
  "name": "Fatima Begum",
  "email": "fatima@example.com",
  "phone": "01898765432",
  "package_id": 12,
  "address": "Apt 4B, Gulshan Tower, Dhaka",
  "connection_type": "fiber",
  "onu_mac": "AA:BB:CC:DD:EE:FF"
}

রেসপন্স (201 Created):

{
  "data": {
    "id": 2087,
    "name": "Fatima Begum",
    "email": "fatima@example.com",
    "phone": "01898765432",
    "package": {
      "id": 12,
      "name": "Fiber 100 Mbps"
    },
    "connection_type": "fiber",
    "status": "active",
    "created_at": "2026-04-12T14:22:00Z",
    "updated_at": "2026-04-12T14:22:00Z"
  }
}

উদাহরণ — গ্রাহক আপডেট:

PUT /api/v2/customers/2087
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json

{
  "package_id": 15,
  "address": "Suite 6A, Banani Heights, Dhaka"
}

রেসপন্স (200 OK):

{
  "data": {
    "id": 2087,
    "name": "Fatima Begum",
    "package": {
      "id": 15,
      "name": "Fiber 200 Mbps"
    },
    "address": "Suite 6A, Banani Heights, Dhaka",
    "status": "active",
    "updated_at": "2026-04-13T09:05:00Z"
  }
}

বিলিং

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/billing/bills সকল বিল তালিকা
POST /v2/billing/bills একটি বিল তৈরি
GET /v2/billing/bills/{id} একটি বিল প্রাপ্ত করুন
PUT /v2/billing/bills/{id} একটি বিল আপডেট
DELETE /v2/billing/bills/{id} একটি বিল মুছুন
GET /v2/billing/payments সকল পেমেন্ট তালিকা

উদাহরণ — বিল তৈরি:

POST /api/v2/billing/bills
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json

{
  "customer_id": 2087,
  "amount": 1500,
  "currency": "BDT",
  "due_date": "2026-05-01",
  "description": "Monthly subscription — Fiber 200 Mbps (May 2026)"
}

রেসপন্স (201 Created):

{
  "data": {
    "id": 8431,
    "customer_id": 2087,
    "amount": 1500,
    "currency": "BDT",
    "status": "unpaid",
    "due_date": "2026-05-01",
    "description": "Monthly subscription — Fiber 200 Mbps (May 2026)",
    "created_at": "2026-04-15T00:00:00Z"
  }
}

প্যাকেজ

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/packages সকল প্যাকেজ তালিকা

নেটওয়ার্ক

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/network/routers সকল রাউটার তালিকা
GET /v2/network/olts সকল OLT তালিকা
GET /v2/network/onus সকল ONU তালিকা
GET /v2/network/pools সকল IP পুল তালিকা

মনিটরিং

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/monitoring/zabbix/hosts Zabbix হোস্ট
GET /v2/monitoring/zabbix/problems Zabbix সক্রিয় সমস্যা
GET /v2/monitoring/devices ডিভাইস স্ট্যাটাস ওভারভিউ
GET /v2/monitoring/status-checks অবকাঠামো স্ট্যাটাস চেক

SMS

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/sms/balance বর্তমান SMS ব্যালেন্স
POST /v2/sms/send একজন প্রাপককে SMS পাঠান
POST /v2/sms/broadcast একাধিক প্রাপককে SMS ব্রডকাস্ট

উদাহরণ — SMS পাঠানো:

POST /api/v2/sms/send
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json

{
  "phone": "01712345678",
  "message": "Dear customer, your payment of 1,500 BDT has been received. Thank you!"
}

রেসপন্স (200 OK):

{
  "data": {
    "message_id": "sms_v2_e4c19b",
    "status": "queued",
    "phone": "01712345678",
    "credits_used": 1,
    "credits_remaining": 4820
  }
}

উদাহরণ — SMS ব্রডকাস্ট:

POST /api/v2/sms/broadcast
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json

{
  "phones": ["01712345678", "01898765432", "01611223344"],
  "message": "Scheduled maintenance tonight from 02:00–04:00 AM. Service may be briefly interrupted."
}

VPN

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/vpn/accounts VPN অ্যাকাউন্ট তালিকা
GET /v2/vpn/accounts/{id}/config VPN কনফিগ ফাইল ডাউনলোড

ওয়েবহুক (শুধুমাত্র v2)

মেথড এন্ডপয়েন্ট বিবরণ
GET /v2/webhooks সকল ওয়েবহুক তালিকা
POST /v2/webhooks একটি ওয়েবহুক তৈরি
PUT /v2/webhooks/{id} একটি ওয়েবহুক আপডেট
DELETE /v2/webhooks/{id} একটি ওয়েবহুক মুছুন

v2-তে, ওয়েবহুকগুলো API-এর মাধ্যমেও প্রোগ্রামেটিক্যালি পরিচালনা করা যায় — এখন আর শুধুমাত্র অ্যাডমিন প্যানেলের মাধ্যমে কনফিগার করার প্রয়োজন নেই।


ওয়েবহুক

ওয়েবহুক ISPBills-কে আপনার বাহ্যিক সিস্টেমে রিয়েল-টাইম ইভেন্ট বিজ্ঞপ্তি পুশ করতে দেয়। API পোলিং করার পরিবর্তে, একটি সাবস্ক্রাইব করা ইভেন্ট ঘটলে আপনার সার্ভার একটি HTTP POST অনুরোধ পায়।

ওয়েবহুক সেটআপ

অ্যাডমিন প্যানেলের মাধ্যমে:

  1. Integrations → API Management → Webhooks-এ যান।
  2. Add Webhook Endpoint ক্লিক করুন।
  3. আপনার সার্ভার এন্ডপয়েন্টের URL লিখুন যা ওয়েবহুক পেলোড গ্রহণ করবে।
  4. আপনি যে ইভেন্ট সাবস্ক্রাইব করতে চান তা নির্বাচন করুন।
  5. Save ক্লিক করুন।

API-এর মাধ্যমে (শুধুমাত্র v2):

POST /api/v2/webhooks
Authorization: Bearer v2_YOUR_TOKEN
Content-Type: application/json

{
  "url": "https://your-server.example/webhooks/ispbills",
  "events": ["customer.created", "payment.received", "bill.generated"],
  "active": true
}

ওয়েবহুক ইভেন্ট

ইভেন্ট ট্রিগার
customer.created একটি নতুন গ্রাহক নিবন্ধিত হয়েছে
customer.suspended একটি গ্রাহক অ্যাকাউন্ট স্থগিত করা হয়েছে
customer.activated একটি গ্রাহক অ্যাকাউন্ট সক্রিয় বা পুনঃসক্রিয় করা হয়েছে
payment.received একটি পেমেন্ট রেকর্ড বা যাচাই করা হয়েছে
bill.generated একটি নতুন বিল তৈরি হয়েছে
complaint.created একটি নতুন সাপোর্ট অভিযোগ জমা দেওয়া হয়েছে

ওয়েবহুক পেলোড

প্রতিটি ওয়েবহুক ইভেন্টের ধরন, টাইমস্ট্যাম্প এবং প্রাসঙ্গিক ডেটা সম্বলিত একটি JSON বডি সহ একটি HTTP POST অনুরোধ পাঠায়:

{
  "event": "payment.received",
  "timestamp": "2026-03-15T10:30:00Z",
  "data": {
    "customer_id": 1234,
    "amount": 500,
    "currency": "BDT",
    "method": "bkash",
    "transaction_id": "TXN-9876"
  }
}

ওয়েবহুক স্বাক্ষর যাচাই

প্রতিটি ওয়েবহুক অনুরোধে HMAC-SHA256 স্বাক্ষর সম্বলিত একটি X-Signature হেডার অন্তর্ভুক্ত থাকে। অনুরোধটি ISPBills থেকে এসেছে কিনা নিশ্চিত করতে সবসময় আপনার সার্ভারে এই স্বাক্ষর যাচাই করুন।

যাচাইয়ের পদক্ষেপ:

  1. কাঁচা অনুরোধ বডি ঠিক যেভাবে পেয়েছেন সেভাবে পড়ুন (পার্স এবং পুনঃসিরিয়ালাইজ করবেন না)।
  2. আপনার ওয়েবহুক সিক্রেট ব্যবহার করে বডির একটি HMAC-SHA256 হ্যাশ গণনা করুন।
  3. একটি টাইমিং-সেফ তুলনা ব্যবহার করে গণনাকৃত হ্যাশকে X-Signature-এর মানের সাথে তুলনা করুন।
  4. স্বাক্ষর মিলে না গেলে অনুরোধ প্রত্যাখ্যান করুন।

সবসময় ওয়েবহুক স্বাক্ষর যাচাই করুন। যাচাই ছাড়া, একজন আক্রমণকারী ওয়েবহুক পেলোড জাল করে আপনার সিস্টেমে অনাকাঙ্ক্ষিত কাজ ট্রিগার করতে পারে।


রেট লিমিট

সুষ্ঠু ব্যবহার এবং প্ল্যাটফর্ম স্থিতিশীলতা নিশ্চিত করতে, API অনুরোধ প্রতি ক্লায়েন্ট রেট-লিমিটেড।

API সংস্করণ টিয়ার প্রতি মিনিটে অনুরোধ নোট
v1 স্ট্যান্ডার্ড 60 সকল v1 ক্লায়েন্টের জন্য ডিফল্ট
v1 হাই-ভলিউম 120 আপগ্রেডের জন্য সাপোর্টে যোগাযোগ করুন
v2 স্ট্যান্ডার্ড 120 সকল v2 ক্লায়েন্টের জন্য ডিফল্ট
v2 হাই-ভলিউম 300 আপগ্রেডের জন্য সাপোর্টে যোগাযোগ করুন

রেট লিমিট অতিক্রম হলে, API নিম্নলিখিত হেডার সহ একটি 429 Too Many Requests রেসপন্স ফেরত দেয়:

হেডার বিবরণ
Retry-After পরবর্তী অনুরোধ পাঠানোর আগে অপেক্ষার সেকেন্ড
X-RateLimit-Limit বর্তমান উইন্ডোতে সর্বোচ্চ অনুমোদিত অনুরোধ
X-RateLimit-Remaining বর্তমান উইন্ডোতে অবশিষ্ট অনুরোধ

আপনার ইন্টিগ্রেশন সুন্দরভাবে রেট লিমিট মেনে চলতে ডিজাইন করুন। 429 রেসপন্সে এক্সপোনেনশিয়াল ব্যাক-অফ বাস্তবায়ন করুন এবং ঘন ঘন পরিবর্তন হয় না এমন ডেটা ক্যাশ করুন।


সাহায্য পাওয়া

  • API রেসপন্সে error অবজেক্ট পরীক্ষা করুন — এতে কার্যকরী বার্তা এবং প্রতি-ফিল্ড বিবরণ রয়েছে।
  • অনুরোধ ইতিহাস এবং ডিবাগিংয়ের জন্য অ্যাডমিন প্যানেলে (Integrations → API Management → Logs) API Request Log পর্যালোচনা করুন।
  • আপনার ISPBills ইনস্টলেশনে /docs/api-তে পাঠানো রুট-স্তরের ডকুমেন্টেশন দেখুন।
  • কাস্টম ইন্টিগ্রেশনে সহায়তা প্রয়োজন হলে বা রেট-লিমিট বৃদ্ধি অনুরোধ করতে ISPBills সাপোর্টে যোগাযোগ করুন।