রিসেলার API ডকুমেন্টেশন

SHOP2TOPUP রিসেলার API একটি JSON REST API। এটি দিয়ে আপনি নিজের শপ, স্টোরফ্রন্ট বা বট থেকে গেম টপ আপ, গেম রিচার্জ আর ভাউচার কোড বিক্রি করতে পারবেন। এই রেফারেন্সে প্রতিটি পাবলিক এন্ডপয়েন্ট, তার প্যারামিটার আর রেসপন্সের বিবরণ আছে।

বেস URL ও ট্রান্সপোর্ট

এই রেফারেন্সের সব পাথ নিচের বেস URL-এর সাপেক্ষে লেখা। রিকোয়েস্ট ও রেসপন্স HTTPS-এর মাধ্যমে JSON আকারে আসা-যাওয়া করে। পরিমাণগুলো স্ট্রিং হিসেবে থাকে, তাই float রাউন্ডিংয়ের ভুল ঢোকার সুযোগ নেই। প্রতিটি টাইমস্ট্যাম্প ISO 8601 ফরম্যাটে, UTC সময়ে দেওয়া হয়।

https://shop2topup.com/api/endpoints/v1

অথেন্টিকেশন

প্রতিটি রিকোয়েস্টে একটি হেডার পাঠাতে হয়। API key পেয়ারটি আপনার রিসেলার প্যানেলের API Access পেজ থেকে ইস্যু করা হয়, আর চাইলে IP অ্যালাউলিস্ট দিয়ে সীমিত করা যায়। তালিকার বাইরের কোনো ঠিকানা থেকে কল এলে বিজনেস লজিকে পৌঁছানোর আগেই IP_NOT_ALLOWED দিয়ে তা বাতিল হয়ে যায়।

রিকোয়েস্ট হেডার
Authorization: Bearer <keyId>.<secret>

প্রথম কল

কিছু ইনস্টল করতে হবে না। নিজের API key বসিয়ে দিন, লাইভ ক্যাটালগের ডেটা চলে আসবে।

cURL দিয়ে রিকোয়েস্ট
curl -s "https://shop2topup.com/api/endpoints/v1/catalog/categories?bigCategoryId=1" \
  -H "Authorization: Bearer YOUR_KEY_ID.YOUR_KEY_SECRET"

রেসপন্সের নিয়ম

  • প্রতিটি রেসপন্সে একটি boolean success ফিল্ড থাকে। তাই একটি মাত্র শর্তেই সফল রেসপন্স আর যেকোনো ব্যর্থতা আলাদা করা যায়।
  • ব্যর্থ হলে একটি error অবজেক্ট আসে, যাতে থাকে স্থায়ী একটি code, মানুষের পড়ার মতো একটি message আর ঐচ্ছিক details। শর্ত লিখুন code দেখে, message দেখে কখনো নয়।
  • অর্থের মান সবসময় USD-তে দশমিক স্ট্রিং হিসেবে আসে, যেমন "0.950000"। তুলনা বা যোগ করার আগে একে binary float-এ পার্স করবেন না।
  • তালিকা ফেরত দেওয়া এন্ডপয়েন্টগুলোর রেসপন্সে একটি পেজিনেশন অবজেক্ট থাকে, যার ভেতরে থাকে page, limit, total ও total_pages।
  • আপনার দেওয়া order_id UUID-এর ভিত্তিতে অর্ডার তৈরি idempotent। তাই আবার চেষ্টা করলেও কখনো দুবার চার্জ কাটা হবে না।
এরর রেসপন্স
{
  "success": false,
  "error": {
    "code": "PRICE_INCREASED",
    "message": "Price has increased beyond expected",
    "action": "FIX_INPUT",
    "retryable": false,
    "retry_after": null,
    "details": {
      "expected_unit_price": "0.950000",
      "current_unit_price": "0.980000"
    }
  }
}

রেফারেন্সের অংশগুলো

ক্যাটালগক্যাটালগ তিন স্তরের একটি ট্রি। বিগ ক্যাটাগরির ভেতরে থাকে ক্যাটাগরি, ক্যাটাগরির ভেতরে সাবক্যাটাগরি, আর সাবক্যাটাগরিই হলো সেই আইটেম যা আপনি আসলে কেনেন। এই এন্ডপয়েন্টগুলো দিয়ে পুরো ট্রি নিজের ডেটাবেসে মিরর করে রাখতে পারবেন, আর অর্ডার দেওয়ার ঠিক আগে যেকোনো আইটেমের দাম দেখে নিতে পারবেন।প্লেয়ার যাচাইকোনো টাকা লেনদেন হওয়ার আগেই প্লেয়ার যাচাই গেমের অ্যাকাউন্টটি খুঁজে বের করে। ওই প্রোডাক্টের জন্য আইডিটি আসলেই আছে কি না তা নিশ্চিত করে, আর ইন-গেম নাম ফেরত দেয় যাতে আপনার ক্রেতা মিলিয়ে দেখতে পারেন। সাথে রিজিয়নও জানিয়ে দেয়, ফলে অন্য রিজিয়নের অর্ডার পেমেন্টের পরে ব্যর্থ না হয়ে শুরুতেই বাতিল হয়।অর্ডারপ্রতিটি অর্ডার তৈরি হয় আপনার নিজের বানানো একটি UUID দিয়ে। এই UUID-ই idempotency key: একই UUID আবার পাঠালে দ্বিতীয়বার চার্জ হয় না, আগের অর্ডারটিই ফেরত আসে। এরপর স্ট্যাটাস দেখতে পারবেন প্রতিটি অর্ডার আলাদা করে, সর্বোচ্চ 50টির ব্যাচে, অথবা পেজিনেটেড তালিকায়।অ্যাকাউন্ট ও অথেন্টিকেশনপ্রতিটি রিকোয়েস্টে একটি হেডার থাকে। GET /account কল করে আপনি দেখে নিতে পারেন API key ঠিকমতো কাজ করছে কি না, অর্ডারের টাকা যে ওয়ালেট থেকে কাটা হয় তার ব্যালেন্স কত, আর ব্যাচ রান শুরুর আগে অ্যাকাউন্ট চালু আছে কি না।এরর কোডপ্রতিটি ব্যর্থ রিকোয়েস্টে HTTP স্ট্যাটাসের সাথে একটি স্থায়ী, মেশিনে পড়ার উপযোগী কোড আসে। আপনার লজিক কোড দেখে সাজান, মেসেজের লেখা দেখে কখনো নয়। মেসেজ মানুষের পড়ার জন্য লেখা, তাই এর ভাষা বদলাতে পারে, কিন্তু কোড চুক্তির অংশ।

রেট লিমিট

লিমিট প্রতিটি অ্যাকাউন্টের জন্য আলাদা, আর তা গোনা হয় রোলিং উইন্ডোতে। ক্যাটালগ, অর্ডার ও অ্যাকাউন্ট এন্ডপয়েন্টে X-RateLimit-Limit, X-RateLimit-Remaining ও X-RateLimit-Reset থাকে। থ্রটল হওয়া কল 429 ফেরত দেয়, সঙ্গে থাকে Retry-After হেডার। প্লেয়ার ভ্যালিডেশনের হিসাব অবশ্য চলে আপনার দৈনিক প্লেয়ার-চেক কোটা দিয়ে: এটি কোনো X-RateLimit হেডার পাঠায় না, কোটার তথ্য দেয় 429 body-র ভেতরে।

রুটরিকোয়েস্টউইন্ডোগণনার ভিত্তি
GET /catalog/* (5টিই)500060 সেকেন্ডপ্রতি অ্যাকাউন্টে
POST /orders/create500060 সেকেন্ডপ্রতি অ্যাকাউন্টে
GET /orders/:orderId360 সেকেন্ডপ্রতি অ্যাকাউন্ট + অর্ডার আইডি
POST /orders/batch260 সেকেন্ডপ্রতি অ্যাকাউন্টে
GET /orders260 সেকেন্ডপ্রতি অ্যাকাউন্টে
GET /account6060 সেকেন্ডপ্রতি অ্যাকাউন্টে
POST /player/validateদৈনিক প্লেয়ার চেক কোটা24 ঘণ্টাপ্রতি অ্যাকাউন্টে (X-RateLimit হেডার পাঠানো হয় না)

ওয়েবহুক

অর্ডারের ফলাফল আপনার রেজিস্টার করা HTTPS এন্ডপয়েন্টে পাঠানো হয়, raw body-র ওপর HMAC-SHA256 সিগনেচারসহ। ইভেন্টের তালিকা, হেডারের তালিকা, payload-এর গঠন আর যাচাইয়ের একটি কোড স্নিপেট API ওভারভিউ পেজে দেওয়া আছে।

ওয়েবহুক payload ও সিগনেচারের রেফারেন্স পড়ুন

প্ল্যাটফর্মে নতুন হলে রিসেলারদের জন্য গেম টপ আপ API ওভারভিউ, অথবা SHOP2TOPUP রিসেলার প্রোগ্রামের পরিচিতি পড়ে জেনে নিন পার্টনার অ্যাকাউন্ট কীভাবে কাজ করে।

রিসেলার API ডকুমেন্টেশন: গেম টপ আপ ও ভাউচার API