इंटीग्रेशन रेसिपी
चार पैटर्न हमें दिखने वाले लगभग हर इंटीग्रेशन को कवर कर लेते हैं। हर एक कुछ ही कॉल का है, और इन्हें आपस में जोड़ा जा सकता है।
छपे हुए कोड को दोबारा लक्षित करें
ज़्यादातर टीमें API तक इसी वजह से पहुँचती हैं। पैकेजिंग, स्टिकर या पोस्टर पर लगा कोड चलता रहता है, जबकि उसके पीछे की कैंपेन बदल जाती है।
curl -X POST https://api.mosaqo.app/v1/public-api/qr/$QR_ID/destination \
-H "Authorization: Bearer $MOSAQO_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/winter" }'प्रकाशित कोड पर यह तुरंत लागू होता है — दोबारा प्रकाशित करने का कोई चरण नहीं है — और रिस्पॉन्स बताता है कि कोड live है या अब भी ड्राफ़्ट।
CRM रिकॉर्ड से QR जोड़ें
रिकॉर्ड के अपने URL से कोड बनाएँ, उसे प्रकाशित करें, फिर इमेज सीधे किसी फ़ाइल फ़ील्ड में खींच लें। इमेज endpoint बाइट इनलाइन लौटाता है, इसलिए ज़्यादातर CRM इसे बिना बीच के अपलोड के अटैचमेंट की तरह स्वीकार कर लेते हैं।
const headers = { Authorization: `Bearer ${process.env.MOSAQO_KEY}` };
const created = await fetch('https://api.mosaqo.app/v1/public-api/qr', {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
name: `Deal ${deal.id}`,
mode: 'dynamic',
contentType: 'url',
content: { targetUrl: `https://crm.example.com/deals/${deal.id}` },
}),
}).then((r) => r.json());
const qrId = created.data.id;
await fetch(`https://api.mosaqo.app/v1/public-api/qr/${qrId}/publish`, { method: 'POST', headers });
const png = await fetch(
`https://api.mosaqo.app/v1/public-api/qr/${qrId}/image?format=png&size=1024`,
{ headers },
).then((r) => r.arrayBuffer());अपने रिकॉर्ड पर qrId सहेजें। आगे की हर चीज़ की चाबी यही है — दोबारा लक्षित करना, आर्काइव करना, एनालिटिक्स।
थोक में कोड जारी करें
हर प्रोडक्ट, हर टेबल, हर एसेट के लिए एक कोड। एक CSV भेजें, जॉब को पोल करें, फिर परिणामों को अपनी पंक्तियों पर वापस मैप करें — हर पंक्ति के साथ वह qrId आता है जो उसने बनाया।
curl -X POST https://api.mosaqo.app/v1/public-api/bulk \
-H "Authorization: Bearer $MOSAQO_KEY" \
-H "Content-Type: application/json" \
-d '{
"contentType": "url",
"mode": "dynamic",
"csv": "name,destination\nTable 1,https://example.com/menu?t=1\nTable 2,https://example.com/menu?t=2"
}'
curl "https://api.mosaqo.app/v1/public-api/bulk/$JOB_ID?limit=500" \
-H "Authorization: Bearer $MOSAQO_KEY"पहले "dryRun": true भेजें ताकि बिना कुछ लिखे हर पंक्ति की जाँच हो जाए।
URL से इमेज एम्बेड करें
Airtable, Notion और Sheets ऐसे लिंक से तस्वीर दिखाते हैं जिसे वे खुद लाते हैं, इसलिए वे आपका Authorization हेडर कभी नहीं भेजते और ऊपर वाला endpoint इस्तेमाल नहीं कर सकते। इसके बजाय हस्ताक्षरित लिंक माँगें:
curl -X POST https://api.mosaqo.app/v1/public-api/qr/$QR_ID/image-url \
-H "Authorization: Bearer $MOSAQO_KEY" \
-H "Content-Type: application/json" \
-d '{ "format": "png", "size": 1024 }'सिर्फ़ प्रकाशित कोड ही योग्य हैं — प्रकाशित कोड पहले ही छप चुका है और दुनिया में है, जबकि ड्राफ़्ट कोई अघोषित कैंपेन हो सकता है। लौटाया गया url सीधे किसी अटैचमेंट या इमेज फ़ील्ड में डाल दें। कोड आर्काइव या डिलीट करते ही लिंक काम करना बंद कर देता है — जो कोड सोचे से कहीं ज़्यादा फैल गया हो, उसे इसी तरह रद्द किया जाता है।
स्कैन पर प्रतिक्रिया दें
स्कैन कभी पुश नहीं किए जाते: प्रति-स्कैन कोई webhook नहीं है, और हम स्कैन-स्तर की एनालिटिक्स तीसरे पक्ष के endpoint पर नहीं भेजते। अगर रोलअप काफ़ी है तो scan.aggregate_ready की सदस्यता लें, या तय समय पर अलग-अलग स्कैन खुद लाएँ:
curl "https://api.mosaqo.app/v1/public-api/scans?since=$LAST_SEEN&limit=500" \
-H "Authorization: Bearer $MOSAQO_KEY"लौटाया गया pagination.nextCursor रखें और अगली बार वापस भेजें। क्रम स्थिर है, इसलिए पोलर न कोई स्कैन दोबारा पढ़ता है न छोड़ता है। कौन-से फ़ील्ड दिखेंगे, यह आपके workspace की एनालिटिक्स गोपनीयता सेटिंग पर निर्भर करता है — रिस्पॉन्स में allowedDimensions सूचीबद्ध होते हैं ताकि आपको पता रहे कि क्या उम्मीद करनी है।
अगर पोलिंग आपके लिए वाकई व्यावहारिक नहीं है और आपको स्कैन उसी समय चाहिए जब वे होते हैं, तो यह डिफ़ॉल्ट रूप से नहीं, बल्कि अनुरोध पर उपलब्ध है।
नो-कोड प्लेटफ़ॉर्म
Make, Zapier, n8n और Pipedream आज भी एक सामान्य HTTP मॉड्यूल से Mosaqo से बात कर सकते हैं, और उन्हें जो चाहिए वह मौजूद है: कनेक्शन टेस्ट के लिए GET /me, इटरेटर के लिए cursor पेजिनेशन, और ऐसे webhook सब्सक्रिप्शन जिन्हें ट्रिगर खुद बना और हटा सकता है।
| वे क्या माँगते हैं | क्या इस्तेमाल करें |
|---|---|
| बेस URL | https://api.mosaqo.app/v1/public-api |
| ऑथ हेडर | Authorization: Bearer <your key> |
| कनेक्शन टेस्ट | GET /me |
| OpenAPI इम्पोर्ट | https://api.mosaqo.app/v1/public-api/openapi.json |
| इंस्टेंट ट्रिगर | सक्रिय करने पर POST /webhooks, निष्क्रिय करने पर DELETE /webhooks/{id} |
| पोलिंग ट्रिगर | GET /qr?updatedSince=…&cursor=… |
यही OpenAPI दस्तावेज़ Postman और Insomnia में इम्पोर्ट होता है, और openapi-typescript या किसी भी OpenAPI जेनरेटर से टाइप्ड क्लाइंट बना देता है।
दो नियम जिन्हें मानना चाहिए
- `qrId` सहेजें, सार्वजनिक URL नहीं। URL स्थिर है, पर आगे की हर कॉल को id ही चाहिए।
- डिलीट करने के बजाय आर्काइव करें। डिलीट करना स्थायी है और हर छपी हुई कॉपी तोड़ देता है; आर्काइव करना कोड को ऑफ़लाइन ले जाता है और इसे पलटा जा सकता है।
हर endpoint का पूरा विवरण API रेफ़रेंस में है।