API डॉक्यूमेंटेशन
Quik.mn REST API के ज़रिए अपनी लिंक प्रोग्राम से बनाएँ, मैनेज करें और एनालिटिक्स लें।
सभी सेवाएँ
Quik.mn प्लैटफ़ॉर्म के सभी प्रोडक्ट — REST API और वेब पर।
बेस URL
सभी एंडपॉइंट नीचे दिए बेस URL से शुरू होते हैं:
प्रमाणीकरण
हर अनुरोध में अपने डैशबोर्ड से मिली API कुंजी को Authorization हेडर में भेजें:
अपनी कुंजी किसी को न दें। लीक हो जाए तो डैशबोर्ड से नई बना लें।
एंडपॉइंट सूची
पैरामीटर
POST /api/v1/links — बॉडी फ़ील्ड:
GET /api/v1/links — क्वेरी पैरामीटर:
एरर का फ़ॉर्मैट
हर एरर 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 हिस्से में एंडपॉइंट दर्ज करें, फिर चुना हुआ इवेंट होते ही हम आपके 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). सीक्रेट सिर्फ़ एक ही बार दिखता है — वेबहुक बनाते समय। सिग्नेचर की जाँच हमेशा कच्ची, बिना बदली बॉडी पर और कॉन्स्टेंट-टाइम तुलना से करें:
<?php
// PHP — कच्चे (raw) रिक्वेस्ट बॉडी पर सिग्नेचर सत्यापित करें
$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) रिक्वेस्ट बॉडी पर सिग्नेचर सत्यापित करें
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 वेबहुक। एंडपॉइंट ऐसा URL होना चाहिए जो सबके लिए खुला हो (निजी नेटवर्क के पते नहीं चलेंगे)।