QRFLOW.codes
आधिकारिकQR कोड बनाएं, मुद्रित डायनामिक कोड को पुनः निर्देशित करें, अपने स्वयं के डोमेन पर लिंक नाम दें, और स्कैन एनालिटिक्स पढ़ें।
QRFLOW Codes MCP के साथ आप क्या कर सकते हैं?
- डायनामिक QR कोड बनाएं — किसी भी URL के लिए एक प्रिंट करने योग्य
short_urlजनरेट करने को कहें, जिसका गंतव्य प्रिंटिंग के बाद कभी भी बदला जा सके। - प्रिंट किए गए कोड को रीपॉइंट करें — किसी कोड के
destination_dataको नए URL में अपडेट करने का अनुरोध करें; मौजूदा प्रिंट किए गए कोड बिना दोबारा प्रिंट किए काम करते रहते हैं। - स्कैन एनालिटिक्स प्राप्त करें — दिन, देश या डिवाइस के अनुसार
Scansका विवरण मांगें ताकि पता चले कि प्रिंट किया गया कोड कैसा प्रदर्शन कर रहा है। - कोड रोकें या समाप्त करें — किसी कैंपेन या ऑफर के समाप्त होने पर कोड को रोकने या समाप्ति तिथि निर्धारित करने का निर्देश दें।
- अपने डोमेन पर लिंक नाम दें — अपने डोमेन पर एक पठनीय
slugसेट करने का अनुरोध करें ताकि कोड go.yourbrand.com/menu के रूप में प्रिंट हों, न कि किसी यादृच्छिक पथ के रूप में।
होस्ट किया गया MCP सर्वर
npx add-mcp 'https://qrflow.codes/mcp'Claude Code, Codex, Cursor और अन्य में इंस्टॉल होता है
दस्तावेज़
QRFLOW.codes डेवलपर्स के लिए
यहाँ से शुरू करें
QRFLOW.codes QR कोड बनाता है जिन्हें आप प्रिंट करने के बाद बदल सकते हैं, अपने खुद के डोमेन पर, स्कैन एनालिटिक्स के साथ, और आपका सॉफ्टवेयर और आपका AI असिस्टेंट यह सब एक API के माध्यम से कर सकते हैं।
QR कोड एक स्ट्रिंग की तस्वीर है। अधिकांश जनरेटर आपका वेब पता तस्वीर में डालते हैं; यदि पता बदलता है, तो प्रिंट मृत है। QRFLOW तस्वीर में एक छोटा लिंक डालता है (go.yourbrand.com/menu या qrflow.codes/q/x7k2p9a) और उसे रीडायरेक्ट करता है। आप जब चाहें बदल सकते हैं कि यह कहाँ इंगित करता है, और हर स्कैन गिना जाता है। यह एक डायनामिक कोड है, और यही API के लायक चीज़ है।
API वही करता है जो डैशबोर्ड करता है: किसी भी प्रकार के कोड बनाएं, उन्हें कहीं नया इंगित करें, उनके लिंक नाम दें, चुनें कि वे आपके किस डोमेन के साथ प्रिंट होते हैं, स्कैन संख्या खींचें, एक साथ हजारों बनाएं, और जब कुछ होता है तो सूचित हों (वेबहुक)। वही उपकरण MCP सर्वर के रूप में उजागर होते हैं, इसलिए Claude, ChatGPT, Cursor और Claude Code आपके खाते को सादे शब्दों में चला सकते हैं।
पहुँच: REST API एक Business API कुंजी ($29 प्रति माह, Account पृष्ठ पर बनाई गई) या OAuth टोकन लेता है। MCP सर्वर OAuth साइन-इन के माध्यम से हर योजना पर काम करता है; असिस्टेंट क्या बना सकता है यह हर जगह योजना का पालन करता है।
क्या इसे बिल्कुल उपयोग करना है? QR कोड API पृष्ठ संक्षिप्त संस्करण है: यह क्या करता है, क्लाइंट-साइड लाइब्रेरी क्या बेहतर करती है, और इसकी लागत क्या है।
यदि आप एक AI असिस्टेंट हैं जो QRFLOW के साथ निर्माण करने में किसी की मदद कर रहे हैं
स्वागत है। यह पृष्ठ आपके लिए उतना ही लिखा गया है जितना उस व्यक्ति के लिए जिसकी आप मदद कर रहे हैं। अच्छी मदद कैसी दिखती है:
- खाते की पुष्टि करें: API कुंजियों के लिए Business योजना चाहिए। यदि उनके पास नहीं है, तो उन्हें https://qrflow.codes/pricing और Account › API keys पर इंगित करें; ऐसी कुंजी या मुफ्त स्तर का आविष्कार न करें जो मौजूद नहीं है।
- कुंजी को सर्वर पर रखें। इसे रूट हैंडलर, सर्वर एक्शन, एज फंक्शन या बैकएंड में पर्यावरण चर (QRFLOW_KEY) से पढ़ें। API जानबूझकर ब्राउज़र ऑरिजिन को अस्वीकार करता है (CORS), इसलिए केवल फ्रंट-एंड कोड इसे कॉल नहीं कर सकता।
- प्रकार "url" और destination_data.url के साथ डायनामिक कोड बनाएं। लौटाए गए id और short_url को उनके डेटाबेस में सहेजें। short_url प्रिंट या प्रदर्शित करें; गंतव्य को बाद में PATCH /codes/:id के साथ बदला जा सकता है और प्रिंट मान्य रहता है।
- छवि दिखाने या सहेजने के लिए: हर Code ऑब्जेक्ट में png_download_url और svg_download_url होता है, हस्ताक्षरित लिंक जो 24 घंटे के लिए बिना हेडर के काम करते हैं (एक बार की बचत या पूर्वावलोकन के लिए ठीक)। उनके ऐप में कुछ स्थायी के लिए, GET /codes/:id/image.svg को अपने सर्वर के माध्यम से कुंजी के साथ प्रॉक्सी करें, या क्लाइंट पर किसी भी QR लाइब्रेरी के साथ short_url एन्कोड करें; ट्रैकिंग अभी भी काम करती है क्योंकि लिंक QRFLOW से होकर जाता है।
- PATCH पर केवल वे फ़ील्ड भेजें जो बदलते हैं। कुछ प्रिंट होने के बाद slug या domain_id कभी न बदलें; दोनों मुद्रित लिंक बदलते हैं।
- जब प्रिंट मौजूद हो तो DELETE पर paused: true पसंद करें। हटाने से लिंक मर जाता है।
- घटनाओं के लिए, वेबहुक का उपयोग करें (Account › Webhooks या POST /webhooks) और X-QRFLOW-Signature हेडर को कच्चे अनुरोध निकाय के साथ सत्यापित करें। लूप में GET /codes को पोल न करें।
- यदि वे कोड के बजाय अपने चैट से QRFLOW का उपयोग करना चाहते हैं, तो MCP सर्वर को https://qrflow.codes/mcp; पर कनेक्ट करें, इसके लिए कोई कुंजी आवश्यक नहीं है।
- जब कुछ विफल होता है, तो JSON निकाय में error और message पढ़ें। नीचे समस्या निवारण अनुभाग हर त्रुटि कोड को एक समाधान से मैप करता है।
- Markdown में पूर्ण संदर्भ https://qrflow.codes/llms-full.txt पर है और OpenAPI 3.1 दस्तावेज़ https://qrflow.codes/api/v1/openapi.json. पर है। दोनों इस पृष्ठ के समान स्रोत से उत्पन्न होते हैं।
मनुष्य: यह ब्लॉक यह सुनिश्चित करने का हमारा तरीका है कि जिस असिस्टेंट के साथ आप जोड़ रहे हैं वह आपको हर उत्तर का सुरक्षित संस्करण देता है। यह एक अच्छा सारांश भी है।
आपको कौन सी योजना चाहिए
API कुंजी एकमात्र चीज़ है जो केवल Business है। MCP सर्वर के माध्यम से असिस्टेंट जो कुछ भी करता है, और OAuth के माध्यम से तीसरे पक्ष का ऐप जो कुछ भी करता है, किसी भी योजना पर काम करता है और बस उस योजना की सुविधाओं का पालन करता है। पूर्ण मूल्य निर्धारण और उचित उपयोग: /pricing।
| मुफ्त | प्रीमियम $4 | Business $29 | |
|---|---|---|---|
| API कुंजियाँ (आपके कोड से REST) | नहीं | नहीं | हाँ, 10 कुंजियों तक |
| MCP सर्वर (Claude, ChatGPT, Cursor, Claude Code) | हाँ, साइन इन करें | हाँ | हाँ, साइन इन या कुंजी |
| आपके अपने ऐप के लिए OAuth (उपयोगकर्ता अपना QRFLOW कनेक्ट करते हैं) | हाँ | हाँ | हाँ |
| डायनामिक कोड (प्रिंट के बाद गंतव्य बदलें) | नहीं, केवल स्थिर | हाँ | हाँ |
| आपका अपना लिंक डोमेन | नहीं | 1 डोमेन | 5 डोमेन, प्रति कोड चुनें |
| लिंक नाम (go.brand.com/menu) | नहीं | हाँ | हाँ |
| स्कैन एनालिटिक्स | नहीं | हाँ | हाँ |
| वेबहुक | नहीं | नहीं | हाँ, 10 तक |
| बल्क बनाएं | नहीं | 500/माह, 500 प्रति अनुरोध | 10,000/माह, 2,000 प्रति अनुरोध |
| सहेजे गए कोड (उचित उपयोग) | मुट्ठी भर | 1,000 | 25,000 |
| टीम सीटें | 1 | 1 | 5 |
| मूल्य | $0 | $4/माह | $29/माह |
बारह शब्द जो सारा काम करते हैं
अवधारणाएँ
इन्हें एक बार पढ़ें और नीचे हर एंडपॉइंट समझ में आएगा।
Static code
सामग्री तस्वीर के अंदर है। वाई-फाई, संपर्क कार्ड (vCard) और सादा पाठ कोड हमेशा स्थिर होते हैं, और मुफ्त योजना पर हर कोड है। एक स्थिर कोड को किसी सर्वर की आवश्यकता नहीं होती और कभी समाप्त नहीं होता, और इसे बदला या गिना नहीं जा सकता।
Dynamic code
तस्वीर में एक छोटा लिंक होता है जिसे QRFLOW रीडायरेक्ट करता है। url, phone, email, sms और location कोड प्रीमियम और Business पर डायनामिक हैं। आप प्रिंट को छुए बिना उन्हें फिर से इंगित, रोक, समाप्त, नाम और गिन सकते हैं।
short_url
डायनामिक कोड में एन्कोड किया गया सटीक स्ट्रिंग, और प्रिंट करने योग्य चीज़। यह https://qrflow.codes/q/<short_code> है जब तक आप एक डोमेन कनेक्ट नहीं करते, फिर https://<your domain>/<slug or short_code>. हर Code ऑब्जेक्ट इसे ले जाता है।
short_code
सात यादृच्छिक वर्ण, प्रति कोड अद्वितीय, निर्माण पर निर्दिष्ट और कभी नहीं बदले जाते। जब कोड में लिंक नाम नहीं होता तो फ़ॉलबैक पथ।
slug (link name)
आपके अपने डोमेन पर एक पठनीय पथ: go.example.com/menu। 3 से 40 लोअरकेस अक्षर, अंक और डैश, आपके खाते के भीतर अद्वितीय, केवल कनेक्टेड डोमेन के साथ। प्रिंट से पहले इसे सेट करें: इसे बदलने से मुद्रित लिंक बदल जाता है।
Link domain
एक होस्टनाम जो आपके पास है (go.example.com) CNAME द्वारा QRFLOW पर इंगित और Account पृष्ठ पर सत्यापित। प्रीमियम को एक मिलता है; Business को पाँच मिलते हैं और domain_id के साथ प्रति कोड चुन सकते हैं। सबसे पुराना लाइव डोमेन डिफ़ॉल्ट है।
Kind, type and subtype
type एन्कोडिंग है: url, text, wifi, vcard, email, phone, sms, location। एक kind लोगों की चाहत के लिए एक दोस्ताना नाम है (instagram, googlereview, whatsapp, pdf, menu, appstore,...)। अधिकांश kinds url कोड हैं जिनमें destination_data.subtype सेट है। GET /catalog हर kind को उसके फ़ील्ड के साथ सूचीबद्ध करता है; Code पर kind आपको बताता है कि यह कौन सा है।
destination_data
प्रकार के लिए फ़ील्ड, स्ट्रिंग के रूप में: वेबसाइट के लिए { url }, वाई-फाई के लिए { ssid, password, encryption }, Google समीक्षा के लिए { placeId }, Instagram के लिए { handle }। डायनामिक कोड पर आप इसे किसी भी समय बदल सकते हैं।
Scans
प्रत्येक रीडायरेक्ट अनुरोध से डिवाइस प्रकार, देश, शहर, रेफरर, ब्राउज़र, OS और भाषा रिकॉर्ड करता है, साथ ही अद्वितीय आगंतुकों की गिनती के लिए एक-तरफ़ा दैनिक हैश। कोई कुकीज़ सेट नहीं होतीं और IP पता संग्रहीत नहीं होता। Code पर scans आजीवन कुल है; GET /codes/:id/scans इसे तोड़ता है।
Source
हर कोड याद रखता है कि उसे किसने बनाया: dashboard, api:<key name>, mcp, canva या bulk। यह डैशबोर्ड और वेबहुक पेलोड में दिखता है, ताकि आप अपने एकीकरण के कोड को हाथ से बने कोड से बता सकें।
Workspace
एक Business मालिक चार टीम के सदस्यों तक आमंत्रित कर सकता है। कुंजियाँ और वेबहुक मालिक के खाते से संबंधित हैं; कार्यक्षेत्र में किसी के द्वारा बनाए गए कोड पूरी टीम को दिखाई देते हैं।
पाँच मिनट
त्वरित शुरुआत
एक कुंजी प्राप्त करें
- Business योजना पर, Account › API keys खोलें।
- इसे उस चीज़ के नाम पर रखें जिसके लिए यह है ("Shop backend", "Reporting") और इसके स्कोप चुनें। स्कोप बाद में नहीं बदले जा सकते; यदि आपको अधिक चाहिए तो नई कुंजी बनाएं।
- इसे एक बार कॉपी करें। यह
qrf_live_…जैसा दिखता है। इसेQRFLOW_KEYनामक पर्यावरण चर में रखें। - इसे हर अनुरोध पर
Authorization: Bearer $QRFLOW_KEYके रूप में भेजें। यह पूरी प्रमाणीकरण कहानी है।
कुंजियाँ सर्वर के लिए हैं। कभी भी एक को वेब पेज, मोबाइल ऐप या साझा स्प्रेडशीट में न रखें; यदि एक लीक हो तो रद्द करें और फिर से जारी करें।
curl, TypeScript और Python में समान पाँच चरण। प्रत्येक एक डायनामिक कोड बनाता है, उसकी छवि डाउनलोड करता है, बदलता है कि यह कहाँ इंगित करता है, और उसके स्कैन पढ़ता है।
export QRFLOW_KEY=qrf_live_... # from Account › API keys
# 1. Who am I, what can this key do?
curl https://qrflow.codes/api/v1/me -H "Authorization: Bearer $QRFLOW_KEY"
# 2. Make a dynamic code. Print what comes back as short_url.
curl -X POST https://qrflow.codes/api/v1/codes \
-H "Authorization: Bearer $QRFLOW_KEY" -H "Content-Type: application/json" \
-d '{ "type": "url", "destination_data": { "url": "https://example.com/menu" }, "label": "Table tents" }'
# 3. The print-ready image (SVG, with your colors and frame).
curl "https://qrflow.codes/api/v1/codes/$CODE_ID/image.svg?size=1024" \
-H "Authorization: Bearer $QRFLOW_KEY" -o menu.svg
# 4. Fall menu. The printed code keeps working.
curl -X PATCH https://qrflow.codes/api/v1/codes/$CODE_ID \
-H "Authorization: Bearer $QRFLOW_KEY" -H "Content-Type: application/json" \
-d '{ "destination_data": { "url": "https://example.com/menu-fall" } }'
# 5. How did it do?
curl "https://qrflow.codes/api/v1/codes/$CODE_ID/scans?group=day" -H "Authorization: Bearer $QRFLOW_KEY"
TypeScript (Node 18+, Bun, Deno, Workers)
// npm install qrflow (zero dependencies; ESM + CommonJS; full types)
import { QRFlow, QRFlowError } from "qrflow";
const qr = new QRFlow(process.env.QRFLOW_KEY!);
const { code } = await qr.createCode({
type: "url",
destination_data: { url: "https://example.com/menu" },
label: "Table tents",
});
console.log(code.id, code.short_url); // save both; print short_url
await qr.updateCode(code.id, { destination_data: { url: "https://example.com/menu-fall" } });
const stats = await qr.scans(code.id, { group: "day" });
console.log(stats.total, stats.rows); // [{ key: "2026-09-21", scans: 18 }, ...]
try {
await qr.updateCode(code.id, { slug: "menu" });
} catch (e) {
if (e instanceof QRFlowError) console.log(e.status, e.code, e.message); // 400 no_domain: connect a domain first
}
# Download https://qrflow.codes/sdk/qrflow.py next to your code.
import os
from qrflow import QRFlow, QRFlowError
qr = QRFlow(os.environ["QRFLOW_KEY"])
code = qr.create_code(type="url", destination_data={"url": "https://example.com/menu"}, label="Table tents")["code"]
print(code["id"], code["short_url"]) # save both; print short_url
qr.update_code(code["id"], destination_data={"url": "https://example.com/menu-fall"})
stats = qr.scans(code["id"], group="day")
print(stats["total"], stats["rows"])
try:
qr.update_code(code["id"], slug="menu")
except QRFlowError as e:
print(e.status, e.code, e) # 400 no_domain: connect a domain first
प्रमाणीकरण
API कुंजियाँ (Business)
प्रति खाता 10 तक, प्रति मिनट 600 अनुरोध, हैश किए गए संग्रहीत, एक बार दिखाए गए। एक कुंजी उन स्कोपों को ले जाती है जिनके साथ इसे बनाया गया था:
| स्कोप | अनुमति देता है |
|---|---|
| profile | GET /me: योजना, सुविधाएँ, सीमाएँ। हर कुंजी के पास है। |
| codes:read | कोड सूचीबद्ध और पढ़ें, छवियाँ डाउनलोड करें। |
| codes:write | बनाएं, बदलें, डायनामिक बनाएं, हटाएं, बल्क बनाएं। |
| analytics:read | GET /codes/:id/scans। |
| domains:read | GET /domains (domain_id का समझदारी से उपयोग करने के लिए आवश्यक)। |
| webhooks:manage | वेबहुक सूचीबद्ध, बनाएं, परीक्षण और हटाएं। |
OAuth 2.0 (कोई भी योजना, ऐप्स और असिस्टेंट के लिए)
जब कोड आपके उपयोगकर्ताओं के खातों से संबंधित होने चाहिए न कि आपके, या जब एक चैट असिस्टेंट क्लाइंट है, तो OAuth का उपयोग करें। क्लाइंट स्वयं पंजीकृत होते हैं; सार्वजनिक क्लाइंट के लिए PKCE S256 आवश्यक है; टोकन resource= के साथ MCP सर्वर से बंधे हो सकते हैं। OAuth रेसिपी इसके माध्यम से चलती है।
| एंडपॉइंट | URL | नोट्स |
|---|---|---|
| प्राधिकरण | https://qrflow.codes/oauth/authorize | उपयोगकर्ता को यहाँ भेजें; वे साइन इन करते हैं और Allow दबाते हैं। |
| टोकन | https://qrflow.codes/api/oauth/token | authorization_code और refresh_token अनुदान। एक्सेस टोकन 1 घंटे, रीफ्रेश टोकन 90 दिन। |
| रद्द करें | https://qrflow.codes/api/oauth/revoke | RFC 7009। उपयोगकर्ता Account › Connected apps पर भी डिस्कनेक्ट कर सकते हैं। |
| क्लाइंट पंजीकृत करें | https://qrflow.codes/api/oauth/register | RFC 7591 गतिशील पंजीकरण, कोई खाता आवश्यक नहीं। सार्वजनिक क्लाइंट को dyn_ client_id मिलता है और PKCE S256 का उपयोग करना चाहिए। |
| खोज | https://qrflow.codes/.well-known/oauth-authorization-server | RFC 8414। MCP संसाधन दस्तावेज़ /.well-known/oauth-protected-resource पर है। |
एक्सेस टोकन 1 घंटे, रीफ्रेश टोकन 90 दिन। उपयोगकर्ता Account › Connected apps पर कनेक्टेड ऐप्स देखते हैं और किसी भी समय डिस्कनेक्ट कर सकते हैं। https://qrflow.codes/mcp के लिए बनाया गया टोकन /api/v1 पर अस्वीकार कर दिया जाता है, और दूसरे तरीके से भी।
वे चीज़ें जो लोग वास्तव में माँगते हैं
निर्माण रेसिपी
प्रत्येक रेसिपी पूर्ण है और काम करने वाले कोड से सीधे कॉपी की गई है। अपने स्टैक से मेल खाने वाला चुनें; आकार हमेशा समान होता है: कुंजी के साथ सर्वर-साइड कॉल, id और short_url सहेजें, छवि दिखाएं।
- Next.js
- प्रॉक्सी किए बिना QR दिखाएं
- Express या कोई भी Node सर्वर
- Cloudflare Workers, Vercel Edge, Deno Deploy, Supabase Edge Functions
- Python
- प्रति ऑर्डर, टेबल, उत्पाद, टिकट या इवेंट एक QR कोड
- बदलें कि एक मुद्रित कोड कहाँ जाता है
- अपने खुद के डोमेन पर कोड प्रिंट करें
- अपने खुद के एडमिन में एक स्कैन चार्ट
- Next.js में वेबहुक प्राप्त करें और सत्यापित करें
- Python में वेबहुक प्राप्त करें
- CSV से हजारों कोड
- अपने उपयोगकर्ताओं को अपना खुद का QRFLOW खाता कनेक्ट करने दें (OAuth)
- Zapier, Make, n8n
Next.js: एक रूट जो कोड बनाता है और एक रूट जो उसे दिखाता है
कब: आपके पास एक Next.js ऐप (App Router) है और एक बटन चाहते हैं जो QR कोड बनाता है और एक पृष्ठ जो उसे प्रदर्शित करता है।
- अपनी कुंजी .env.local में QRFLOW_KEY के रूप में रखें। इसे कभी NEXT_PUBLIC_ से उपसर्ग न करें।
- एक POST रूट हैंडलर जोड़ें जो कोड बनाता है और id और short_url लौटाता है।
- एक GET रूट जोड़ें जो छवि को प्रॉक्सी करता है ताकि ब्राउज़र कभी कुंजी न देखे।
- id और short_url को अपने खुद के रिकॉर्ड (ऑर्डर, टेबल, उत्पाद, इवेंट) पर संग्रहीत करें।
import { NextResponse } from "next/server";
export async function POST(req: Request) {
const { url, label } = await req.json();
const r = await fetch("https://qrflow.codes/api/v1/codes", {
method: "POST",
headers: { Authorization: \`Bearer ${process.env.QRFLOW_KEY}\`, "Content-Type": "application/json" },
body: JSON.stringify({ type: "url", destination_data: { url }, label }),
});
const data = await r.json();
if (!r.ok) return NextResponse.json(data, { status: r.status }); // { error, message }
return NextResponse.json({ id: data.code.id, short_url: data.code.short_url });
}
// Proxies the SVG so the key stays on the server. Check that the signed-in
// user owns this id before you serve it, or anyone with an id can fetch it.
export async function GET(_: Request, { params }: { params: Promise<{ id: string }> }) {
const { id } = await params;
const r = await fetch(\`https://qrflow.codes/api/v1/codes/${id}/image.svg?size=1024\`, {
headers: { Authorization: \`Bearer ${process.env.QRFLOW_KEY}\` },
});
return new Response(r.body, {
status: r.status,
headers: { "Content-Type": "image/svg+xml", "Cache-Control": "private, max-age=3600" },
});
}
<img src={\`/api/qr/${code.id}/image\`} alt={\`QR code for ${code.label}\`} width={256} height={256} />
<a href={code.short_url}>{code.short_url}</a>
- सर्वर एक्शन उसी तरह काम करते हैं: एक्शन के अंदर कुंजी के साथ fetch कॉल करें।
- Pages Router के लिए, वही कोड req/res के साथ pages/api/qr.ts में जाता है।
प्रॉक्सी किए बिना QR दिखाएं: short_url स्वयं रेंडर करें
कब: आप छवि को तुरंत ब्राउज़र में चाहते हैं और QRFLOW के फ्रेम या लोगो की आवश्यकता नहीं है। कोई भी QR लाइब्रेरी काम करती है, क्योंकि कोड ही छोटा लिंक है
import QRCode from "qrcode"; // npm i qrcode
// short_url came back from POST /codes. Encode it as-is.
const dataUrl = await QRCode.toDataURL(code.short_url, { width: 512, margin: 2 });
// <img src={dataUrl} /> scans go through QRFLOW, so analytics and re-pointing still work.
- यह पूर्वावलोकन के लिए सबसे तेज़ रास्ता है। प्रिंट के लिए, /codes/:id/image.svg डाउनलोड करें: इसमें सहेजे गए रंग, फ्रेम, कैप्शन और लोगो होते हैं, और यह वेक्टर है।
- यदि आप बाद में slug या domain_id बदलते हैं, तो short_url बदल जाता है; दोबारा रेंडर करें।
Express या कोई भी Node सर्वर
कब: एक साधारण Node बैकएंड।
import express from "express";
const app = express();
app.use(express.json());
const H = { Authorization: \`Bearer ${process.env.QRFLOW_KEY}\`, "Content-Type": "application/json" };
app.post("/qr", async (req, res) => {
const r = await fetch("https://qrflow.codes/api/v1/codes", {
method: "POST", headers: H,
body: JSON.stringify({ type: "url", destination_data: { url: req.body.url }, label: req.body.label }),
});
res.status(r.status).json(await r.json());
});
app.get("/qr/:id.svg", async (req, res) => {
const r = await fetch(\`https://qrflow.codes/api/v1/codes/${req.params.id}/image.svg\`, { headers: H });
res.status(r.status).type("image/svg+xml").send(await r.text());
});
app.listen(3000);
Cloudflare Workers, Vercel Edge, Deno Deploy, Supabase Edge Functions
कब: एक fetch-केवल रनटाइम जिसमें Node बिल्ट-इन नहीं हैं।
export default {
async fetch(req: Request, env: { QRFLOW_KEY: string }) {
const { url, label } = await req.json();
const r = await fetch("https://qrflow.codes/api/v1/codes", {
method: "POST",
headers: { Authorization: \`Bearer ${env.QRFLOW_KEY}\`, "Content-Type": "application/json" },
body: JSON.stringify({ type: "url", destination_data: { url }, label }),
});
return new Response(r.body, { status: r.status, headers: { "Content-Type": "application/json" } });
},
};
Deno.serve(async (req) => {
const { url, label } = await req.json();
const r = await fetch("https://qrflow.codes/api/v1/codes", {
method: "POST",
headers: { Authorization: \`Bearer ${Deno.env.get("QRFLOW_KEY")}\`, "Content-Type": "application/json" },
body: JSON.stringify({ type: "url", destination_data: { url }, label }),
});
return new Response(await r.text(), { status: r.status, headers: { "Content-Type": "application/json" } });
});
// supabase secrets set QRFLOW_KEY=qrf_live_...
- npm पैकेज
qrflow\केवल fetch और WebCrypto का उपयोग करता है, इसलिए यह इन सभी में बिना बदलाव के चलता है।
Python: FastAPI, Flask, Django, एक स्क्रिप्ट
कब: आपका बैकएंड Python है।
import os
from fastapi import FastAPI, HTTPException, Response
from qrflow import QRFlow, QRFlowError # https://qrflow.codes/sdk/qrflow.py
app = FastAPI()
qr = QRFlow(os.environ["QRFLOW_KEY"])
@app.post("/qr")
def make_qr(url: str, label: str | None = None):
try:
code = qr.create_code(type="url", destination_data={"url": url}, label=label)["code"]
except QRFlowError as e:
raise HTTPException(e.status, {"error": e.code, "message": str(e)})
return {"id": code["id"], "short_url": code["short_url"]}
@app.get("/qr/{code_id}.svg")
def qr_image(code_id: str):
import urllib.request
req = urllib.request.Request(qr.image_url(code_id), headers={"Authorization": f"Bearer {os.environ['QRFLOW_KEY']}"})
with urllib.request.urlopen(req) as r:
return Response(r.read(), media_type="image/svg+xml")
प्रति ऑर्डर, टेबल, उत्पाद, टिकट या इवेंट एक QR कोड
कब: आपकी किसी टेबल की हर पंक्ति को अपना कोड चाहिए, जो स्वचालित रूप से बना हो।
- अपनी टेबल में दो कॉलम जोड़ें: qrflow_code_id (uuid) और qr_short_url (text)।
- जब एक पंक्ति बनती है, तो पंक्ति का सार्वजनिक URL और एक लेबल जो पंक्ति का नाम देता है ("Order 10432", "Table 7") के साथ POST /codes करें। id और short_url सहेजें।
- जब पंक्ति का पेज स्थानांतरित होता है (नया डोमेन, नया पथ), तो destination_data को PATCH करें। मुद्रित कोड काम करते रहते हैं।
- जब पंक्ति सेवानिवृत्त होती है, तो PATCH { paused: true } करें यदि कुछ भी मुद्रित किया गया था; DELETE केवल तभी करें जब कुछ भी मुद्रित नहीं किया गया था।
- एक साथ हजारों चाहिए (300 रेस्तरां के लिए प्रति टेबल एक मेनू)? POST /codes/bulk को चंक्स में उपयोग करें और लौटाए गए कोड को लेबल या ऑर्डर द्वारा अपनी पंक्तियों से मैप करें।
const { code } = await qr.createCode({
type: "url",
destination_data: { url: \`https://example.com/orders/${order.id}\` },
label: \`Order ${order.number}\`,
});
await db.orders.update(order.id, { qrflow_code_id: code.id, qr_short_url: code.short_url });
- उचित उपयोग Business पर 25,000 सहेजे गए कोड है; API उससे दोगुने पर रुक जाती है। यदि आपको हमेशा के लिए प्रति रसीद एक कोड चाहिए, तो पहले हमसे बात करें: hello@qrflow.codes।
बदलें कि एक मुद्रित कोड कहाँ जाता है
कब: एक अभियान समाप्त हुआ, एक पेज स्थानांतरित हुआ, एक PDF बदली गई, एक मौसम बदल गया।
curl -X PATCH https://qrflow.codes/api/v1/codes/$CODE_ID \
-H "Authorization: Bearer $QRFLOW_KEY" -H "Content-Type: application/json" \
-d '{ "destination_data": { "url": "https://example.com/spring" } }'
इसे रोकें, या इसे एक समाप्ति तिथि दें
# Scans show a "paused" page instead of redirecting
curl -X PATCH https://qrflow.codes/api/v1/codes/$CODE_ID -H "Authorization: Bearer $QRFLOW_KEY" \
-H "Content-Type: application/json" -d '{ "paused": true }'
# Stops working after the date; null clears it
curl -X PATCH https://qrflow.codes/api/v1/codes/$CODE_ID -H "Authorization: Bearer $QRFLOW_KEY" \
-H "Content-Type: application/json" -d '{ "expires_at": "2026-12-31T23:59:59Z" }'
- केवल डायनामिक कोड को पुनः-निर्देशित किया जा सकता है। Free खाते पर बनाया गया url कोड, या Wi-Fi/vCard/text कोड, 400 not_dynamic उत्तर देता है। भुगतान योजना पर url/phone/email/sms/location कोड के लिए, POST /codes/:id/dynamic इसे परिवर्तित करता है, और आपको पुनः-रेंडर और पुनः-प्रिंट करना होगा क्योंकि चित्र बदल जाता है।
- एक स्कैनर अगले स्कैन पर नया गंतव्य देखता है। इंतजार करने के लिए कोई कैश नहीं है।
अपने स्वयं के डोमेन पर कोड प्रिंट करें
कब: आप कोड में qrflow.codes/q/x7k2p9a के बजाय go.example.com/menu चाहते हैं।
- Account पेज पर, Your own link domain के अंतर्गत, go.example.com जोड़ें और अपने DNS प्रदाता पर दिखाया गया CNAME बनाएं। सत्यापन आमतौर पर मिनटों में पूरा होता है।
- उसके बाद हर नए डायनामिक कोड का short_url उस डोमेन का उपयोग करता है। मौजूदा कोड भी स्विच करते हैं: उनका चित्र qrflow.codes/q/... एन्कोड करता था, जो रीडायरेक्ट करता रहता है, इसलिए कुछ भी मुद्रित नहीं टूटता।
- slug के साथ कोड को पठनीय नाम दें: PATCH { "slug": "menu" } go.example.com/menu बनाता है। प्रिंट करने से पहले ऐसा करें।
- Business पर कई डोमेन के साथ, GET /domains उन्हें ids के साथ सूचीबद्ध करता है; प्रति कोड चुनने के लिए POST या PATCH पर domain_id पास करें।
एक लिंक का नाम दें और एक डोमेन चुनें
curl https://qrflow.codes/api/v1/domains -H "Authorization: Bearer $QRFLOW_KEY"
# { "default_base": "https://go.example.com", "domains": [ { "id": "…", "host": "go.example.com", "is_default": true, … }, { "id": "…", "host": "qr.example.fr", … } ] }
curl -X PATCH https://qrflow.codes/api/v1/codes/$CODE_ID -H "Authorization: Bearer $QRFLOW_KEY" -H "Content-Type: application/json" \
-d '{ "slug": "menu", "domain_id": "<id of qr.example.fr>" }'
# short_url is now https://qr.example.fr/menu
अपने स्वयं के एडमिन में एक स्कैन चार्ट
कब: आप अपने स्वयं के नंबरों के बगल में प्रति दिन, प्रति देश या प्रति डिवाइस स्कैन चाहते हैं।
const stats = await qr.scans(code.id, { from: "2026-09-01", to: "2026-09-30", group: "day" });
// stats.total -> 412
// stats.rows -> [{ key: "2026-09-01", scans: 18 }, { key: "2026-09-02", scans: 25 }, ...]
// Feed rows straight into Recharts, Chart.js, or a <table>.
const byCountry = await qr.scans(code.id, { group: "country" }); // [{ key: "US", scans: 300 }, { key: "MX", scans: 41 }]
const byDevice = await qr.scans(code.id, { group: "device" }); // mobile, desktop, tablet
- एक अनुरोध 92 दिनों तक कवर करता है; लंबी श्रेणियों के लिए लूप करें। तिथियां UTC हैं।
- बिना पोलिंग के लाइव नंबरों के लिए, स्कैन इवेंट के लिए एक वेबहुक सब्सक्राइब करें: आपको हर कुछ मिनटों में बैचों में हर स्कैन उसके विवरण के साथ मिलता है।
Next.js में वेबहुक प्राप्त करें और उन्हें सत्यापित करें
कब: आप जानना चाहते हैं कि कोड कब स्कैन या बदला जाता है, अपने स्वयं के डेटाबेस में, लगभग वास्तविक समय में।
- Account › Webhooks पर या POST /webhooks के साथ वेबहुक बनाएं। सीक्रेट (whsec_...) को एक बार QRFLOW_WEBHOOK_SECRET में कॉपी करें।
- पार्स करने से पहले कच्चे बॉडी को टेक्स्ट के रूप में पढ़ें; हस्ताक्षर सटीक बाइट्स को कवर करता है।
- सत्यापित करें, फिर event पर स्विच करें। तेज़ी से 2xx उत्तर दें; धीमा काम अपने उत्तर के बाद या कतार में करें।
- हस्ताक्षरित ping प्राप्त करने और वायरिंग की पुष्टि करने के लिए वेबहुक पर Test दबाएं।
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(raw: string, header: string, secret: string): boolean {
const t = /t=(\d+)/.exec(header)?.[1], v1 = /v1=([a-f0-9]+)/.exec(header)?.[1];
if (!t || !v1 || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const expected = createHmac("sha256", secret).update(\`${t}.${raw}\`).digest("hex");
return expected.length === v1.length && timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
export async function POST(req: Request) {
const raw = await req.text();
if (!verify(raw, req.headers.get("x-qrflow-signature") ?? "", process.env.QRFLOW_WEBHOOK_SECRET!)) {
return new Response("bad signature", { status: 401 });
}
const evt = JSON.parse(raw) as { id: string; event: string; created_at: string; data: any };
// evt.id is stable across retries: store it and skip duplicates.
switch (evt.event) {
case "scan": // evt.data.scans[]: code_id, label, slug, scanned_at, device, country, city, referrer, browser, os, language
break;
case "code.created": // evt.data.code, evt.data.source
case "code.updated": // evt.data.code, evt.data.changed[]
case "code.deleted": // evt.data.code { id, label, short_code, slug }
break;
case "ping": // the Test button
break;
}
return new Response(null, { status: 204 });
}
- स्थानीय रूप से, अपने डेव सर्वर को एक टनल (cloudflared tunnel --url http://localhost:3000, या ngrok) के साथ एक्सपोज़ करें और निर्माण करते समय वेबहुक के लिए उस https URL का उपयोग करें।
- npm पैकेज आपके लिए ऐसा करता है:
import { parseWebhook } from "qrflow"\एक कॉल में सत्यापित और पार्स करता है (WebCrypto, इसलिए यह Workers और Deno में भी चलता है)। Python क्लाइंट verify_webhook भेजता है।
Python में वेबहुक प्राप्त करें
कब: Flask, FastAPI या Django समान इवेंट प्राप्त कर रहे हैं।
import os, json
from flask import Flask, request, abort
from qrflow import verify_webhook # https://qrflow.codes/sdk/qrflow.py
app = Flask(__name__)
@app.post("/qrflow")
def hook():
raw = request.get_data() # bytes, before any parsing
if not verify_webhook(raw, request.headers.get("X-QRFLOW-Signature", ""), os.environ["QRFLOW_WEBHOOK_SECRET"]):
abort(401)
evt = json.loads(raw)
if evt["event"] == "scan":
for s in evt["data"]["scans"]:
print(s["code_id"], s["scanned_at"], s["country"], s["device"])
return "", 204
CSV से हजारों कोड
कब: प्रति SKU, प्रति सीट, प्रति एसेट टैग, प्रति मेलर एक कोड।
import { parse } from "csv-parse/sync";
import { readFileSync } from "node:fs";
const rows = parse(readFileSync("skus.csv"), { columns: true }) as Array<{ sku: string; url: string }>;
const out: Array<{ sku: string; id: string; short_url: string }> = [];
for (let i = 0; i < rows.length; i += 2000) { // Business: 2,000 per request
const chunk = rows.slice(i, i + 2000);
const { codes, rejected, remaining_this_month } = await qr.bulkCreate(
chunk.map((r) => ({ destination: r.url, label: r.sku })),
);
codes.forEach((c, j) => out.push({ sku: chunk[j].sku, id: c.id, short_url: c.short_url }));
if (rejected.length) console.warn(rejected); // rows that were not web addresses
console.log(remaining_this_month, "left this month");
}
- Bulk केवल डायनामिक url कोड बनाता है, सभी समान रंगों के साथ। कोड उसी क्रम में लौटते हैं जिसमें आपने भेजे थे, अस्वीकृत पंक्तियों को घटाकर; संदेह होने पर लेबल से मिलान करें।
- वेबहुक को प्रति बल्क अनुरोध एक code.created इवेंट मिलता है जिसमें codes[] होता है, प्रति कोड एक के बजाय।
अपने उपयोगकर्ताओं को अपना स्वयं का QRFLOW खाता कनेक्ट करने दें (OAuth)
कब: आप अन्य लोगों के लिए एक उत्पाद बना रहे हैं और चाहते हैं कि कोड आपके खाते के बजाय उनके QRFLOW खातों में जाएं।
- एक बार क्लाइंट पंजीकृत करें: client_name और redirect_uris के साथ POST https://qrflow.codes/api/oauth/register करें। आपको एक client_id (और गोपनीय क्लाइंट के लिए client_secret) मिलता है।
- उपयोगकर्ता को response_type=code, client_id, redirect_uri, scope, state, और PKCE (code_challenge, code_challenge_method=S256) के साथ /oauth/authorize पर भेजें।
- /api/oauth/token पर कोड का आदान-प्रदान करें। रिफ्रेश टोकन स्टोर करें; एक्सेस टोकन एक घंटे तक चलते हैं।
- Authorization: Bearer <access_token> के साथ /api/v1 कॉल करें। सब कुछ एक कुंजी के साथ बिल्कुल वैसा ही काम करता है, उपयोगकर्ता की योजना के अंतर्गत।
curl -X POST https://qrflow.codes/api/oauth/register -H "Content-Type: application/json" \
-d '{ "client_name": "Acme Menus", "redirect_uris": ["https://app.example.com/oauth/qrflow"], "token_endpoint_auth_method": "none" }'
# { "client_id": "dyn_…", "redirect_uris": [...], "grant_types": ["authorization_code","refresh_token"], … }
https://qrflow.codes/oauth/authorize?response_type=code&client_id=dyn_…&redirect_uri=https%3A%2F%2Fapp.example.com%2Foauth%2Fqrflow
&scope=profile%20codes%3Aread%20codes%3Awrite%20analytics%3Aread&state=…&code_challenge=…&code_challenge_method=S256
- स्कोप API कुंजियों के समान छह हैं। जितना कम चाहिए उतना मांगें; सहमति स्क्रीन उन्हें सूचीबद्ध करती है।
- यदि आपका ऐप एक चैट सहायक या एजेंट है, तो authorize अनुरोध में resource=https://qrflow.codes/mcp जोड़ें और इसके बजाय MCP सर्वर से बात करें; टोकन उससे बंधा होगा।
Zapier, Make, n8n: बिल्कुल कोई कोड नहीं
कब: आप चाहते हैं कि स्कैन या नए कोड एक शीट, एक Slack चैनल या एक CRM में जाएं।
- एक कैच-हुक ट्रिगर बनाएं (Zapier: Webhooks by Zapier › Catch Hook; Make: Custom webhook; n8n: Webhook node) और उसका https URL कॉपी करें।
- Account › Webhooks पर, उस URL को जोड़ें और इवेंट चुनें। Test दबाएं; ping टूल में दिखाई देता है और उसे पेलोड आकार देता है।
- data.scans[] (स्कैन के लिए) या data.code (code.* के लिए) को अपनी शीट, संदेश या रिकॉर्ड में मैप करें।
- उन टूल से कोड बनाने के लिए, Authorization हेडर के साथ POST /codes के खिलाफ उनके HTTP मॉड्यूल का उपयोग करें। कुंजी को टूल के क्रेडेंशियल स्टोर में रखें।
- ये टूल हस्ताक्षर सत्यापित नहीं कर सकते। वे जो URL देते हैं वह अप्रत्याशित है, जो आपके पास सुरक्षा है; इसे कहीं भी पोस्ट न करें।
Vibe coding
चिपकाने के लिए प्रॉम्प्ट
कोडिंग सहायक सही चीज़ तब बनाते हैं जब उन्हें नियम पहले से बताए जाते हैं। ये प्रॉम्प्ट नियम ले जाते हैं। एक चिपकाएं, ब्रैकेट भरें, और सहायक एक पंक्ति लिखने से पहले Markdown संदर्भ पढ़ेगा।
मेरे ऐप में QR कोड जोड़ें
Claude, ChatGPT, Cursor, Codex, Windsurf, Copilot Chat: चैट में चिपकाएं
Add QR codes to this project using the QRFLOW.codes API.
Read https://qrflow.codes/llms-full.txt before writing code; it is the complete reference.
Rules:
- The API key is in the environment variable QRFLOW_KEY. It must only be used server-side (route handler, server action, edge function). Never expose it to the browser.
- Create dynamic codes: POST https://qrflow.codes/api/v1/codes with { "type": "url", "destination_data": { "url": ... }, "label": ... }.
- Save the returned code.id and code.short_url on my record. short_url is what gets printed or displayed.
- Show the image by proxying GET /codes/:id/image.svg through my server, or by encoding short_url with a QR library on the client.
- Handle errors from the JSON body: { "error", "message" }. Map 402 to "upgrade needed", 429 to a retry with the Retry-After header.
What I want: [describe the feature, e.g. "every event in my events table gets a QR code that opens its public page; show it on the event admin page with a download button"].
अपने रेपो को QRFLOW के बारे में सिखाएं
CLAUDE.md, AGENTS.md, .cursorrules या .github/copilot-instructions.md में डालें
## QR codes (QRFLOW.codes)
- Docs: https://qrflow.codes/llms-full.txt (Markdown), https://qrflow.codes/api/v1/openapi.json (OpenAPI 3.1).
- Base URL https://qrflow.codes/api/v1, header Authorization: Bearer $QRFLOW_KEY. Server-side only.
- Codes are created with POST /codes { type: "url", destination_data: { url }, label }. Store code.id and code.short_url.
- Change the destination with PATCH /codes/:id { destination_data: { url } }. Never change slug/domain_id after printing.
- Image: GET /codes/:id/image.svg (needs the key). Prefer paused: true over DELETE when a print exists.
- Webhooks arrive as POST with X-QRFLOW-Signature (t=,v1=HMAC-SHA256 of "t.rawBody"); verify with the raw body.
Lovable, Bolt, v0, Replit और अन्य ऐप बिल्डरों में
फ्रंट-एंड-पहले बिल्डर जो आपको एक बैकएंड देते हैं (Supabase, सर्वरलेस फ़ंक्शन)
Integrate QRFLOW.codes QR codes. The API refuses browser calls, so create a backend function (Supabase Edge Function / serverless function) that holds the secret QRFLOW_KEY and calls POST https://qrflow.codes/api/v1/codes with { "type": "url", "destination_data": { "url": "<the page URL>" }, "label": "<name>" }. Return code.id and code.short_url to the UI and save them in the database. Render the QR in the UI by encoding short_url with a QR library; add a "Download for print" button that fetches /codes/:id/image.svg through the same backend function. Reference: https://qrflow.codes/llms-full.txt
एक कस्टम GPT जो मेरे कोड प्रबंधित करता है
ChatGPT › Create a GPT › Actions
Import from URL: https://qrflow.codes/api/v1/openapi.json
Authentication: API Key › Bearer › paste a Business key with the scopes you want the GPT to have.
Then the GPT can list, create, re-point and report on your codes. For a no-setup version, add the MCP connector instead (Developer mode › Plugins › https://qrflow.codes/mcp).
कनेक्टर चालू होने के बाद कहने के लिए चीज़ें
Claude, ChatGPT, Claude Code QRFLOW MCP सर्वर से जुड़े हुए
"Make a QR code for https://example.com/fall-menu, call it Fall menu, frame caption 'Scan for menu'."
"Which of my codes got the most scans this month? Show a breakdown by country for the top one."
"Point the 'Lobby poster' code at https://example.com/events/october."
"Name the 'Business card' code's link 'hi' on my domain."
"Pause every code with 'Summer' in the label."
"Make 40 codes, one per table, going to https://example.com/order?table=1 through 40."
"Show me the PNG of the 'Front door' code."
MCP सर्वर
इसे Claude, ChatGPT, Cursor और Claude Code से उपयोग करें
QRFLOW https://qrflow.codes/mcp पर एक MCP सर्वर है। इसे एक बार कनेक्ट करें, साइन इन करें, और फिर ऐसी बातें कहें जैसे "हमारे फॉल मेनू पेज के लिए एक QR कोड बनाएं, मेरे डोमेन पर menu नामित", "लॉबी पोस्टर के कोड को नए पेज पर इंगित करें" या "पिछले हफ्ते फ्लायर को कितने स्कैन मिले, देश द्वारा?"। सहायक को इस API के समान टूल मिलते हैं, समान नियमों के अंतर्गत, और कोड mcp को उनके स्रोत के रूप में आपके डैशबोर्ड में आते हैं।
डेवलपर नहीं? सादे शब्दों का संस्करण, प्रत्येक सहायक के लिए सटीक क्लिक के साथ, Make QR codes with your AI assistant पर है।
कनेक्ट करें
Customize › Connectors › Add custom connector › पता चिपकाएं, या QRFLOW की निर्देशिका सूची पर Connect दबाएं। Claude एक QRFLOW साइन-इन खोलता है; Allow दबाएं। हर योजना पर काम करता है।
https://qrflow.codes/mcp
Settings › Security and login › Developer mode चालू करें, फिर Settings › Plugins › + › पता चिपकाएं; पूछे जाने पर साइन इन करें। Plus, Pro, Team, Enterprise और Edu।
https://qrflow.codes/mcp
एक कमांड, फिर साइन इन करने के लिए /mcp। साइन-इन छोड़ने के लिए हेडर के रूप में एक Business कुंजी जोड़ें।
claude mcp add --transport http qrflow https://qrflow.codes/mcp
# or, with a key:
claude mcp add --transport http qrflow https://qrflow.codes/mcp --header "Authorization: Bearer $QRFLOW_KEY"
Cursor, Windsurf, VS Code, कोई भी MCP क्लाइंट
URL पर एक HTTP सर्वर जोड़ें। OAuth साइन-इन ब्राउज़र में होता है; या एक कुंजी के साथ Authorization हेडर पास करें।
{
"mcpServers": {
"qrflow": { "type": "http", "url": "https://qrflow.codes/mcp" }
}
}
आपका अपना एजेंट (Anthropic या OpenAI SDK)
MCP कनेक्टर या टूल को एक Business कुंजी के साथ bearer के रूप में URL पर इंगित करें; कोई ब्राउज़र प्रवाह आवश्यक नहीं है।
// Anthropic Messages API, MCP connector
mcp_servers: [{ type: "url", url: "https://qrflow.codes/mcp", name: "qrflow", authorization_token: process.env.QRFLOW_KEY }]
सहायक क्या कर सकता है
| टूल | यह क्या करता है | स्कोप |
|---|---|---|
| list_code_kinds | हर प्रकार का कोड उसके फ़ील्ड और आवश्यक योजना के साथ। सहायक कुछ असामान्य बनाने से पहले इसे कॉल करता है। | profile |
| list_domains | आपके लिंक डोमेन, डिफ़ॉल्ट, और उनके ids। | domains:read |
| get_qr_image | एक PNG जिसे सहायक दिखा या सहेज सकता है, साथ ही प्रिंट के लिए SVG URL। | codes:read |
| get_account | कौन साइन इन है, योजना, सीमाएं। | profile |
यह कैसे सुरक्षित रहता है
- सहायक केवल आपके खाते के लिए एक टोकन रखता है, जो आपके द्वारा QRFLOW पेज पर Allow दबाने के बाद जारी किया गया है। Account › Connected apps पर किसी भी समय इसे डिस्कनेक्ट करें।
- टोकन MCP सर्वर से बंधे हैं; उन्हें REST API के खिलाफ दोबारा नहीं चलाया जा सकता।
- हर लेखन डैशबोर्ड के समान सत्यापन से गुजरता है: अनुमत-सूचीबद्ध गंतव्य, योजना जांच, उचित-उपयोग सीमाएं।
- विनाशकारी टूल स्वयं का सावधानीपूर्वक वर्णन करते हैं:
delete_qr_codeमॉडल को बताता है कि जब एक प्रिंट मौजूद हो तो रोकना पसंद करें। - डिस्कवरी दस्तावेज़
/.well-known/oauth-authorization-serverऔर/.well-known/oauth-protected-resourceपर रहते हैं; पंजीकरण RFC 7591 है; PKCE S256 केवल।
SDK और OpenAPI स्पेक
- TypeScript / JavaScript:
npm install qrflow(npm)। शून्य निर्भरताएं, ESM और CommonJS, पूर्ण प्रकार; Node 18+, Bun, Deno और Workers में चलता है। आपके लिए 429s पुनः प्रयास करता है औरverifyWebhook/parseWebhookभेजता है। - Python 3.9+, केवल मानक पुस्तकालय: qrflow.py।
- OpenAPI 3.1: /api/v1/openapi.json। Postman या Insomnia में आयात करें, किसी भी भाषा में एक क्लाइंट उत्पन्न करें, या इसे ChatGPT Action से संलग्न करें।
- दोनों क्लाइंट एक टाइप की गई त्रुटि फेंकते हैं (
QRFlowErrorके साथstatus,code,message,retryAfter) और एक वेबहुक सत्यापनकर्ता भेजते हैं। एकल-फ़ाइल TypeScript स्रोत अभी भी /sdk/qrflow.ts पर है यदि आप इसे वेंडर करना पसंद करते हैं।
| TypeScript | Python | कॉल |
|---|---|---|
| me() | me() | GET /me |
| catalog() | catalog() | GET /catalog |
| listCodes({ limit, q }) | list_codes(limit, q) | GET /codes |
| getCode(id) | get_code(id) | GET /codes/:id |
| createCode(input) | create_code(**fields) | POST /codes |
| updateCode(id, patch) | update_code(id, **patch) | PATCH /codes/:id |
| deleteCode(id) | delete_code(id) | DELETE /codes/:id |
| makeDynamic(id) | make_dynamic(id) | POST /codes/:id/dynamic |
| scans(id, { from, to, group }) | scans(id, from_, to, group) | GET /codes/:id/scans |
| bulkCreate(rows, colors) | bulk_create(rows, **colors) | POST /codes/bulk |
| domains() | domains() | GET /domains |
| listWebhooks() / createWebhook() / testWebhook(id) / deleteWebhook(id) | list_webhooks() / create_webhook() / test_webhook(id) / delete_webhook(id) | /webhooks |
| imageUrl(id, size) | image_url(id, size) | छवि पता (कुंजी के साथ इसे प्राप्त करें) |
| verifyWebhook(raw, header, secret) | verify_webhook(raw, header, secret) | डिलीवरी के लिए हस्ताक्षर जांच |
एंडपॉइंट संदर्भ
बेस URL https://qrflow.codes/api/v1। बॉडी और प्रतिक्रियाएँ JSON हैं। तिथियाँ UTC में ISO 8601 हैं। PATCH पर केवल वही फ़ील्ड भेजें जो बदलती हैं।
GETprofile
योजना, फीचर फ्लैग और इस खाते पर लागू सीमाएँ, साथ ही कुंजी के स्कोप।
curl https://qrflow.codes/api/v1/me \
-H "Authorization: Bearer $QRFLOW_KEY"
{ "id": "…", "email": "ops@example.com", "plan": "business", "paid": true,
"features": { "dynamic_codes": true, "custom_domain": true, "link_names": true, "gs1": true, "api_keys": true },
"limits": { "saved_codes": 25000, "bulk_per_month": 10000, "bulk_per_request": 2000, "link_domains": 5, "requests_per_minute": 600 },
"auth": "api_key", "scopes": ["codes:read", "codes:write"] }
GETpublic
मूल प्रकार (url, wifi, vcard, email, phone, sms, text, location) और लगभग 50 उपप्रकार (Instagram, Google review, Wi-Fi, app store…), प्रत्येक के साथ उसे आवश्यक फ़ील्ड और आवश्यक योजना। कोई कुंजी आवश्यक नहीं।
curl https://qrflow.codes/api/v1/catalog
GETcodes:read
नए पहले।?limit= 100 तक,?q= लेबल खोजता है।
curl "https://qrflow.codes/api/v1/codes?limit=20&q=menu" \
-H "Authorization: Bearer $QRFLOW_KEY"
POSTcodes:write
साइट पर Save के समान नियम: url, phone, email, sms और location कोड भुगतान योजनाओं पर गतिशील हैं; Wi-Fi, vCard और text अपनी सामग्री पैटर्न में रखते हैं। destination_data.subtype में एक उपप्रकार आईडी डालें, उदाहरण के लिए, Google review कोड बनाने के लिए। वैकल्पिक domain_id चुनता है कि कोड आपके किस लिंक डोमेन के साथ प्रिंट होता है (GET /domains उन्हें सूचीबद्ध करता है)।
curl -X POST https://qrflow.codes/api/v1/codes \
-H "Authorization: Bearer $QRFLOW_KEY" \
-H "Content-Type: application/json" \
-d '{ "type": "url", "destination_data": { "url": "https://example.com/menu" }, "label": "Table tents", "frame_style": "caption-below", "frame_caption": "Scan for menu" }'
{ "code": { "id": "…", "label": "Table tents", "kind": "url", "dynamic": true, "short_code": "x7k2p9a",
"short_url": "https://go.example.com/x7k2p9a", "scans": 0, "image_url": "https://qrflow.codes/api/v1/codes/…/image.svg", … } }
GETcodes:read
कोड उसकी स्कैन गिनती, छोटे लिंक और छवि पते के साथ।
curl https://qrflow.codes/api/v1/codes/$ID \
-H "Authorization: Bearer $QRFLOW_KEY"
PATCHcodes:write
इनमें से कोई भी: destination_data (केवल गतिशील कोड, प्रिंट मान्य रहता है), label, paused, expires_at (ISO या null), slug (आपके डोमेन पर एक लिंक नाम), domain_id (आपका कौन सा लिंक डोमेन यह कोड प्रिंट करता है; null = खाता डिफ़ॉल्ट), fg_color, bg_color, frame_style, frame_caption, frame_caption2। केवल वही फ़ील्ड भेजें जो आप बदल रहे हैं।
curl -X PATCH https://qrflow.codes/api/v1/codes/$ID \
-H "Authorization: Bearer $QRFLOW_KEY" \
-H "Content-Type: application/json" \
-d '{ "destination_data": { "url": "https://example.com/menu-fall" }, "slug": "menu" }'
DELETEcodes:write
हमेशा के लिए चला गया, इसके स्कैन इतिहास सहित। एक गतिशील कोड का मुद्रित लिंक हल होना बंद हो जाता है। यदि प्रिंट अभी भी बाहर है तो paused: true पसंद करें।
curl -X DELETE https://qrflow.codes/api/v1/codes/$ID \
-H "Authorization: Bearer $QRFLOW_KEY"
204 No Content
POSTcodes:write
मुद्रित पैटर्न बदलता है (यह अब छोटे लिंक को एन्कोड करता है), इसलिए बाद में छवि को फिर से रेंडर करें।
curl -X POST https://qrflow.codes/api/v1/codes/$ID/dynamic \
-H "Authorization: Bearer $QRFLOW_KEY"
GETcodes:read
फ्रेम और रंगों के साथ प्रिंट-तैयार SVG।?size= मॉड्यूल ग्रिड चौड़ाई px में सेट करता है; फ़ाइल फिर भी बिना नुकसान के स्केल होती है।
curl https://qrflow.codes/api/v1/codes/$ID/image.svg \
-H "Authorization: Bearer $QRFLOW_KEY" -o code.svg
GETanalytics:read
?from= और?to= (ISO तिथियाँ, 92 दिनों तक, डिफ़ॉल्ट पिछले 30) और?group= day, device, country, city, browser, os या referrer। एनालिटिक्स पृष्ठ के समान संख्याएँ।
curl "https://qrflow.codes/api/v1/codes/$ID/scans?from=2026-09-01&to=2026-09-21&group=day" \
-H "Authorization: Bearer $QRFLOW_KEY"
{ "code_id": "…", "from": "…", "to": "…", "group": "day", "total": 412,
"rows": [ { "key": "2026-09-01", "scans": 18 }, { "key": "2026-09-02", "scans": 25 }, … ] }
POSTcodes:write
एक कॉल में 2,000 URL कोड तक, सभी गतिशील। बल्क पृष्ठ के समान मासिक बल्क भत्ते के विरुद्ध गिना जाता है (Business पर 10,000)। जो पंक्तियाँ वेब पते नहीं हैं वे rejected में वापस आती हैं; बाकी बनाए जाते हैं।
curl -X POST https://qrflow.codes/api/v1/codes/bulk \
-H "Authorization: Bearer $QRFLOW_KEY" \
-H "Content-Type: application/json" \
-d '{ "rows": [ { "destination": "https://example.com/t/1", "label": "Table 1" }, { "destination": "https://example.com/t/2", "label": "Table 2" } ] }'
{ "codes": [ … ], "rejected": [], "remaining_this_month": 9998 }
GETdomains:read
आपके कनेक्टेड डोमेन, उनकी स्थिति, और कौन सा गतिशील कोड डिफ़ॉल्ट रूप से प्रिंट करता है (default_base)। किसी कोड पर domain_id के रूप में डोमेन की आईडी पास करें ताकि वह कोड किसी अन्य के साथ प्रिंट हो।
curl https://qrflow.codes/api/v1/domains \
-H "Authorization: Bearer $QRFLOW_KEY"
GETwebhooks:manage
आपके वेबहुक उनकी घटनाओं, अंतिम स्थिति और विफलता गिनती के साथ।
curl https://qrflow.codes/api/v1/webhooks \
-H "Authorization: Bearer $QRFLOW_KEY"
POSTwebhooks:manage
url सार्वजनिक होस्ट पर https होना चाहिए; events scan, code.created, code.updated, code.deleted में से कोई भी है। हस्ताक्षर रहस्य केवल एक बार लौटाया जाता है।
curl -X POST https://qrflow.codes/api/v1/webhooks \
-H "Authorization: Bearer $QRFLOW_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/hooks/qrflow", "events": ["scan", "code.updated"] }'
{ "webhook": { "id": "…", "url": "…", "events": ["scan", "code.updated"], "active": true, "secret": "whsec_…" } }
POSTwebhooks:manage
अभी एक हस्ताक्षरित ping भेजता है और प्रतिक्रिया की रिपोर्ट करता है।
curl -X POST https://qrflow.codes/api/v1/webhooks/$WEBHOOK_ID \
-H "Authorization: Bearer $QRFLOW_KEY"
DELETEwebhooks:manage
कतारबद्ध पुनर्प्रयासों सहित सभी डिलीवरी रोकता है।
curl -X DELETE https://qrflow.codes/api/v1/webhooks/$WEBHOOK_ID \
-H "Authorization: Bearer $QRFLOW_KEY"
204 No Content
GETpublic
फ्रेम आईडी और प्रत्येक को क्या चाहिए (कैप्शन, दूसरी पंक्ति), कस्टमाइज़र की तरह समूहीकृत। कोई कुंजी आवश्यक नहीं।
curl https://qrflow.codes/api/v1/frames
कोड ऑब्जेक्ट
हर एंडपॉइंट जो कोड को छूता है वही आकार लौटाता है। उन फ़ील्ड को अनदेखा करें जिन्हें आप नहीं जानते; समय के साथ नए जोड़े जाते हैं।
| फ़ील्ड | प्रकार | अर्थ |
|---|---|---|
| id | uuid | स्थिर आईडी। इसे हर अन्य कॉल में उपयोग करें। |
| label | string | null | डैशबोर्ड में नाम। 120 वर्णों तक।?q= के साथ खोजने योग्य। |
| kind | string | कैटलॉग आईडी: url, wifi, instagram, googlereview,... kind_label मानव नाम है। |
| type | string | एन्कोडिंग: url, text, wifi, vcard, email, phone, sms, location। |
| destination_data | object | वे फ़ील्ड जो आपने भेजे (प्रकारों के लिए उपप्रकार सहित)। destination इसकी एक-पंक्ति सारांश है। |
| dynamic | boolean | सत्य जब स्कैन QRFLOW से गुजरते हैं और गंतव्य बदल सकता है। dynamic_capable कहता है कि क्या यह प्रकार भुगतान योजना पर गतिशील हो सकता है। |
| short_code | string | सात वर्ण, कभी नहीं बदलता। |
| short_url | string | गतिशील कोड के लिए क्या प्रिंट करें। सेट होने पर आपका डोमेन और slug शामिल है। |
| domain_id | uuid | null | कौन सा लिंक डोमेन यह कोड प्रिंट करता है; null का मतलब खाता डिफ़ॉल्ट है। |
| fg_color, bg_color | hex | मॉड्यूल और पृष्ठभूमि रंग। |
| has_logo | boolean | डैशबोर्ड में एक लोगो जोड़ा गया था; image.svg इसे शामिल करता है। |
| frame_style, frame_caption, frame_caption2 | string | null | फ्रेम आईडी और कैप्शन, कस्टमाइज़र की तरह। |
| scans | integer | आजीवन स्कैन गिनती। |
| created_at, updated_at | ISO 8601 | UTC। |
| manage_url | url | डैशबोर्ड में कोड का पृष्ठ, 'Open in QRFLOW' लिंक के लिए। |
| image_url | url | GET /codes/:id/image.svg। Authorization हेडर की आवश्यकता है; सार्वजनिक छवि URL नहीं। |
| svg_download_url, png_download_url | url | वही SVG (फ्रेम, रंग, लोगो) और एक सादा PNG हस्ताक्षरित लिंक के माध्यम से जो बिना हेडर के 24 घंटे काम करते हैं: <img> टैग, स्क्रिप्ट और सहायकों के लिए फ़ाइल सहेजने के लिए। download_expires_at कहता है कि वे कब समाप्त होते हैं; कोड का कोई भी पठन ताज़ा लौटाता है। |
अन्य आकार: Scans (code_id, from, to, group, total, rows[key, scans]), Domain (id, host, status, active, is_default, verified_at, grace_until), Webhook (id, url, events, active, last_status, last_delivery_at, consecutive_failures, साथ ही secret एक बार), Me (id, email, plan, paid, features, limits, auth, scopes) और Error (error, message)। OpenAPI दस्तावेज़ में हर संपत्ति टाइप की गई है।
Business
वेबहुक
QRFLOW आपके https URL को कॉल करता है जब कुछ होता है। Account › Webhooks पर या POST /webhooks के साथ एक बनाएं; आपको हस्ताक्षर रहस्य एक बार मिलता है। प्रति खाता 10 तक।
| घटना | कब | data |
|---|---|---|
| scan | बैच: हर कुछ मिनट, अंतिम डिलीवरी के बाद से सभी नए स्कैन, प्रति कॉल 500 तक। | count, from, to, scans[] के साथ code_id, label, short_code, slug, scanned_at, device, country, city, referrer, browser, os, language |
| code.created | API और सहायकों से तुरंत; डैशबोर्ड से मिनटों के भीतर। एक बल्क अनुरोध bulk: true और codes[] के साथ एक घटना भेजता है। | code, source |
| code.updated | समान समय। गंतव्य, लेबल, विराम, समाप्ति, लिंक नाम, डोमेन, रंग, फ्रेम और गतिशील में रूपांतरण को कवर करता है। | code, changed[] (बदले गए फ़ील्ड नाम) |
| code.deleted | समान समय। | code: { id, label, short_code, slug } |
| ping | जब आप Test दबाते हैं। | webhook_id, message |
क्या आता है
हर पेलोड { id, event, created_at, data } है। id एक डिलीवरी के पुनर्प्रयासों में स्थिर है, इसलिए आप उस पर डुप्लिकेट हटा सकते हैं।
{
"id": "9b1c6d2e-…",
"event": "scan",
"created_at": "2026-09-21T18:05:00.000Z",
"data": {
"count": 2,
"from": "2026-09-21T18:00:00.000Z",
"to": "2026-09-21T18:04:12.331Z",
"scans": [
{ "code_id": "…", "label": "Table tents", "short_code": "x7k2p9a", "slug": "menu", "scanned_at": "2026-09-21T18:03:40.101Z",
"device": "mobile", "country": "US", "city": "Las Vegas", "referrer": null, "browser": "Safari", "os": "iOS", "language": "en-US" },
{ "code_id": "…", "label": "Table tents", "short_code": "x7k2p9a", "slug": "menu", "scanned_at": "2026-09-21T18:04:12.331Z",
"device": "mobile", "country": "MX", "city": "Tijuana", "referrer": null, "browser": "Chrome", "os": "Android", "language": "es-MX" }
]
}
}
{
"id": "2f0a…",
"event": "code.updated",
"created_at": "2026-09-21T18:06:00.000Z",
"data": {
"code": { "id": "…", "label": "Table tents", "kind": "url", "dynamic": true, "short_url": "https://go.example.com/menu", "scans": 412, "…": "…" },
"changed": ["destination_data"]
}
}
POST /your/endpoint HTTP/1.1
Content-Type: application/json
User-Agent: QRFLOW-Webhooks/1.0 (+https://qrflow.codes/developers)
X-QRFLOW-Event: scan
X-QRFLOW-Signature: t=1758477900,v1=5f1c…e9
हस्ताक्षर सत्यापित करें
X-QRFLOW-Signature: t=<unix seconds>,v1=<hex>। अपने रहस्य के साथ ${t}.${rawBody} पर HMAC-SHA256 की गणना करें और स्थिर समय में v1 से तुलना करें; अस्वीकार करें यदि t पांच मिनट से अधिक पुराना है। प्राप्त कच्चे बाइट्स का उपयोग करें, कभी पुनः-क्रमबद्ध ऑब्जेक्ट नहीं। Next.js और Python के लिए काम करने वाले रिसीवर व्यंजनों में हैं, और दोनों SDK सहायक शामिल करते हैं।
डिलीवरी नियम
- 8 सेकंड के भीतर किसी भी 2xx का उत्तर दें। जवाब देने के बाद काम करें।
- बाकी सब 1, 5, 15, 60, 240 और 720 मिनट के बाद पुनः प्रयास किया जाता है।
- बीस लगातार विफलताएं वेबहुक बंद कर देती हैं और खाता स्वामी को ईमेल करती हैं। रिसीवर ठीक होने के बाद इसे वापस चालू करें; कतारबद्ध पुनर्प्रयास फिर से शुरू होते हैं।
- URL सार्वजनिक होस्ट पर https होने चाहिए। localhost, निजी रेंज और qrflow.codes स्वयं अस्वीकार कर दिए जाते हैं। विकास के दौरान एक टनल का उपयोग करें।
- हस्ताक्षरित
pingप्राप्त करने और अपने सर्वर द्वारा उत्तर दी गई स्थिति देखने के लिए Test दबाएं।
त्रुटियाँ
हर त्रुटि नीचे की स्थिति के साथ { "error": "<code>", "message": "<what to do>" } है। संदेश एक व्यक्ति के लिए लिखा गया है; इसे दिखाएं।
| स्थिति | error | अर्थ |
|---|
लक्षण, कारण, समाधान
समस्या निवारण
हर कॉल पर 401 invalid_token
क्योंहेडर गलत है या कुंजी सक्रिय नहीं है।
समाधानठीक Authorization: Bearer qrf_live_… भेजें (एक स्थान, कोलन नहीं)। जांचें कि कुंजी Account › API keys पर रद्द नहीं की गई थी। यदि आपने इसे चैट या दस्तावेज़ से कॉपी किया है, तो अनुगामी अवधि या स्मार्ट उद्धरण के लिए देखें।
/api/v1 पर 401 एक टोकन के साथ जो MCP सर्वर पर काम करता है
क्योंhttps://qrflow.codes/mcp के लिए बनाए गए टोकन उससे बंधे हैं।
समाधानREST के लिए एक API कुंजी का उपयोग करें, या REST API के लिए टोकन पाने के लिए resource= के बिना दूसरा OAuth प्रवाह चलाएं।
कुंजी या वेबहुक बनाते समय 402 upgrade_required
क्योंदोनों Business सुविधाएँ हैं।
समाधान/pricing पर अपग्रेड करें, या MCP सर्वर का उपयोग करें, जो साइन-इन के माध्यम से हर योजना पर काम करता है।
OAuth ऐप से POST /codes पर 402
क्योंउपयोगकर्ता की योजना में वह शामिल नहीं है जो ऐप ने मांगा (एक गतिशील कोड, एक डोमेन)।
समाधानपहले GET /me features पढ़ें और अनुकूलित करें: कोड वैसे भी बनाएं (यह Free पर स्थिर होगा) या उपयोगकर्ता को बताएं कि योजना को क्या चाहिए।
403 insufficient_scope
क्योंकुंजी बनाते समय स्कोप तय होते हैं।
समाधानआपको आवश्यक स्कोप के साथ एक नई कुंजी बनाएं और पुरानी को रद्द करें। OAuth के लिए, authorize अनुरोध में स्कोप मांगें।
destination_data PATCH करते समय 400 not_dynamic
क्योंकोड स्थिर है: Free पर बनाया गया, या Wi-Fi/vCard/text प्रकार।
समाधानभुगतान योजना पर url/phone/email/sms/location के लिए, POST /codes/:id/dynamic, फिर पुनः डाउनलोड करें और पुनः प्रिंट करें (चित्र बदलता है)। Wi-Fi, vCard और text कभी गतिशील नहीं हो सकते; इसके बजाय एक url कोड बनाएं जो एक पृष्ठ खोलता है।
slug सेट करते समय 400 no_domain
क्योंलिंक नाम आपके डोमेन पर रहते हैं।
समाधानपहले Account पृष्ठ पर एक डोमेन कनेक्ट और सत्यापित करें। qrflow.codes/q पर पथ हमेशा short_code है।
slug पर 409 conflict
क्योंआपके किसी अन्य कोड का वह नाम है।
समाधानइसे खोजने के लिए GET /codes?q=, या दूसरा नाम चुनें। नाम प्रति खाता हैं, वैश्विक नहीं।
ब्राउज़र कंसोल में CORS त्रुटि
क्योंAPI केवल सर्वर-से-सर्वर कॉल स्वीकार करता है (और Canva)। यह जानबूझकर है: वेब पृष्ठ में एक कुंजी एक लीक कुंजी है।
समाधानकॉल को रूट हैंडलर, सर्वर एक्शन, एज फ़ंक्शन या बैकएंड में ले जाएं और पृष्ठ से उसे कॉल करें।
छवि एक QRFLOW वॉटरमार्क दिखाती है
क्योंखाता Free योजना पर है।
समाधानभुगतान योजनाएं इसे हटा देती हैं। Free साइट के अपने जनरेटर के लिए है।
मेरा डोमेन जोड़ने के बाद short_url अभी भी qrflow.codes/q/… कहता है
क्योंडोमेन अभी तक सत्यापित नहीं है, या इसका CNAME गलत है।
समाधानAccount पृष्ठ या GET /domains पर स्थिति जांचें (स्थिति verified होनी चाहिए)। एक बार होने पर मौजूदा कोड स्वचालित रूप से स्विच हो जाते हैं।
<img> टैग में image_url 401 देता है
क्योंइसे Authorization हेडर चाहिए, जो <img> नहीं भेज सकता।
समाधानउसी Code ऑब्जेक्ट से svg_download_url या png_download_url का उपयोग करें: हस्ताक्षरित लिंक जो बिना हेडर के 24 घंटे काम करते हैं। स्थायी कुछ के लिए, अपने सर्वर के माध्यम से image_url प्रॉक्सी करें (Next.js नुस्खा देखें) या स्वयं short_url एन्कोड करें।
मुझे SVG नहीं, PNG चाहिए
क्योंSVG फ्रेम और लोगो रखता है; PNG सादा कोड है।
समाधानGET /codes/:id/image.png (bearer या हस्ताक्षरित png_download_url) एक PNG लौटाता है, 256 से 2048 px। फ्रेम के साथ PNG के लिए, sharp या resvg के साथ SVG कनवर्ट करें (sharp(svgBuffer).png().toBuffer())।
मेरे सहायक ने कहा कि छवि एंडपॉइंट ने इसे अस्वीकार कर दिया और कोड स्वयं खींचा
क्योंइसने image_url लाया, जिसे bearer चाहिए।
समाधानहर कोड अब png_download_url और svg_download_url रखता है, और get_qr_image उन्हें लौटाता है; सहायक बिना साइन-इन के उन्हें curl कर सकता है। एक स्थानीय रूप से खींचा गया कोड जो समान short_url एन्कोड करता है फिर भी काम करता है और स्कैन गिनता है, लेकिन इसमें फ्रेम और लोगो नहीं है।
वेबहुक कभी नहीं आता
क्योंURL नियम या रिसीवर।
समाधानURL सार्वजनिक होस्ट पर https होना चाहिए (कोई localhost, कोई निजी IP, qrflow.codes नहीं)। वेबहुक पर Test दबाएं: परिणाम आपके सर्वर द्वारा उत्तर दी गई स्थिति दिखाता है। स्कैन घटनाएं बैच की जाती हैं और लगभग पांच मिनट तक लग सकती हैं; डैशबोर्ड से code.* घटनाएं भी कुछ मिनटों के लिए कतार में रहती हैं, जबकि API और MCP लेखन तुरंत वितरित करते हैं।
हस्ताक्षर कभी सत्यापित नहीं होता
क्योंआपने पुनः-क्रमबद्ध बॉडी पर हस्ताक्षर किया।
FixVerify उन सटीक रॉ बाइट्स के विरुद्ध करें जो आपको JSON पार्सिंग से पहले प्राप्त हुए थे। Express में उस रूट पर express.raw({ type: 'application/json' }) का उपयोग करें; Next.js App Router में await req.text() का उपयोग करें; Flask में request.get_data() का उपयोग करें। फिर ${t}.${raw}\ का HMAC-SHA256 परिकलित करें।
वेबहुक ने स्वयं को बंद कर लिया
क्योंलगातार बीस विफलताएँ।
Fixरिसीवर को ठीक करें, फिर इसे फिर से सक्रिय करें (खाता › वेबहुक, या हटाकर पुनः बनाएँ)। ऐसा होने पर आपको ईमेल किया गया था। कतारबद्ध पुनर्प्रयास फिर से शुरू हो जाते हैं।
डुप्लिकेट वेबहुक डिलीवरी
क्योंएक धीमा 2xx (8 सेकंड से अधिक) विफलता माना जाता है और उसे पुनः प्रयास किया जाता है।
Fixपहले उत्तर दें, बाद में प्रक्रिया करें। पेलोड की id पर डीडुप करें, जो पुनर्प्रयासों में स्थिर रहती है।
आयात के दौरान 429 rate_limited
क्योंप्रति कुंजी प्रति मिनट 600 अनुरोध।
Fixएक POST प्रति कोड के बजाय POST /codes/bulk (एक अनुरोध में 2,000 कोड) का उपयोग करें, या Retry-After सेकंड के लिए सोएँ।
मैंने एक कोड हटा दिया और मुद्रित पोस्टर अब 'Code not found' दिखाता है
क्योंहटाना स्थायी है और लिंक को समाप्त कर देता है।
Fixकोई पूर्ववत नहीं है। अगली बार PATCH { paused: true }; एक रोका गया कोड एक अनुकूल पृष्ठ दिखाता है और उसे फिर से शुरू किया जा सकता है।
डाउनग्रेड करने के बाद मेरी कुंजी ने काम करना बंद कर दिया
क्योंBusiness छोड़ने के 30 दिनों तक कुंजियाँ काम करती रहती हैं, फिर 402 का उत्तर देती हैं।
Fixपुनः सदस्यता लें; कुछ भी हटाया नहीं गया था, और वही कुंजियाँ फिर से काम करती हैं।
सूची में कुछ नहीं है? hello@qrflow.codes, सटीक अनुरोध और आपको मिली JSON त्रुटि के साथ। Business खातों को प्राथमिकता मिलती है।
सीमाएँ और उचित उपयोग
| सीमा | |
|---|---|
| प्रति कुंजी प्रति मिनट अनुरोध | 600. उससे अधिक पर Retry-After के साथ 429। |
| प्रति खाता कुंजियाँ | 10 |
| प्रति खाता वेबहुक | 10 |
| सहेजे गए कोड (उचित उपयोग) | 1,000 Premium, 25,000 Business; API उससे दोगुने पर रुक जाता है। |
| बल्क | 500/माह (500 प्रति अनुरोध) Premium; 10,000/माह (2,000 प्रति अनुरोध) Business। |
| लिंक डोमेन | 1 Premium, 5 Business |
| स्कैन | असीमित। Premium पर प्रति कोड प्रति माह 100,000 स्कैन पर एक चेक-इन ईमेल, Business पर 1,000,000; कुछ भी थ्रॉटल नहीं किया जाता। |
| स्कैन विश्लेषण विंडो | प्रति अनुरोध 92 दिन |
| सूची पृष्ठ आकार | 100 (?limit=) |
| लेबल / कैप्शन / स्लग | 120 / 60 / 40 वर्ण |
| वेबहुक टाइमआउट और पुनर्प्रयास | 8 सेकंड; 1, 5, 15, 60, 240 और 720 मिनट के बाद पुनर्प्रयास; 20 लगातार विफलताओं के बाद बंद। |
| Business छोड़ने के बाद | कुंजियाँ और वेबहुक 30 दिनों तक काम करते हैं, फिर 402। कुछ भी हटाया नहीं जाता। |
उचित उपयोग वही है जिसके लिए योजना मूल्य निर्धारित है। संख्या पर कुछ भी थ्रॉटल नहीं किया जाता; API उससे दोगुने पर रुक जाता है और एक व्यक्ति पहले आपको ईमेल करता है। उच्च मात्राएँ: hello@qrflow.codes।
सुरक्षा, आपके लिए और स्कैन करने वाले लोगों के लिए
QRFLOW आपके खाते की सुरक्षा कैसे करता है
- कुंजियाँ एक बार दिखाई जाती हैं और SHA-256 हैश के रूप में संग्रहीत की जाती हैं। QRFLOW में कोई भी कुंजी वापस नहीं पढ़ सकता; यदि आप इसे खो देते हैं, तो नई बनाएँ।
- प्रत्येक अनुरोध उस खाते तक सीमित है जिससे कुंजी संबंधित है। किसी अन्य खाते से एक कोड id 404 है, कभी लीक नहीं।
- स्कोप प्रति कुंजी निश्चित हैं, इसलिए रिपोर्टिंग डैशबोर्ड के लिए एक कुंजी कोड नहीं बना या हटा सकती।
- प्रति कुंजी प्रति मिनट 600 अनुरोध; उससे अधिक एक स्वच्छ 429 है, सभी के लिए धीमा नहीं।
- गंतव्य अनुमत-सूचीबद्ध हैं: http, https, mailto, tel, sms, geo और ऐप स्कीमों की एक छोटी सूची (whatsapp, tg, signal, spotify, ऐप स्टोर)। javascript:, data: और file: निर्माण समय पर अस्वीकार कर दिए जाते हैं, इसलिए एक समझौता एकीकरण आपके कोड को हमले में नहीं बदल सकता।
- वेबहुक URL सार्वजनिक होस्ट पर https होने चाहिए; QRFLOW कभी निजी नेटवर्क या स्वयं को कॉल नहीं करता। प्रत्येक डिलीवरी हस्ताक्षरित है और प्रत्येक पेलोड में एक स्थिर id है।
- OAuth क्लाइंट PKCE S256 के साथ पंजीकृत होते हैं और टोकन उस सर्वर से बंधे होते हैं जिसके लिए जारी किए गए थे; MCP सर्वर के लिए एक टोकन REST API पर पुनः चलाया नहीं जा सकता।
- कोई भी खाता पृष्ठ पर कुंजी रद्द कर सकता है या ऐप डिस्कनेक्ट कर सकता है; प्रभाव तत्काल है।
आपकी ओर से क्या करना है
- पर्यावरण चर, कभी स्रोत कोड नहीं। यदि कोई कुंजी git इतिहास में आ जाती है, तो उसे रद्द करें।
- केवल सर्वर-साइड। API ब्राउज़र मूल को अस्वीकार करता है, लेकिन आपके अपने एंडपॉइंट जो इसे लपेटते हैं उन्हें भी प्रमाणीकरण की आवश्यकता होती है, या कोई भी आपके बिल पर कोड बना सकता है।
- प्रत्येक एकीकरण को उसकी आवश्यकता वाले स्कोप के साथ अपनी कुंजी दें, एकीकरण के नाम पर। फिर एक को रद्द करने से एक चीज़ प्रभावित होती है।
- वेबहुक हस्ताक्षर सत्यापित करें और पाँच मिनट से पुराने टाइमस्टैम्प अस्वीकार करें।
- यदि आपके उपयोगकर्ताओं का डेटा लेबल या गंतव्यों में जाता है, तो याद रखें QRFLOW उन्हें संग्रहीत करता है; जहाँ संभव हो लेबल में व्यक्तिगत डेटा रखने से बचें।
स्कैन क्या रिकॉर्ड करते हैं, और क्या नहीं
- प्रत्येक रीडायरेक्ट डिवाइस प्रकार, देश, शहर, रेफरर, ब्राउज़र, ऑपरेटिंग सिस्टम और भाषा संग्रहीत करता है, अनुरोध से प्राप्त, और कोड + दिन + IP + उपयोगकर्ता एजेंट का एक-तरफ़ा हैश ताकि मालिक अद्वितीय आगंतुकों की गणना कर सके। हैश को वापस पते में नहीं बदला जा सकता।
- स्कैन करने वाले व्यक्ति पर कोई कुकीज़ सेट नहीं होतीं और IP पता स्वयं स्कैन के साथ नहीं रखा जाता। ज्ञात बॉट और लिंक-पूर्वावलोकन क्रॉलर छोड़ दिए जाते हैं।
- कोड हटाने से उसके स्कैन हट जाते हैं। खाता हटाने से सब कुछ हट जाता है।
- पूर्ण पाठ: https://qrflow.codes/privacy और https://qrflow.codes/terms.
संस्करण और स्थिरता
API पथ में संस्करणित है: /api/v1। v1 के भीतर हम फ़ील्ड, एंडपॉइंट, प्रकार और घटनाएँ जोड़ते हैं; हम कुछ भी नहीं हटाते या नाम बदलते नहीं, और प्रतिक्रियाओं में अज्ञात फ़ील्ड को आपके कोड द्वारा अनदेखा किया जाना चाहिए।
यदि किसी परिवर्तन को v1 को तोड़ना पड़े, तो यह /api/v2 के रूप में आता है और v1 कम से कम बारह महीनों तक चलता रहता है। कुंजी मालिकों को 90 दिन पहले अप्रचलन के बारे में ईमेल किया जाता है।
MCP सर्वर अपने टूल के लिए समान नियम का पालन करता है: तर्क केवल जोड़े जाते हैं, और प्रत्येक टूल अपना नाम रखता है।
/api/v1/openapi.json पर OpenAPI दस्तावेज़ और /llms-full.txt पर Markdown उस कोड से उत्पन्न होते हैं जो API की सेवा करता है, इसलिए वे वर्णन करते हैं कि आज क्या लाइव है।
डेवलपर्स द्वारा पूछे जाने वाले प्रश्न
क्या मुझे QRFLOW API का उपयोग करने के लिए भुगतान करना होगा?
API कुंजियाँ Business योजना के साथ आती हैं, $29 प्रति माह, मासिक। MCP सर्वर (Claude, ChatGPT, Cursor, Claude Code) और आपके अपने ऐप के लिए OAuth साइन-इन के माध्यम से हर योजना पर काम करते हैं, और वे जो बना सकते हैं वह योजना का पालन करता है। GET /catalog, GET /frames और /preview.svg को किसी कुंजी की आवश्यकता नहीं होती।
क्या मैं API के माध्यम से मुफ्त में QR कोड उत्पन्न कर सकता हूँ?
कुंजी के साथ नहीं। एक सादे स्थिर छवि के लिए, qrflow.codes पर मुफ्त जनरेटर या कोई भी ओपन-सोर्स QR लाइब्रेरी काम करती है। API गतिशील कोड, आपके अपने डोमेन, विश्लेषण, बल्क और वेबहुक के लिए है, जो एक भुगतान खाते का उद्देश्य है।
क्या मैं ब्राउज़र से API को कॉल कर सकता हूँ?
नहीं। यह ब्राउज़र मूल को अस्वीकार करता है ताकि एक कुंजी कभी वेब पेज में समाप्त न हो। इसे रूट हैंडलर, सर्वर एक्शन, एज फ़ंक्शन या बैकएंड से कॉल करें, और उससे अपने पेज से कॉल करें।
मुझे कौन से छवि प्रारूप मिलते हैं?
आपके रंगों, फ्रेम, कैप्शन और लोगो के साथ SVG (GET /codes/:id/image.svg, 256 से 4096 px नाममात्र) और एक सादा PNG (GET /codes/:id/image.png, 256 से 2048 px)। दोनों एक बियरर लेते हैं, या हस्ताक्षरित svg_download_url / png_download_url जो प्रत्येक Code ऑब्जेक्ट रखता है, जो बिना हेडर के 24 घंटे काम करते हैं। MCP टूल get_qr_image PNG इनलाइन और दोनों लिंक लौटाता है।
क्या मैं मुद्रित होने के बाद QR कोड बदल सकता हूँ?
हाँ, यदि यह गतिशील है (url, phone, email, sms, location भुगतान योजना पर)। नए destination_data के साथ PATCH /codes/:id; चित्र नहीं बदलता, अगला स्कैन नई जगह जाता है। Wi-Fi, vCard और text कोड अपनी सामग्री चित्र में रखते हैं और बदल नहीं सकते।
short_url और गंतव्य के बीच क्या अंतर है?
short_url चित्र के अंदर का लिंक है (go.example.com/menu)। गंतव्य वह जगह है जहाँ वह लिंक रीडायरेक्ट करता है (https://example.com/menu-fall)। आप short_url एक बार प्रिंट करते हैं और गंतव्य को जितनी बार चाहें बदलते हैं।
क्या कोड मेरे अपने डोमेन का उपयोग कर सकते हैं?
हाँ। Premium 1 डोमेन जोड़ता है, Business 5; आप CNAME जोड़ते हैं और खाता पृष्ठ पर सत्यापित करते हैं। Business प्रति कोड domain_id के साथ एक डोमेन चुनता है। लिंक नाम (slug) उस पर पठनीय पथ बनाते हैं।
स्कैन स्कैन करने वाले व्यक्ति के बारे में क्या रिकॉर्ड करता है?
डिवाइस प्रकार, देश, शहर, रेफरर, ब्राउज़र, ऑपरेटिंग सिस्टम और भाषा, अनुरोध से, साथ ही अद्वितीय-आगंतुक गणना के लिए एक-तरफ़ा दैनिक हैश। कोई कुकीज़ नहीं, और IP पता संग्रहीत नहीं है। एक चार्ट के लिए पर्याप्त, किसी की पहचान करने के लिए पर्याप्त नहीं। विवरण: https://qrflow.codes/privacy#scans
क्या कोई npm या PyPI पैकेज है?
npm: npm install qrflow\ (https://www.npmjs.com/package/qrflow), शून्य निर्भरताएँ, ESM और CommonJS, पूर्ण TypeScript प्रकार, Node 18+, Bun, Deno और Workers में चलता है; यह हर एंडपॉइंट को लपेटता है, 429s को पुनः प्रयास करता है, और verifyWebhook/parseWebhook शामिल करता है। Python: https://qrflow.codes/sdk/qrflow.py पर एक एकल-फ़ाइल क्लाइंट (केवल मानक पुस्तकालय) verify_webhook के साथ; एक PyPI पैकेज बाद में आएगा।
क्या यह Claude, ChatGPT, Cursor और Claude Code के साथ काम करता है?
हाँ। QRFLOW https://qrflow.codes/mcp. पर एक MCP सर्वर है। इसे एक कनेक्टर के रूप में जोड़ें, एक बार साइन इन करें, और सादे शब्दों में पूछें। ग्यारह टूल निर्माण, संपादन, रोकना, नामकरण, बल्क, विश्लेषण, छवियाँ और डोमेन को कवर करते हैं।
क्या मेरे अपने उपयोगकर्ता अपने QRFLOW खातों को मेरे ऐप से जोड़ सकते हैं?
हाँ, OAuth 2.0 के साथ। /api/oauth/register पर एक क्लाइंट पंजीकृत करें (कोई खाता आवश्यक नहीं), उपयोगकर्ताओं को PKCE के साथ /oauth/authorize पर भेजें, और उनके टोकन के साथ API को कॉल करें। कोड उनके खाते में उनकी योजना के तहत आते हैं।
मैं localhost पर वेबहुक कैसे परीक्षण करूँ?
अपने डेव सर्वर को एक टनल (cloudflared या ngrok) के साथ उजागर करें और उसके https पते को वेबहुक URL के रूप में उपयोग करें, फिर एक हस्ताक्षरित पिंग प्राप्त करने के लिए खाता › वेबहुक पर Test दबाएँ। वेबहुक URL सार्वजनिक https होने चाहिए; localhost और निजी पते अस्वीकार कर दिए जाते हैं।
यदि मैं Business रद्द करता हूँ तो मेरे एकीकरण का क्या होता है?
कुंजियाँ और वेबहुक 30 दिनों तक काम करते हैं, फिर 402 का उत्तर देते हैं। कोड, स्कैन और डोमेन खाते में रहते हैं। पुनः सदस्यता लेने से सब कुछ उसी कुंजियों के साथ वापस चालू हो जाता है।
मैं API के माध्यम से Google समीक्षा, Instagram, Wi-Fi या PDF कोड कैसे बनाऊँ?
GET /catalog प्रत्येक प्रकार को उसके फ़ील्ड के साथ सूचीबद्ध करता है। फिर प्रकार के type और फ़ील्ड के साथ POST /codes, प्रकारों के लिए subtype जोड़ते हुए: { type: 'url', destination_data: { subtype: 'googlereview', placeId: 'ChIJ…' } }, { type: 'wifi', destination_data: { ssid, password, encryption: 'WPA' } }, { type: 'url', destination_data: { subtype: 'instagram', handle: 'acme' } }।
क्या API कोड पर लोगो अपलोड कर सकता है?
अभी नहीं। डैशबोर्ड में लोगो जोड़ें; image.svg इसे शामिल करता है और has_logo आपको बताता है कि यह वहाँ है। रंग, फ्रेम और कैप्शन सभी API के माध्यम से सेट किए जा सकते हैं।
क्या API स्थिर है?
v1 केवल जोड़ता है; यह कभी नहीं हटाता या नाम नहीं बदलता। एक ब्रेकिंग परिवर्तन v2 के रूप में आएगा जिसमें v1 कम से कम बारह महीनों तक जीवित रखा जाएगा और ईमेल द्वारा 90 दिनों की सूचना दी जाएगी।
एजेंटों, टूल और सहायकों के लिए जो इसे पढ़ रहे हैं
मशीन-पठनीय
इस पृष्ठ पर सब कुछ एक ऐसे रूप में मौजूद है जिसे सॉफ़्टवेयर प्राप्त कर सकता है। यह सब उस कोड से उत्पन्न होता है जो API की सेवा करता है, इसलिए यह कभी पुराना नहीं होता।
| URL | यह क्या है | |
|---|---|---|
| llms-full.txt | https://qrflow.codes/llms-full.txt | यह पूरा संदर्भ Markdown के रूप में: अवधारणाएँ, हर endpoint, हर MCP टूल, recipes, समस्या निवारण, FAQ। इस पृष्ठ के समान स्रोत से उत्पन्न। |
| developers.md | https://qrflow.codes/developers.md | वही दस्तावेज़, उन टूल्स के लिए जो .md फ़ाइल लाते हैं। |
| llms.txt | https://qrflow.codes/llms.txt | सहायकों के लिए साइट इंडेक्स, यहाँ इंगित करता है। |
| API एक पृष्ठ में | https://qrflow.codes/qr-code-api | API क्या करता है, कब क्लाइंट-साइड लाइब्रेरी बेहतर उत्तर है, और इसकी लागत क्या है। इस संदर्भ का संक्षिप्त संस्करण, निर्माण के बजाय निर्णय लेने के लिए। |
| openapi.json | https://qrflow.codes/api/v1/openapi.json | OpenAPI 3.1। Postman, Insomnia, कोड जनरेटर, या ChatGPT Action में आयात करें। |
| MCP सर्वर | https://qrflow.codes/mcp | Streamable HTTP, डायनामिक रजिस्ट्रेशन के साथ OAuth या bearer के रूप में Business key। |
| server.json | https://qrflow.codes/.well-known/mcp/server.json | MCP रजिस्ट्री मैनिफेस्ट। |
| OAuth discovery | https://qrflow.codes/.well-known/oauth-authorization-server | RFC 8414 मेटाडेटा; संरक्षित-संसाधन दस्तावेज़ इसके बगल में है। |
| npm पैकेज | https://www.npmjs.com/package/qrflow | npm install qrflow। टाइप किया गया क्लाइंट, शून्य निर्भरताएँ, वेबहुक सत्यापन। Python सिंगल-फ़ाइल क्लाइंट https://qrflow.codes/sdk/qrflow.py. पर |
| GitHub | https://github.com/nativecodeapps/qrflow-sdk | क्लाइंट, OpenAPI स्नैपशॉट और Next.js, Workers, Express, FastAPI और Flask वेबहुक के लिए चलाने योग्य उदाहरण। Issues और PRs का स्वागत है। |
प्रश्न, विचार, एक प्रकार का कोड जो हमें जोड़ना चाहिए: hello@qrflow.codes। शर्तें: /terms। गोपनीयता: /privacy।