API ডকুমেন্টেশন
Quik.mn REST API দিয়ে প্রোগ্রাম করে লিংক তৈরি করুন, ম্যানেজ করুন, স্ট্যাটিসটিক্স নামিয়ে নিন।
সব সার্ভিস
Quik.mn প্ল্যাটফর্মের সব প্রোডাক্ট — REST API ও ওয়েব দুই জায়গাতেই।
বেস URL
সব endpoint শুরু হয় এই বেস URL থেকে:
অথেনটিকেশন
প্রতিটি রিকোয়েস্টে ড্যাশবোর্ড থেকে নেওয়া API কী-টি Authorization হেডারে পাঠান:
কী কারও সাথে শেয়ার করবেন না। ফাঁস হয়ে গেলে ড্যাশবোর্ড থেকে নতুন করে তৈরি করুন।
Endpoint তালিকা
প্যারামিটার
POST /api/v1/links — body ফিল্ড:
GET /api/v1/links — query প্যারামিটার:
এরর ফরম্যাট
প্রতিটি এরর একটি HTTP স্ট্যাটাস কোড (401, 404, 409, 422, 429) ও অভিন্ন JSON কাঠামোসহ আসে:
{ "error": "alias_taken", "message": "এই নামটি সংরক্ষিত বা আগে থেকেই ব্যবহারে আছে।" }
সাধারণ কোডগুলো: unauthorized (401), not_found (404), alias_taken (409), invalid_url / invalid_alias / invalid_expires_at / invalid_starts_at (422), rate_limited (429).
লিমিট
নমুনা রিকোয়েস্ট
শর্ট লিংক তৈরির cURL উদাহরণ:
curl -X POST https://quik.mn/api/v1/links \
-H "Authorization: Bearer qk_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/খুব/লম্বা/পথ",
"alias": "promo",
"title": "ঈদ ক্যাম্পেইন",
"expires_at": "2026-12-31 23:59:59"
}'
Webhook
ড্যাশবোর্ডের Webhook সেকশনে endpoint রেজিস্টার করলে নির্বাচিত ইভেন্ট ঘটার সাথে সাথে আমরা আপনার URL-এ JSON POST পাঠাব। 2xx রেসপন্স = সফল; না হলে ১ মিনিট → ১০ মিনিট ব্যবধানে সর্বোচ্চ ৩ বার আবার চেষ্টা হয়। টানা ১০ বার ব্যর্থ হলে webhook স্বয়ংক্রিয়ভাবে নিষ্ক্রিয় হয়ে যায়।
প্রতিটি ডেলিভারির কাঠামো (উদাহরণ):
{
"event": "link.created",
"created_at": "2026-07-18T09:30:00+00:00",
"data": {
"link": {
"id": 42, "slug": "promo", "short_url": "https://quik.mn/promo",
"long_url": "https://example.com/খুব/লম্বা/পথ", "title": "ঈদ ক্যাম্পেইন",
"clicks": 0, "active": true, "state": "ok",
"created_at": "2026-07-18 09:30:00", "expires_at": "2027-07-18 09:30:00"
}
}
}
সিগনেচার যাচাই
প্রতিটি ডেলিভারি এই হেডারগুলোসহ পৌঁছায়: X-Quik-Event (ইভেন্টের নাম), X-Quik-Signature — sha256=HMAC_SHA256(body, secret). Secret শুধু webhook তৈরির সময় একবারই দেখা যায়। সিগনেচার অবশ্যই কাঁচা (raw) body-র ওপর, কনস্ট্যান্ট-টাইম তুলনায় যাচাই করুন:
<?php
// PHP — সিগনেচার কাঁচা (raw) body-র ওপর যাচাই করুন
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_QUIK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('invalid signature');
}
$event = json_decode($payload, true);
// $event['event'], $event['data'] ...
http_response_code(200);
// Node.js (Express) — সিগনেচার কাঁচা (raw) body-র ওপর যাচাই করুন
const crypto = require('crypto');
app.post('/quik-webhook', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.get('X-Quik-Signature') || '';
const expected = 'sha256=' +
crypto.createHmac('sha256', secret).update(req.body).digest('hex');
const a = Buffer.from(expected), b = Buffer.from(signature);
if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
return res.status(401).send('invalid signature');
}
const event = JSON.parse(req.body); // event.event, event.data ...
res.sendStatus(200);
});
লিমিট: Free প্ল্যানে ১টি, Pro-তে ৩টি, Business-এ ১০টি webhook। Endpoint অবশ্যই সর্বসাধারণের নাগালের http/https ঠিকানা হতে হবে (অভ্যন্তরীণ নেটওয়ার্ক ঠিকানা নিষিদ্ধ)।