डेवलपर
API: बुनियादी बातें
VentionDesk API वही है जिसका इस्तेमाल इंटरफ़ेस करता है। ऑटोमेशन के लिए — Claude, आपकी अपनी स्क्रिप्ट, CI — आप एक API कुंजी से साइन इन करते हैं। सभी URL https://api.ventiondesk.com से शुरू होते हैं; सभी बॉडी और जवाब UTF-8 में JSON होते हैं।
API कुंजी से साइन इन करना (Signing in with an API key)
मालिक सेटिंग्स › API कुंजियाँ › “नई कुंजी” में कुंजी बनाता है। यह ठीक एक बार सादे टेक्स्ट में दिखती है।
हर अनुरोध इसे बेयरर टोकन के रूप में भेजता है:
curl https://api.ventiondesk.com/v1/tasks?status=todo \
-H "Authorization: Bearer vd_live_…"
इसे बदलने के लिए कोई अलग एंडपॉइंट नहीं है: VentionDesk कुंजी को उसके प्रीफ़िक्स से पहचानता है, हर अनुरोध पर उसे जाँचता है (वापस ली गई? समाप्त?) और फिर कुंजी के खाते के सेशन के साथ काम करता है। इसलिए कुंजी पर वही डेटाबेस नियम लागू होते हैं जो किसी व्यक्ति पर — वह केवल वही देखती है जो उसका स्कोप अनुमति देता है।
| प्रीफ़िक्स | प्रकार | किसके लिए |
|---|---|---|
vd_live_ | एजेंट | टास्क लेना और रिपोर्ट करना, प्रोजेक्ट पढ़ना, नोट लिखना, MCP |
vd_intake_ | इनटेक | केवल टिकट भेजना (POST /v1/intake/tickets), देखें टिकट इनटेक |
vd_pub_ | सार्वजनिक प्रोजेक्ट कुंजी | साइन इन कुंजी नहीं: यह फ़ॉर्म और वेब ऐप में होती है और केवल एक प्रोजेक्ट को रिपोर्ट भेज सकती है |
कुंजी की जगह OAuth से जुड़े किसी AI ऐप का साइन इन भी बेयरर टोकन के रूप में आ सकता है। यह एक एजेंट कुंजी की तरह गिना जाता है, उन अनुमतियों और प्रोजेक्ट के साथ जो व्यक्ति ने सहमति के समय चुने थे — कभी उस व्यक्ति की अपनी अनुमतियों के साथ नहीं — और डिस्कनेक्ट करते ही तुरंत ख़त्म हो जाता है।
एजेंट कुंजी एजेंट भूमिका वाला एक अलग खाता है। यह उन एंडपॉइंट के लिए है जिन पर API रेफ़रेंस में स्कोप दिखता है, साथ ही GET /v1/me और एजेंट रन के लिए। जिन एंडपॉइंट के लिए “मालिक” या “मालिक और स्टाफ़ सदस्य” चाहिए, उन्हें वेब इंटरफ़ेस साइन इन किए हुए व्यक्ति के सेशन से चलाता है; API कुंजी को वे 403 से जवाब देते हैं।
स्कोप (Scopes)
एजेंट कुंजी क्या कर सकती है, यह उसके स्कोप तय करते हैं:
| स्कोप | अर्थ | किसके लिए उपलब्ध |
|---|---|---|
projects:read | प्रोजेक्ट पढ़ें | एजेंट कुंजियाँ |
tasks:read | टास्क पढ़ें | एजेंट कुंजियाँ |
tasks:write | टास्क बनाएँ और रिपोर्ट करें | एजेंट कुंजियाँ |
tickets:read | टिकट पढ़ें | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
tickets:write | टिकट बनाएँ, आंतरिक नोट और ड्राफ़्ट लिखें | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
tickets:reply | टिकट पर ग्राहकों को ईमेल से जवाब दें | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
notes:write | नोट लिखें | एजेंट कुंजियाँ |
deployments:read | कमिट, पुल रिक्वेस्ट और डिप्लॉयमेंट पढ़ें | एजेंट कुंजियाँ |
agent:run | रन शुरू और ख़त्म करें | एजेंट कुंजियाँ |
intake:write | इनटेक से टिकट भेजें | केवल इनटेक कुंजियाँ |
invoices:write | इनवॉइस ड्राफ़्ट बनाएँ और लाइन आइटम बदलें | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
errors:read | प्रोजेक्ट्स की त्रुटियाँ पढ़ें | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
errors:write | त्रुटियों को हल के रूप में चिह्नित करें | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
time:read | प्रोजेक्ट्स की टाइम एंट्री पढ़ें (दरों और राशियों के बिना) | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
stats:read | रिपोर्ट के लिए प्रोजेक्ट्स के मुख्य आँकड़े पढ़ें (पैसे के बिना) | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
quotes:write | कोटेशन ड्राफ़्ट बनाएँ और बदलें | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
roadmap:write | रोडमैप चरण बनाएँ, बदलें और क्रम में लगाएँ | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
ideas:write | आइडिया बनाएँ | एजेंट कुंजियाँ, केवल तब जब वर्कस्पेस इसे स्पष्ट रूप से चालू करे |
कोई स्कोप ठीक उन्हीं एंडपॉइंट पर दिखता है जो उसे मानते हैं — API रेफ़रेंस हर एंडपॉइंट के साथ उसका नाम बताता है। deployments:read किसी एंडपॉइंट पर नहीं दिखता: यह मिरर किए गए कमिट, पुल रिक्वेस्ट और डिप्लॉयमेंट के डेटाबेस नियमों के ज़रिए लागू होता है।
प्रोजेक्ट बाइंडिंग (Project binding)
एक कुंजी सभी प्रोजेक्ट या एक चयन पर लागू होती है। बंधी हुई कुंजी केवल अपने प्रोजेक्ट का डेटा देखती है — और जान-बूझकर बिना प्रोजेक्ट वाला कुछ भी नहीं, जैसे वे टिकट जो अभी किसी प्रोजेक्ट को नहीं सौंपे गए। अपने प्रोजेक्ट से बाहर की पंक्ति पर API 404 या 403 से जवाब देता है। इनटेक कुंजी हमेशा ठीक एक प्रोजेक्ट से बंधी होती है।
दायरा बदलने के लिए नई कुंजी ज़रूरी नहीं। स्कोप और प्रोजेक्ट मालिक कुंजी सूची में “अनुमतियाँ” के तहत बदलता है; अगला अनुरोध पहले से नए दायरे के साथ काम करता है। वापस ली गई या समाप्त कुंजी अगले अनुरोध पर अस्वीकार कर दी जाती है।
त्रुटियाँ (Errors)
हर त्रुटि जवाब का आकार एक जैसा होता है:
{ "ok": false, "error": "Diese Aufgabe gibt es nicht.", "code": "not_found" }
error लोगों के लिए एक जर्मन वाक्य है, code प्रोग्राम के लिए एक स्थिर अंग्रेज़ी मान। आम जवाब:
| स्थिति | code | मतलब |
|---|---|---|
| 400 | validation_error | क्वेरी या पाथ पैरामीटर अमान्य |
| 401 | unauthorized | कोई कुंजी नहीं या अमान्य कुंजी |
| 403 | forbidden | भूमिका, स्कोप या प्रोजेक्ट पर्याप्त नहीं |
| 404 | not_found | मौजूद नहीं — या इस कुंजी के लिए नहीं |
| 409 | conflict | स्थिति मेल नहीं खाती, जैसे टास्क पहले ही लिया जा चुका है |
| 413 | payload_too_large | बॉडी 1 MB से ज़्यादा |
| 422 | validation_error | बॉडी अमान्य; error आपत्ति वाले पहले फ़ील्ड को field: message के रूप में बताता है |
| 423 | betrieb_gesperrt | वर्कस्पेस निलंबित है, जैसे क्योंकि कोई पेड सब्सक्रिप्शन नहीं चल रहा |
| 429 | rate_limited | बहुत ज़्यादा अनुरोध, थोड़ा इंतज़ार करें |
| 500 | internal_error | VentionDesk में त्रुटि |
हर जवाब x-request-id हेडर में एक ID देता है। अगर आप ख़ुद एक भेजते हैं (128 अक्षरों तक), तो उसी का इस्तेमाल होता है। कुछ गड़बड़ होने पर इसे सपोर्ट को दें।
रेट लिमिट (Rate limits)
प्रति मिनट गिना जाता है, प्रति कुंजी या प्रति IP पता:
| क्षेत्र | प्रति मिनट अनुरोध |
|---|---|
सभी /v1 एंडपॉइंट मिलाकर | 300 |
POST /mcp | 60 |
| टिकट इनटेक (फ़ॉर्म, ब्राउज़र, सर्वर) | प्रति IP 10 |
भुगतान लिंक /pay/… | प्रति IP 20 |
सीमा से ऊपर API 429 और rate_limited से जवाब देता है; RateLimit और RateLimit-Policy हेडर मौजूदा गिनती और सीमा बताते हैं।
सूचियाँ और फ़िल्टर (Lists and filters)
सूची वाले एंडपॉइंट क्वेरी पैरामीटर से फ़िल्टर करते हैं और limit से सीमित करते हैं; कर्सर या ऑफ़सेट वाले पेज नहीं हैं। उदाहरण:
GET /v1/tasks?projectSlug=shop&status=todo&claimable=true&limit=20— वे टास्क जो अभी लिए जा सकते हैं।GET /v1/projects?status=active— सक्रिय प्रोजेक्ट।
कौन-सा एंडपॉइंट कौन-से पैरामीटर जानता है और कौन-से फ़ील्ड लौटाता है, यह API रेफ़रेंस में दिया गया है — उसी कॉन्ट्रैक्ट से पढ़ा गया, जिससे VentionDesk अनुरोध जाँचता है।
एजेंट का सामान्य राउंड (The typical round of an agent)
GET /v1/tasks?claimable=true— क्या करना है?POST /v1/tasks/:id/claim— टास्क को एटॉमिक रूप से लें। दो रन को कभी एक ही टास्क नहीं मिलता।- काम करें; बीच में
POST /v1/tasks/:id/resultके साथ"state": "arbeitet", जीवित होने के संकेत के रूप में। POST /v1/tasks/:id/resultके साथkontrolle,frage,master,blockiertयाerledigt—kontrolleऔरerledigtके साथevidenceमें सबूत भी दें।
अगर आप इसे ख़ुद नहीं बनाना चाहते, तो Claude और MCP इस्तेमाल करें।