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

API ডকুমেন্টেশন

Quik.mn REST API দিয়ে প্রোগ্রাম করে লিংক তৈরি করুন, ম্যানেজ করুন, স্ট্যাটিসটিক্স নামিয়ে নিন।

সব সার্ভিস

Quik.mn প্ল্যাটফর্মের সব প্রোডাক্ট — REST API ও ওয়েব দুই জায়গাতেই।

শর্ট লিংক
REST API
QR কোড
REST API
Email Counter
REST API
Countdown
REST API
Quik Bio
REST API
মেনু QR
REST API
ইমেইল সিগনেচার
REST API
UTM builder
ফ্রি টুল

বেস URL

সব endpoint শুরু হয় এই বেস URL থেকে:

https://quik.mn/api/v1

অথেনটিকেশন

প্রতিটি রিকোয়েস্টে ড্যাশবোর্ড থেকে নেওয়া API কী-টি Authorization হেডারে পাঠান:

Authorization: Bearer qk_live_...

কী কারও সাথে শেয়ার করবেন না। ফাঁস হয়ে গেলে ড্যাশবোর্ড থেকে নতুন করে তৈরি করুন।

Endpoint তালিকা

শর্ট লিংক
POST /api/v1/links নতুন শর্ট লিংক তৈরি করুন
GET /api/v1/links লিংকের তালিকা নিন
GET /api/v1/links/{id} একটি লিংকের তথ্য
PATCH /api/v1/links/{id} লিংক এডিট করুন
DELETE /api/v1/links/{id} লিংক মুছে ফেলুন
POST /api/v1/links/{id}/extend মেয়াদ বাড়ান — body: {"days": 365}
QR কোড
GET /api/v1/links/{id}/qr QR কোড নিন — ?format=png|svg&size=300&fg=241210&bg=FFFFFF
Email Counter
POST /api/v1/timers ইমেইল কাউন্টার তৈরি করুন — রেসপন্স: gif_url + embed_html
GET /api/v1/timers কাউন্টারের তালিকা
GET /api/v1/timers/{id} একটি কাউন্টারের তথ্য
PATCH /api/v1/timers/{id} কাউন্টার এডিট করুন
DELETE /api/v1/timers/{id} কাউন্টার মুছে ফেলুন
কাউন্টডাউন পেজ
POST /api/v1/countdowns কাউন্টডাউন পেজ তৈরি করুন — রেসপন্স: page_url
GET /api/v1/countdowns পেজের তালিকা
GET /api/v1/countdowns/{id} একটি পেজের তথ্য
PATCH /api/v1/countdowns/{id} পেজ এডিট করুন
DELETE /api/v1/countdowns/{id} পেজ মুছে ফেলুন
Quik Bio
POST /api/v1/bio-pages Bio পেজ তৈরি করুন — রেসপন্স: page_url (অ্যাভাটার শুধু ওয়েব থেকে)
GET /api/v1/bio-pages Bio পেজের তালিকা
GET /api/v1/bio-pages/{id} একটি bio পেজ — লিংকসহ
PATCH /api/v1/bio-pages/{id} Bio পেজ এডিট করুন
DELETE /api/v1/bio-pages/{id} Bio পেজ মুছে ফেলুন
GET /api/v1/bio-pages/{id}/stats Bio স্ট্যাটিসটিক্স — ভিউ ও ক্লিক
GET /api/v1/bio-pages/{id}/links Bio লিংকের তালিকা
POST /api/v1/bio-pages/{id}/links Bio লিংক যোগ করুন
PATCH /api/v1/bio-pages/{id}/links/{lid} Bio লিংক এডিট করুন
DELETE /api/v1/bio-pages/{id}/links/{lid} Bio লিংক মুছে ফেলুন
মেনু QR
POST /api/v1/menus মেনু তৈরি করুন — রেসপন্স: page_url
GET /api/v1/menus মেনুর তালিকা
GET /api/v1/menus/{id} একটি মেনু — খাবারসহ
PATCH /api/v1/menus/{id} মেনু এডিট করুন
DELETE /api/v1/menus/{id} মেনু মুছে ফেলুন
GET /api/v1/menus/{id}/stats স্ক্যান স্ট্যাটিসটিক্স — মোট, ৩০ দিন, টেবিল অনুযায়ী
GET /api/v1/menus/{id}/items খাবারের তালিকা
POST /api/v1/menus/{id}/items খাবার যোগ করুন — ছবি শুধু ওয়েব থেকে
PATCH /api/v1/menus/{id}/items/{iid} খাবার এডিট করুন
DELETE /api/v1/menus/{id}/items/{iid} খাবার মুছে ফেলুন
ইমেইল সিগনেচার
POST /api/v1/signatures সিগনেচার তৈরি করুন — লোগো শুধু URL আকারে
GET /api/v1/signatures সিগনেচারের তালিকা
GET /api/v1/signatures/{id} একটি সিগনেচার — signature_html সহ
PATCH /api/v1/signatures/{id} সিগনেচার এডিট করুন
DELETE /api/v1/signatures/{id} সিগনেচার মুছে ফেলুন
অ্যাকাউন্ট
GET /api/v1/me বর্তমান অ্যাকাউন্টের তথ্য

প্যারামিটার

POST /api/v1/links — body ফিল্ড:

url required গন্তব্যের লম্বা ঠিকানা (http/https)।
alias optional কাস্টম শর্ট নাম (অক্ষর, সংখ্যা, - ও _; 1–64 অক্ষর)। «slug» নামে পাঠালেও বুঝে নেয়।
title optional টাইটেল (সর্বোচ্চ 200 অক্ষর)।
expires_at optional মেয়াদ শেষের সময় — ভবিষ্যতের তারিখ (যেমন 2026-12-31 23:59:59)। সর্বোচ্চ ১ বছর; না দিলে ১ বছর। PATCH-এ null পাঠালে আবার ১ বছরে সেট হয়।
expire_days optional অথবা দিনে: 1/7/30/90/180/365। expires_at-এর চেয়ে সহজ।
starts_at optional সক্রিয় হওয়ার সময় — UTC তারিখ (যেমন 2026-08-01 02:00:00)। নির্ধারিত সময় পর্যন্ত ভিজিটররা একটি কাউন্টডাউন দেখবেন; এটি expires_at-এর আগে হতে হবে। PATCH-এ null পাঠালে সাথে সাথে সক্রিয় হয়।
on_duplicate optional একই ঠিকানায় সক্রিয় লিংক থাকলে: "reuse" (ডিফল্ট — পুরনোটি ফেরত আসে, reused:true ফিল্ডসহ) অথবা "create" (নতুন তৈরি হয়)। Alias দিলে সবসময় নতুন তৈরি হয়।

GET /api/v1/links — query প্যারামিটার:

limit প্রতি পেজে কয়টি ফেরত আসবে (1–100, ডিফল্ট 25)।
offset কয়টি সারি বাদ যাবে (পেজিনেশন)।
q সার্চ — slug, টাইটেল ও লম্বা ঠিকানায় খোঁজে।

এরর ফরম্যাট

প্রতিটি এরর একটি 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).

লিমিট

প্রতিটি API কী-তে মিনিটে ৬০ রিকোয়েস্ট
সীমা ছাড়ালে 429 rate_limited রেসপন্স আসবে — একটু অপেক্ষা করে আবার চেষ্টা করুন।

নমুনা রিকোয়েস্ট

শর্ট লিংক তৈরির 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 স্বয়ংক্রিয়ভাবে নিষ্ক্রিয় হয়ে যায়।

link.created নতুন শর্ট লিংক তৈরি হলে (ওয়েব + API)
link.deleted লিংক মুছে ফেলা হলে
link.expired লিংকের মেয়াদ/লিমিট শেষ হলে (প্রতিদিনের চেকে)
link.clicks.milestone ক্লিক 100 / 1,000 / 10,000 সীমা পার হলে — payload-এ milestone ফিল্ড আসে
timer.expired ইমেইল কাউন্টার শেষ হলে
countdown.expired কাউন্টডাউন পেজ শেষ হলে
webhook.ping «টেস্ট করুন» বোতামে পাঠানো পরীক্ষামূলক ইভেন্ট

প্রতিটি ডেলিভারির কাঠামো (উদাহরণ):

{
  "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-Signaturesha256=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 ঠিকানা হতে হবে (অভ্যন্তরীণ নেটওয়ার্ক ঠিকানা নিষিদ্ধ)।

আপনার API কী নিয়ে নিন
ড্যাশবোর্ডের API সেকশন থেকে কী তৈরি করে এখনই শুরু করুন।
API কী নিন