অফিশিয়াল SDK

পাঁচটি সবচেয়ে চাওয়া ভাষার জন্য REST API-এর উপর টাইপড ক্লায়েন্ট। প্রতিটি bearer-token auth, 4295xx-এ exponential-backoff retry এবং webhook-signature header-এর HMAC-SHA256 verification-এর জন্য একটি verifyWebhookSignature helper সহ ship করে। MIT-লাইসেন্স।

Source of truth: /docs/openapi.json · সমস্যা: support@abundera.ai

TS

TypeScript / Node

@abundera/qr-pro

Node 18+। শূন্য runtime dependency। ESM ও CJS build।

Install

npm install @abundera/qr-pro

একটি কোড তৈরি করুন

import { AbunderaQRProClient } from "@abundera/qr-pro";

const client = new AbunderaQRProClient({
  apiKey: process.env.ABUNDERA_API_KEY!,
});

const code = await client.createCode({
  destination_url: "https://example.com/launch",
  label: "Spring launch poster",
});

console.log(code.short_url);

Webhook যাচাই করুন

import { verifyWebhookSignature } from "@abundera/qr-pro";

verifyWebhookSignature({
  webhookId: req.headers["webhook-id"],
  webhookTimestamp: req.headers["webhook-timestamp"],
  webhookSignature: req.headers["webhook-signature"],
  body: rawBody,
  secret: process.env.ABUNDERA_WEBHOOK_SECRET!,
});
// খারাপ signature / skew-এ throw করে, এই লাইনের পরে body parse করা নিরাপদ

GitHub-এ Source →

Py

Python

abundera-qr-pro

Python 3.9+। একটি dependency (httpx)। Sync ও async ক্লায়েন্ট।

Install

pip install abundera-qr-pro

একটি কোড তৈরি করুন

from abundera_qr_pro import Client

with Client(api_key="abnd_qrpro_...") as c:
    code = c.create_code(
        destination_url="https://example.com/launch",
        label="Spring launch poster",
    )
    print(code.short_url)

Webhook যাচাই করুন

from abundera_qr_pro import verify_webhook_signature
from abundera_qr_pro.webhook import WebhookVerificationError

try:
    verify_webhook_signature(
        webhook_id=request.headers["webhook-id"],
        webhook_timestamp=request.headers["webhook-timestamp"],
        webhook_signature=request.headers["webhook-signature"],
        body=request.body,
        secret=os.environ["ABUNDERA_WEBHOOK_SECRET"],
    )
except WebhookVerificationError:
    return "", 400

GitHub-এ Source →

Go

Go

github.com/abundera/qr-pro-go

Go 1.21+। শুধুমাত্র standard library। সব জায়গায় context-aware।

Install

go get github.com/abundera/qr-pro-go

একটি কোড তৈরি করুন

import qrpro "github.com/abundera/qr-pro-go"

c, _ := qrpro.New(os.Getenv("ABUNDERA_API_KEY"))
ctx := context.Background()

code, err := c.CreateCode(ctx, qrpro.CodeCreate{
    DestinationURL: "https://example.com/launch",
    Label:          "Spring launch poster",
})
if err != nil { log.Fatal(err) }
fmt.Println(code.ShortURL)

Webhook যাচাই করুন

if err := qrpro.VerifyWebhookSignature(
    r.Header.Get("webhook-id"),
    r.Header.Get("webhook-timestamp"),
    r.Header.Get("webhook-signature"),
    body,
    os.Getenv("ABUNDERA_WEBHOOK_SECRET"),
    0, // default 300s tolerance
); err != nil {
    http.Error(w, "bad signature", http.StatusBadRequest)
    return
}

GitHub-এ Source →

Rb

Ruby

abundera-qr-pro

Ruby 3.0+। Faraday-র উপর নির্মিত। Rails initialiser-এর সাথে ভালো কাজ করে।

Install

gem install abundera-qr-pro
# বা Gemfile-এ
gem "abundera-qr-pro"

একটি কোড তৈরি করুন

require "abundera/qr_pro"

client = Abundera::QRPro::Client.new(api_key: ENV.fetch("ABUNDERA_API_KEY"))

code = client.create_code(
  destination_url: "https://example.com/launch",
  label: "Spring launch poster",
)

puts code.short_url

Webhook যাচাই করুন

require "abundera/qr_pro/webhook"

begin
  Abundera::QRPro::Webhook.verify!(
    webhook_id: request.headers["webhook-id"],
    webhook_timestamp: request.headers["webhook-timestamp"],
    webhook_signature: request.headers["webhook-signature"],
    body: request.raw_post,
    secret: ENV.fetch("ABUNDERA_WEBHOOK_SECRET"),
  )
rescue Abundera::QRPro::Webhook::InvalidSignature
  head :bad_request
end

GitHub-এ Source →

PHP

PHP

abundera/qr-pro

PHP 8.1+। যেকোনো PSR-18 HTTP ক্লায়েন্টের সাথে কাজ করে (ডিফল্টে Guzzle)। একই package-এ Laravel ও Symfony service provider।

Install

composer require abundera/qr-pro

একটি কোড তৈরি করুন

use Abundera\QrPro\Client;

$client = new Client(apiKey: getenv('ABUNDERA_API_KEY'));

$code = $client->createCode(
    destinationUrl: 'https://example.com/launch',
    label: 'Spring launch poster',
);

echo $code->shortUrl;

Webhook যাচাই করুন

use Abundera\QrPro\Webhook;
use Abundera\QrPro\WebhookException;

try {
    Webhook::verify(
        webhookId: $_SERVER['HTTP_WEBHOOK_ID'] ?? '',
        webhookTimestamp: $_SERVER['HTTP_WEBHOOK_TIMESTAMP'] ?? '',
        webhookSignature: $_SERVER['HTTP_WEBHOOK_SIGNATURE'] ?? '',
        body: file_get_contents('php://input'),
        secret: getenv('ABUNDERA_WEBHOOK_SECRET'),
    );
} catch (WebhookException $e) {
    http_response_code(400);
    exit;
}

GitHub-এ Source →

প্রতিটি SDK কী কভার করে

  • Codes list, get, create, update, delete, slug check, import।
  • Analytics from/to date filter সহ JSON ও CSV export।
  • Groups list, create, delete, কোড assign।
  • Webhooks list, create (secret সহ), delete, সাথে signature-verify helper।
  • User /me, অ্যাকাউন্ট export।

Admin, Stripe-webhook ও infra endpoint SDK-এর জন্য ইচ্ছাকৃতভাবে scope-এর বাইরে — এগুলো service-to-service only। সম্পূর্ণ endpoint তালিকা OpenAPI 3.1 spec-এ।

Postman collection

Postman বা Insomnia-তে one-click import: /docs/postman.json (প্রতিটি deploy-এ OpenAPI spec থেকে পুনর্জন্ম)। প্রতিটি request bearer-token auth header template সহ pre-configured — collection level-এ একবার API key সেট করুন এবং প্রতিটি endpoint inherit করে।

Raw OpenAPI পছন্দ করেন? Postman natively OpenAPI 3.1 সাপোর্ট করে: File → Import → Link, তারপর https://pro.qr.abundera.ai/docs/openapi.json paste করুন।

Versioning নীতি

SDK SemVer অনুসরণ করে এবং API থেকে স্বাধীনভাবে versioned। SDK bugfix (0.1.0 → 0.1.1) API version পরিবর্তন করে না। Additive API পরিবর্তন (নতুন endpoint, নতুন optional field) SDK major bump বাধ্য করে না।

  • SDK patch (0.1.x) — bugfix, docs, কোনো public-API পরিবর্তন নেই। auto-update নিরাপদ।
  • SDK minor (0.x.0) — নতুন API endpoint cover করতে নতুন method, বা ergonomic addition। Backward compatible।
  • SDK major (1.0.0 → 2.0.0) — rename, removal, type-shape পরিবর্তন। শুধুমাত্র API major হলে, বা দীর্ঘস্থায়ী SDK ergonomic bug fix করতে যা minor-এ ship করা যায় না।

API versioning। URL prefix হলো major version। আজ: /api/... (v1)। Breaking পরিবর্তন /api/v2/... হিসেবে ship করে, v1 কমপক্ষে ১২ মাস alive রাখা হয় এবং deprecation window জুড়ে Deprecation + Sunset response header। “breaking”-এর সম্পূর্ণ সংজ্ঞা /docs/changelog/-এ।

সাপোর্ট উইন্ডো। বর্তমান major-এর latest minor security fix পায়। পেইড Pro গ্রাহকদের অনুরোধে পুরানো major-এ security patch।

উদাহরণ app

কোড তৈরি, গন্তব্য আপডেট, analytics read ও webhook signature verification দেখানো minimal runnable app:

  • node-express — TypeScript + Express, replay protection সহ webhook endpoint।
  • fastapi — Python 3.11 + FastAPI, signature verification helper wired in।
  • gin — Go 1.21 + Gin, idiomatic handler pattern।
  • rails — Rails 7 + Sidekiq, job হিসেবে webhook handler।
  • laravel — Laravel 11, signed-route webhook controller।

প্রতিটি উদাহরণ mocked API-এর বিরুদ্ধে CI-tested। Clone করুন, ABUNDERA_API_KEYABUNDERA_WEBHOOK_SECRET সেট করুন, চালান।

আপনার ভাষা দেখছেন না?

OpenAPI 3.1 spec হলো source of truth। openapi-generator দিয়ে যেকোনো ভাষায় ক্লায়েন্ট generate করুন, বা নিজেই একটি thin wrapper লিখুন — API ছোট (ছয়টি core resource, bearer-token auth)। আমরা cover করি না এমন ভাষার জন্য official SDK চাইলে support@abundera.ai-এ ইমেইল করুন।