API دستاویزات
Quik.mn کے REST API سے لنکس پروگرام کے ذریعے بنائیں، منظم کریں اور اعداد و شمار حاصل کریں۔
تمام سروسز
Quik.mn پلیٹ فارم کے تمام پروڈکٹس — REST API اور ویب دونوں پر۔
بنیادی ایڈریس
ہر endpoint اس بنیادی ایڈریس سے شروع ہوتا ہے:
توثیق
ہر درخواست میں ڈیش بورڈ سے حاصل کردہ اپنی API کلید Authorization ہیڈر میں بھیجیں:
اپنی کلید کسی کو نہ دیں۔ افشا ہو جائے تو ڈیش بورڈ سے نئی بنا لیں۔
Endpoint کی فہرست
پیرامیٹرز
POST /api/v1/links — body کے فیلڈز:
GET /api/v1/links — query پیرامیٹرز:
خرابی کا فارمیٹ
ہر خرابی HTTP اسٹیٹس کوڈ (401، 404، 409، 422، 429) اور یکساں JSON ساخت کے ساتھ آتی ہے:
{ "error": "alias_taken", "message": "یہ نام محفوظ (reserved) ہے یا پہلے سے استعمال میں ہے۔" }
عام کوڈز: 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 جواب = کامیاب؛ ورنہ 1 منٹ سے 10 منٹ تک بڑھتے وقفے سے 3 بار دوبارہ کوشش ہوتی ہے۔ لگاتار 10 ناکامیوں پر 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 پر اور constant-time موازنے سے کریں:
<?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 پلان 1، Pro 3، Business 10 webhook۔ endpoint عوامی طور پر قابلِ رسائی http/https ایڈریس ہونا چاہیے (اندرونی نیٹ ورک کے ایڈریس ممنوع ہیں)۔