Skip to content
ভাষা: বাংলা

ডেভেলপারদের জন্য API

বিক্রি ও নিজস্ব ডেটা LinkHarbor-এ পাঠানো

হালনাগাদ ১ নভেম্বর, ২০২৬ 5 মিনিটে পড়া

সেল কলব্যাক দিয়ে শপের বিক্রি লিংক ক্লিকের সাথে মেলান, আর “Custom (API)” দিয়ে নিজের টুলের লাইভ ডেটা আপনার পেজে পাঠান।

LinkHarbor বাইরে থেকেও ডেটা নেয়। দুটি ক্ষেত্রের জন্য নিজস্ব সিক্রেটসহ আলাদা এন্ডপয়েন্ট আছে – এগুলোর জন্য API কী লাগে না: সেল কলব্যাক আপনার শপ থেকে বিক্রির খবর দেয়, যাতে পরিসংখ্যানে দেখতে পান কোন লিংক আয় এনেছে। “Custom (API)” ইন্টিগ্রেশন আপনার নিজের টুলের লাইভ ডেটা উইজেট হিসেবে আপনার পেজে আনে এবং পুশ নোটিফিকেশন চালু করতে পারে।

সেল কলব্যাক: বিক্রি মেলানো

ক্লিক আইডি (lt_click_id), মেলানো আর রিপোর্টিং কীভাবে একসাথে কাজ করে তা ব্যাখ্যা করা আছে কনভার্সন ও বিক্রি যুক্ত করা-এ; এখানে ডেভেলপারদের জন্য সব ফিল্ড আর রেসপন্স পাবেন। সংক্ষেপে: LinkHarbor যখন গোনা একটি ক্লিককে http বা https টার্গেটে রিডাইরেক্ট করে, তখন lt_click_id প্যারামিটার যোগ করে; আপনার শপ এটি মনে রাখে এবং কেনাকাটার পর ফেরত পাঠায়।

কলব্যাক সিক্রেট তৈরি করুন

“কলব্যাক সিক্রেট” কার্ডসহ “কলব্যাক ও API” পেজ
“কলব্যাক ও API” পেজে আপনি কলব্যাক সিক্রেট তৈরি করেন
  1. “কলব্যাক ও API” খুলুন
  2. “কলব্যাক সিক্রেট” কার্ডে “+ নতুন সিক্রেট তৈরি করুন”-এ ক্লিক করুন
  3. চাইলে একটি নাম দিন, যেমন “শপ কলব্যাক”, তারপর “সিক্রেট তৈরি করুন”-এ ক্লিক করুন
  4. সিক্রেটটি সাথে সাথে কপি করুন – এটি শুধু একবারই দেখানো হয়
কে
মালিক আর অ্যাডমিন, Creator Pro থেকে। Creator Free-তে লেখা থাকে “কলব্যাক সিক্রেট Creator Pro থেকে পাওয়া যায়।”
কতগুলো
প্রতি ওয়ার্কস্পেসে সর্বোচ্চ ৫টি সিক্রেট, যেমন প্রতিটি শপের জন্য একটি।
“সম্পাদনা করুন”
নাম বদলান আর স্ট্যাটাস “সক্রিয়” বা “নিষ্ক্রিয়” করুন। সিক্রেট নিষ্ক্রিয় থাকলে API কলব্যাক প্রত্যাখ্যান করে।
“↺ রোটেট করুন”
একটি নতুন সিক্রেট তৈরি করে; পুরোনোটি সাথে সাথে কাজ করা বন্ধ করে।
“সর্বশেষ কলব্যাক:”
সিক্রেটটি শেষবার কখন সফলভাবে ব্যবহার হয়েছে তা দেখায়।

কলব্যাক পাঠান

POST /v1/callbacks/sale
curl -X POST https://dock.at-harbor.com/v1/callbacks/sale \
  -H "Content-Type: application/json" \
  -H "X-Callback-Secret: $LH_CALLBACK_SECRET" \
  -d '{
    "click_id": "3f1c2a9e-8d4b-4a51-9f0e-6b7c1d2e3f40",
    "order_id": "A-10023",
    "amount": "49.90",
    "currency": "EUR",
    "occurred_at": "2026-11-01T10:15:00Z"
  }'
# → {"ok":true,"conversion_id":123}
ফিল্ডআবশ্যকঅর্থ
click_idহ্যাঁlt_click_id-এর মান (১০–৩৬ অক্ষর)
order_idহ্যাঁআপনার অর্ডার নম্বর (১–১২৮ অক্ষর); প্রতিটি অর্ডার নম্বর প্রতি ওয়ার্কস্পেসে শুধু একবার গোনা হয়
amountহ্যাঁদশমিক সংখ্যা হিসেবে পরিমাণ, যেমন "49.90"; ঋণাত্মক মান চলবে না
currencyহ্যাঁতিন অক্ষরের কোড হিসেবে মুদ্রা, যেমন EUR; ছোট হাতের অক্ষর API নিজেই বদলে নেয়
occurred_atনাকেনাকাটার সময় (ISO 8601)
amount_base_minor, base_currency, fx_rateনাএকাধিক মুদ্রায় বিক্রি করলে সবচেয়ে ছোট এককে রূপান্তরিত পরিমাণ, মূল মুদ্রা আর বিনিময় হার
metaনাফ্ল্যাট অবজেক্ট হিসেবে আপনার নিজের অতিরিক্ত ডেটা: ১–৬৪ অক্ষরের সর্বোচ্চ ৫০টি কী; মান হতে পারে টেক্সট (সর্বোচ্চ ৫০০ অক্ষর), সংখ্যা, true/false বা null; নেস্টেড অবজেক্ট আর তালিকা প্রত্যাখ্যাত হয়
workspace_idনাআপনার ওয়ার্কস্পেস আইডি; এটি দিলে API অজানা click_id-কে 403-এর বদলে 404 হিসেবে জানায়
রেসপন্সঅর্থ
200 {"ok":true,"conversion_id":…}বিক্রি সংরক্ষিত হয়েছে – অথবা এই order_id আগেই সংরক্ষিত ছিল (তখন বিদ্যমান কনভার্সনের আইডি)
403 forbiddenভুল সিক্রেট বা সিগনেচার, অথবা অজানা click_id (workspace_id ছাড়া)
403 secret_inactiveসিক্রেটটি “নিষ্ক্রিয়” করা আছে
404 not_foundঅজানা click_id (শুধু workspace_id আর বৈধ সিক্রেটসহ)
413 request_too_largeবডি ১ MB-এর চেয়ে বড়
422 validation_failedকোনো ফিল্ড নেই বা অবৈধ, যেমন meta-তে খুব লম্বা বা নেস্টেড কোনো মান
429 rate_limitedআপনার IP ঠিকানা থেকে মিনিটে ১২০টির বেশি কলব্যাক

ঐচ্ছিক সিগনেচার

সিক্রেটের পাশাপাশি আপনি X-Callback-Signature হেডার পাঠাতে পারেন। এতে থাকে sha256= আর hex-এ কাঁচা বডির HMAC-SHA256 সিগনেচার। কী হিসেবে সিক্রেট নিজে নয়, বরং বাইনারি আকারে তার SHA-256 হ্যাশ ব্যবহার হয়। হেডার পাঠালে তা অবশ্যই সঠিক হতে হবে – নইলে কলব্যাক প্রত্যাখ্যাত হয়।

সিগনেচার হিসাব করুন (PHP)
<?php
$body = json_encode($payload);
$key  = hash('sha256', getenv('LH_CALLBACK_SECRET'), true); // সিক্রেটের বাইনারি হ্যাশ
$sig  = 'sha256=' . hash_hmac('sha256', $body, $key);
// হেডার: X-Callback-Secret আর X-Callback-Signature: $sig, বডি: $body

বিক্রি কোথায় দেখবেন

রিপোর্ট করা বিক্রি আপনার পরিসংখ্যানে কনভার্সন হিসেবে দেখা যায়, দেখুন কনভার্সন ও বিক্রি যুক্ত করা। API দিয়ে এগুলো পড়েন read:stats দিয়ে, /v1/stats/…/conversions/breakdown-এর অধীনে।

Custom (API): আপনার নিজের লাইভ ডেটা

“Custom (API)” ইন্টিগ্রেশনের মাধ্যমে HTTP রিকোয়েস্ট পাঠাতে পারে এমন যেকোনো প্রোগ্রাম – গেম সার্ভারের প্লাগইন, বট, ক্রন স্ক্রিপ্ট – LinkHarbor-এ ডেটা পাঠাতে পারে। তা আপনার পেজে একটি লাইভ উইজেট হয়ে যায়, আর পুশ রুল আপনার ফলোয়ারদের জানাতে পারে।

সংযুক্ত করুন

  1. ওয়ার্কস্পেসে “ইন্টিগ্রেশন” খুলুন
  2. “Custom (API)” বেছে নিয়ে একটি নাম দিন
  3. সংযুক্ত হলে ডায়ালগে “Ingest URL” আর “সিক্রেট” দেখা যায় (“সিক্রেট দেখান” সহ)
  4. দুটোই আপনার টুলে সংরক্ষণ করুন

ইন্টিগ্রেশন Creator Pro থেকে পাওয়া যায়। Ingest URL আর সিক্রেট শুধু মালিক আর অ্যাডমিনরা দেখতে পান, পরে ইন্টিগ্রেশনের বিস্তারিত ভিউতেও। সংযোগ বিচ্ছিন্ন করে আবার সংযুক্ত করলে নতুন সিক্রেট তৈরি হয়। সাধারণভাবে ইন্টিগ্রেশন কীভাবে সংযুক্ত করবেন তা ব্যাখ্যা করা আছে ইন্টিগ্রেশন সংযোগ, নবায়ন ও বিচ্ছিন্ন করা-এ।

ডেটা পাঠান

একটি ইভেন্ট আর উইজেটের অবস্থা পাঠান
curl -X POST "$INGEST_URL" \
  -H "Authorization: Bearer $INGEST_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "player.joined",
    "event_id": "join-2026-11-01T20:01:02Z-steve",
    "data": { "player": "Steve" },
    "state": {
      "type": "game_server",
      "name": "Survival SMP",
      "online": true,
      "players_online": 3,
      "players_max": 20
    }
  }'
# → {"ok":true,"event_id":4711,"duplicate":false,"event_type":"player.joined"}
event
ইচ্ছেমতো ইভেন্টের নাম, যেমন player.joined। এটি ছোট হাতের অক্ষরে রূপান্তরিত হয়, আর পুশ রুল এই নামেই সাড়া দেয়। event না থাকলে ইভেন্টের নাম হয় state.updated।
event_id
ঐচ্ছিক কী, যা দুবার প্রসেস হওয়া ঠেকায়। একই event_id আবার পাঠালে LinkHarbor duplicate: true দিয়ে উত্তর দেয় এবং আর কিছু করে না।
data
পুশ টেক্সটের প্লেসহোল্ডারের মান, যেমন {player}। সর্বোচ্চ ৪০টি কী, শুধু সাধারণ মান।
state
উইজেটের সম্পূর্ণ অবস্থা। এটি আগেরটিকে পুরোপুরি প্রতিস্থাপন করে। type হলো game_server (গেম সার্ভার কার্ড) বা status (স্ট্যাটাস কার্ড)।

Authorization: Bearer-এর বদলে আপনি সিক্রেটটি X-LinkHarbor-Secret হেডারেও পাঠাতে পারেন। প্রতি IP ঠিকানায় মিনিটে ১২০টি কল অনুমোদিত। চাইলে বডিতে সাইন করতে পারেন: X-LinkHarbor-Signature হেডারে থাকে sha256= আর সিক্রেটকে কী হিসেবে নিয়ে কাঁচা বডির HMAC-SHA256 সিগনেচার। পাঠালে তা অবশ্যই সঠিক হতে হবে।

রেসপন্সঅর্থ
200 {"ok":true,…}ইভেন্ট সংরক্ষিত হয়েছে, পরিচিত event_id হলে duplicate: true সহ
400 invalid_jsonবডি কোনো JSON অবজেক্ট নয়
401 invalid_secretভুল সিক্রেট বা অজানা Ingest URL
401 signature_invalidX-LinkHarbor-Signature বডির সাথে মেলে না
413 request_too_largeবডি ৬৪ KB-এর চেয়ে বড়
422 validation_failedবডিতে event বা state কোনোটিই নেই
429 rate_limitedআপনার IP ঠিকানা থেকে মিনিটে ১২০টির বেশি কল

কিছু খুঁজে পাননি?

আপনার কী দরকার তা আমাদের জানান, আমাদের সাপোর্ট টিম ব্যক্তিগতভাবে আপনাকে সাহায্য করবে।

সাপোর্টে যোগাযোগ করুন