Get started
HTTP API
HTTP API
आधार URL: https://clawhub.ai (डिफ़ॉल्ट).
सभी v1 पथ /api/v1/... के अंतर्गत हैं।
लेगेसी /api/... और /api/cli/... संगतता के लिए बने हुए हैं (DEPRECATIONS.md देखें)।
OpenAPI: /api/v1/openapi.json.
सार्वजनिक कैटलॉग पुनः-उपयोग
तृतीय-पक्ष डायरेक्टरियाँ ClawHub Skills को सूचीबद्ध या खोजने के लिए सार्वजनिक रीड एंडपॉइंट का उपयोग कर सकती हैं। कृपया परिणामों को कैश करें, 429/Retry-After का पालन करें, उपयोगकर्ताओं को प्रामाणिक ClawHub सूची (https://clawhub.ai/<owner>/skills/<slug>) पर वापस लिंक करें, और यह संकेत देने से बचें कि ClawHub तृतीय-पक्ष साइट का समर्थन करता है। सार्वजनिक API सतह के बाहर छिपी, निजी, या मॉडरेशन-द्वारा-अवरुद्ध सामग्री को मिरर करने का प्रयास न करें।
वेब स्लग शॉर्टकट रजिस्ट्री परिवारों में रिज़ॉल्व होते हैं, लेकिन API क्लाइंट को रीड एंडपॉइंट द्वारा लौटाए गए प्रामाणिक URL का उपयोग करना चाहिए, रूट प्राथमिकता को फिर से बनाने के बजाय।
दर सीमाएँ
प्रवर्तन मॉडल:
-
अनाम अनुरोध: प्रति IP लागू।
-
प्रमाणित अनुरोध (वैध Bearer टोकन): प्रति उपयोगकर्ता बकेट लागू।
-
यदि टोकन गुम/अमान्य है, तो व्यवहार IP प्रवर्तन पर वापस चला जाता है।
-
प्रमाणित राइट एंडपॉइंट को एक खाली
Unauthorizedनहीं लौटाना चाहिए जब सर्वर कारण जानता हो। गुम टोकन, अमान्य/रद्द टोकन, और हटाए गए/प्रतिबंधित/निष्क्रिय खाते, प्रत्येक को कार्रवाई योग्य पाठ मिलना चाहिए ताकि CLI क्लाइंट उपयोगकर्ताओं को बता सकें कि उन्हें किसने रोका। -
रीड: प्रति IP 3000/मिनट, प्रति कुंजी 12000/मिनट
-
राइट: प्रति IP 300/मिनट, प्रति कुंजी 3000/मिनट
-
डाउनलोड: प्रति IP 1200/मिनट, प्रति कुंजी 6000/मिनट (डाउनलोड एंडपॉइंट)
हेडर:
- लेगेसी संगतता:
X-RateLimit-Limit,X-RateLimit-Reset - मानकीकृत:
RateLimit-Limit,RateLimit-Reset 429पर:X-RateLimit-Remaining: 0औरRateLimit-Remaining: 0429पर:Retry-After
हेडर अर्थ:
X-RateLimit-Reset: निरपेक्ष Unix epoch सेकंडRateLimit-Reset: रीसेट तक सेकंड (विलंब)X-RateLimit-Remaining/RateLimit-Remaining: मौजूद होने पर सटीक शेष बजट। शार्ड किए गए सफल अनुरोध अनुमानित वैश्विक मान लौटाने के बजाय इस हेडर को छोड़ देते हैं।Retry-After:429पर फिर से प्रयास करने से पहले प्रतीक्षा करने के सेकंड (विलंब)
उदाहरण 429 प्रतिक्रिया:
HTTP/2 429content-type: text/plain; charset=utf-8x-ratelimit-limit: 20x-ratelimit-remaining: 0x-ratelimit-reset: 1771404540ratelimit-limit: 20ratelimit-remaining: 0ratelimit-reset: 34retry-after: 34 Rate limit exceededक्लाइंट मार्गदर्शन:
- यदि
Retry-Afterमौजूद है, तो फिर से प्रयास करने से पहले उतने सेकंड प्रतीक्षा करें। - समकालिक पुनः-प्रयासों से बचने के लिए जिटरयुक्त बैकऑफ़ का उपयोग करें।
- यदि
Retry-Afterगुम है, तोRateLimit-Resetपर वापस जाएँ (याX-RateLimit-Resetसे गणना करें)।
IP स्रोत:
- विश्वसनीय क्लाइंट IP हेडर, जिनमें
cf-connecting-ipशामिल है, का उपयोग केवल तब करता है जब डिप्लॉयमेंट स्पष्ट रूप से विश्वसनीय फ़ॉरवर्डेड हेडर सक्षम करता है। - ClawHub किनारे पर क्लाइंट IP की पहचान करने के लिए विश्वसनीय फ़ॉरवर्डिंग हेडर का उपयोग करता है।
- यदि कोई विश्वसनीय क्लाइंट IP उपलब्ध नहीं है, तो अनाम अनुरोध फ़ॉलबैक बकेट का उपयोग करते हैं जो केवल दर-सीमा प्रकार के दायरे में होते हैं। इन फ़ॉलबैक बकेट में कॉलर-द्वारा-आपूर्ति किए गए पथ, स्लग, पैकेज नाम, संस्करण, क्वेरी स्ट्रिंग, या अन्य आर्टिफैक्ट पैरामीटर शामिल नहीं होते।
त्रुटि प्रतिक्रियाएँ
सार्वजनिक v1 त्रुटि प्रतिक्रियाएँ content-type: text/plain; charset=utf-8 के साथ सादा पाठ होती हैं।
इसमें वैलिडेशन विफलताएँ (400), गुम सार्वजनिक संसाधन (404), प्रमाणीकरण और
अनुमति विफलताएँ (401/403), दर सीमाएँ (429), और अवरुद्ध डाउनलोड शामिल हैं। क्लाइंट को
प्रतिक्रिया बॉडी को मानव-पठनीय स्ट्रिंग के रूप में पढ़ना चाहिए। अज्ञात क्वेरी पैरामीटर
संगतता के लिए अनदेखे किए जाते हैं, लेकिन अमान्य मानों वाले पहचाने गए क्वेरी पैरामीटर
400 लौटाते हैं।
सार्वजनिक एंडपॉइंट (कोई प्रमाणीकरण नहीं)
GET /api/v1/search
क्वेरी पैरामीटर:
q(आवश्यक): क्वेरी स्ट्रिंगlimit(वैकल्पिक): पूर्णांकhighlightedOnly(वैकल्पिक): हाइलाइट किए गए Skills तक फ़िल्टर करने के लिएtruenonSuspiciousOnly(वैकल्पिक): संदिग्ध (flagged.suspicious) Skills छिपाने के लिएtruenonSuspicious(वैकल्पिक):nonSuspiciousOnlyके लिए लेगेसी उपनाम
प्रतिक्रिया:
{ "results": [ { "score": 0.123, "slug": "gifgrep", "displayName": "GifGrep", "summary": "…", "version": "1.2.3", "updatedAt": 1730000000000, "ownerHandle": "openclaw", "owner": { "handle": "openclaw", "displayName": "OpenClaw", "image": "https://example.com/avatar.png" } } ]}टिप्पणियाँ:
- परिणाम प्रासंगिकता क्रम में लौटाए जाते हैं (एम्बेडिंग समानता + सटीक स्लग/नाम टोकन बूस्ट + एक छोटा लोकप्रियता प्रायर)।
- प्रासंगिकता लोकप्रियता से अधिक मजबूत है। सटीक स्लग या डिस्प्ले-नाम टोकन मिलान, बहुत अधिक एंगेजमेंट वाले ढीले मिलान से ऊपर रैंक कर सकता है।
- ASCII पाठ को शब्द और विराम-चिह्न सीमाओं पर टोकनाइज़ किया जाता है। उदाहरण के लिए,
personal-mapमें स्वतंत्रmapटोकन होता है, जबकिamap-jsapi-skillमेंamap,jsapi, औरskillहोते हैं; इसलिएmapखोजने परpersonal-mapकोamap-jsapi-skillकी तुलना में अधिक मजबूत lexical मिलान मिलता है। - लोकप्रियता लॉग-स्केल की जाती है और कैप की जाती है। जब क्वेरी पाठ का मिलान कमजोर हो, तो उच्च-एंगेजमेंट Skills नीचे रैंक कर सकते हैं।
- संदिग्ध या छिपी हुई मॉडरेशन स्थिति, कॉलर फ़िल्टर और वर्तमान मॉडरेशन स्थिति के आधार पर, किसी Skill को सार्वजनिक खोज से हटा सकती है।
प्रकाशक खोजयोग्यता मार्गदर्शन:
- वे शब्द जिन्हें उपयोगकर्ता सचमुच खोजेंगे, डिस्प्ले नाम, सारांश, और टैग में रखें। स्वतंत्र स्लग टोकन का उपयोग केवल तब करें जब वह एक स्थिर पहचान भी हो जिसे आप बनाए रखना चाहते हैं।
- केवल एक क्वेरी का पीछा करने के लिए स्लग का नाम न बदलें, जब तक नया स्लग बेहतर दीर्घकालिक प्रामाणिक नाम न हो। पुराने स्लग रीडायरेक्ट उपनाम बन जाते हैं, लेकिन प्रामाणिक URL, प्रदर्शित स्लग, और भविष्य के खोज डाइजेस्ट नए स्लग का उपयोग करते हैं।
- नाम-बदलाव उपनाम पुराने URL और रजिस्ट्री के माध्यम से रिज़ॉल्व होने वाले इंस्टॉल के लिए रिज़ॉल्यूशन संरक्षित रखते हैं, लेकिन खोज रैंकिंग नाम बदलने के इंडेक्स होने के बाद प्रामाणिक Skill मेटाडेटा पर आधारित होती है। मौजूदा आँकड़े Skill के साथ रहते हैं।
- यदि कोई Skill अप्रत्याशित रूप से अदृश्य है, तो रैंकिंग-संबंधी मेटाडेटा बदलने से पहले लॉग इन रहते हुए पहले
clawhub inspect @owner/slugसे मॉडरेशन स्थिति जाँचें।
GET /api/v1/skills
क्वेरी पैरामीटर:
limit(वैकल्पिक): पूर्णांक (1–200)cursor(वैकल्पिक): किसी भी गैर-trendingसॉर्ट के लिए पेजिनेशन कर्सरsort(वैकल्पिक):updated(डिफ़ॉल्ट),recommended(उपनाम:default),createdAt(उपनाम:newest),downloads,stars(उपनाम:rating), लेगेसी इंस्टॉल उपनामinstallsCurrent/installs/installsAllTimedownloadsपर मैप होते हैं,trendingnonSuspiciousOnly(वैकल्पिक): संदिग्ध (flagged.suspicious) Skills छिपाने के लिएtruenonSuspicious(वैकल्पिक):nonSuspiciousOnlyके लिए लेगेसी उपनाम
अमान्य sort मान 400 लौटाते हैं।
टिप्पणियाँ:
recommendedएंगेजमेंट और नवीनता संकेतों का उपयोग करता है।trendingपिछले 7 दिनों के इंस्टॉल के आधार पर रैंक करता है (टेलीमेट्री-आधारित)।createdAtनए-Skill क्रॉल के लिए स्थिर है; मौजूदा Skills दोबारा प्रकाशित होने परupdatedबदलता है।- जब
nonSuspiciousOnly=trueहो, तो कर्सर-आधारित सॉर्ट किसी पेज परlimitसे कम आइटम लौटा सकते हैं क्योंकि संदिग्ध Skills पेज पुनर्प्राप्ति के बाद फ़िल्टर किए जाते हैं। - मौजूद होने पर पेजिनेशन जारी रखने के लिए
nextCursorका उपयोग करें। छोटा पेज अपने आप में परिणामों के अंत का अर्थ नहीं है।
प्रतिक्रिया:
{ "items": [ { "slug": "gifgrep", "displayName": "GifGrep", "summary": "…", "topics": ["Productivity"], "tags": { "latest": "1.2.3" }, "stats": {}, "createdAt": 0, "updatedAt": 0, "latestVersion": { "version": "1.2.3", "createdAt": 0, "changelog": "…" }, "metadata": { "os": ["macos"], "systems": ["aarch64-darwin"] } } ], "nextCursor": null}GET /api/v1/skills/{slug}
प्रतिक्रिया:
{ "skill": { "slug": "gifgrep", "displayName": "GifGrep", "summary": "…", "topics": ["Productivity"], "tags": { "latest": "1.2.3" }, "stats": {}, "createdAt": 0, "updatedAt": 0 }, "latestVersion": { "version": "1.2.3", "createdAt": 0, "changelog": "…" }, "metadata": { "os": ["macos"], "systems": ["aarch64-darwin"] }, "owner": { "handle": "steipete", "displayName": "Peter", "image": null }, "moderation": { "isSuspicious": false, "isMalwareBlocked": false, "verdict": "clean", "reasonCodes": [], "summary": null, "engineVersion": "v2.0.0", "updatedAt": 0 }}टिप्पणियाँ:
- स्वामी नाम-बदलाव/मर्ज फ़्लो द्वारा बनाए गए पुराने स्लग प्रामाणिक Skill पर रिज़ॉल्व होते हैं।
metadata.os: Skill frontmatter में घोषित OS प्रतिबंध (उदा.["macos"],["linux"])। घोषित न होने परnull।metadata.systems: Nix सिस्टम लक्ष्य (उदा.["aarch64-darwin", "x86_64-linux"])। घोषित न होने परnull।- यदि Skill में कोई प्लेटफ़ॉर्म मेटाडेटा नहीं है, तो
metadatanullहै। moderationकेवल तब शामिल होता है जब Skill फ़्लैग किया गया हो या स्वामी उसे देख रहा हो।
GET /api/v1/skills/{slug}/moderation
संरचित मॉडरेशन स्थिति लौटाता है।
प्रतिक्रिया:
{ "moderation": { "isSuspicious": true, "isMalwareBlocked": false, "verdict": "suspicious", "reasonCodes": ["suspicious.dynamic_code_execution"], "summary": "Detected: suspicious.dynamic_code_execution", "engineVersion": "v2.0.0", "updatedAt": 0, "legacyReason": null, "evidence": [ { "code": "suspicious.dynamic_code_execution", "severity": "critical", "file": "index.ts", "line": 3, "message": "Dynamic code execution detected.", "evidence": "" } ] }}टिप्पणियाँ:
- स्वामी और मॉडरेटर छिपे हुए Skills के मॉडरेशन विवरणों तक पहुँच सकते हैं।
- सार्वजनिक कॉलर केवल पहले से-फ़्लैग किए गए दृश्यमान Skills के लिए
200प्राप्त करते हैं। - सार्वजनिक कॉलर के लिए साक्ष्य संपादित किया जाता है और कच्चे स्निपेट केवल स्वामी/मॉडरेटर के लिए शामिल होते हैं।
POST /api/v1/skills/{slug}/report
मॉडरेटर समीक्षा के लिए Skill की रिपोर्ट करें। रिपोर्ट Skill-स्तर की होती हैं, वैकल्पिक रूप से किसी संस्करण से जुड़ी होती हैं, और Skill रिपोर्ट कतार को फ़ीड करती हैं।
प्रमाणीकरण:
- API टोकन आवश्यक है।
अनुरोध:
{ "reason": "Suspicious install step", "version": "1.2.3" }प्रतिक्रिया:
{ "ok": true, "reported": true, "alreadyReported": false, "reportId": "skillReports:...", "skillId": "skills:...", "reportCount": 1}GET /api/v1/skills/-/reports
Skill रिपोर्ट इनटेक के लिए मॉडरेटर/प्रशासक एंडपॉइंट।
क्वेरी पैरामीटर:
status(वैकल्पिक):open(डिफ़ॉल्ट),confirmed,dismissed, याalllimit(वैकल्पिक): पूर्णांक (1-200)cursor(वैकल्पिक): पेजिनेशन कर्सर
प्रतिक्रिया:
{ "items": [ { "reportId": "skillReports:...", "skillId": "skills:...", "skillVersionId": "skillVersions:...", "slug": "gifgrep", "displayName": "GifGrep", "version": "1.2.3", "reason": "Suspicious install step", "status": "open", "createdAt": 1730000000000, "reporter": { "userId": "users:...", "handle": "reporter", "displayName": "Reporter" }, "triagedAt": null, "triagedBy": null, "triageNote": null } ], "nextCursor": null, "done": true}POST /api/v1/skills/-/reports/{reportId}/triage
Skill रिपोर्टों को हल करने या फिर से खोलने के लिए मॉडरेटर/प्रशासक एंडपॉइंट।
अनुरोध:
{ "status": "confirmed", "note": "Reviewed and hid affected version.", "finalAction": "hide" }confirmed और dismissed के लिए note आवश्यक है; status को वापस open पर सेट करते समय
इसे छोड़ा जा सकता है। उसी ऑडिट योग्य वर्कफ़्लो में Skill छिपाने के लिए ट्रायेज की गई
रिपोर्ट के साथ finalAction: "hide" पास करें।
GET /api/v1/skills/{slug}/versions
क्वेरी पैरामीटर:
limit(वैकल्पिक): पूर्णांकcursor(वैकल्पिक): पेजिनेशन कर्सर
GET /api/v1/skills/{slug}/versions/{version}
संस्करण मेटाडेटा + फ़ाइल सूची लौटाता है।
version.securityउपलब्ध होने पर सामान्यीकृत स्कैन सत्यापन स्थिति और स्कैनर विवरण (VirusTotal + LLM) शामिल करता है।
GET /api/v1/skills/{slug}/scan
Skill संस्करण के लिए सुरक्षा स्कैन सत्यापन विवरण लौटाता है।
क्वेरी पैरामीटर:
version(वैकल्पिक): विशिष्ट संस्करण स्ट्रिंग।tag(वैकल्पिक): टैग किए गए संस्करण को रिज़ॉल्व करें (उदाहरण के लिएlatest)।
टिप्पणियाँ:
- यदि
versionऔरtagमें से कोई भी नहीं दिया गया है, तो नवीनतम संस्करण का उपयोग करता है। - सामान्यीकृत सत्यापन स्थिति और स्कैनर-विशिष्ट विवरण शामिल करता है।
security.hasScanResultकेवल तबtrueहोता है जब किसी स्कैनर ने निर्णायक निर्णय (clean,suspicious, याmalicious) दिया हो।moderationनवीनतम संस्करण से निकला वर्तमान कौशल-स्तर का मॉडरेशन स्नैपशॉट है।- किसी ऐतिहासिक संस्करण को क्वेरी करते समय,
moderationऔरsecurityको समान संस्करण संदर्भ मानने से पहलेmoderation.matchesRequestedVersionऔरmoderation.sourceVersionजांचें।
POST /api/v1/skills/-/scan
नए ClawScan जॉब के लिए प्रमाणित सबमिट एंडपॉइंट।
स्थानीय अपलोड स्कैन अब समर्थित नहीं हैं। multipart/form-data या { "source": { "kind": "upload" } } का उपयोग करने वाले अनुरोध 410 लौटाते हैं।
प्रकाशित स्कैन JSON का उपयोग करते हैं:
{ "source": { "kind": "published", "slug": "gifgrep", "version": "1.2.3" }, "update": false}नोट्स:
- स्कैन अनुरोध पेलोड और डाउनलोड करने योग्य रिपोर्ट प्रतिधारण अवधि के बाद स्कैन-अनुरोध स्टोर से समाप्त हो जाते हैं।
- प्रकाशित स्कैन के लिए स्वामी/प्रकाशक प्रबंधन पहुंच, या प्लेटफॉर्म मॉडरेटर/एडमिन अधिकार चाहिए।
- प्रकाशित स्कैन केवल तब वापस लिखते हैं जब
update: trueहो और स्कैन सफलतापूर्वक पूरा हो। - प्रतिक्रिया
202होती है, जिसमें{ "ok": true, "scanId": "...", "jobId": "...", "status": "queued", "sourceKind": "published", "update": false, "queue": { "queuedAhead": 0, "queuedAheadIsEstimate": false, "position": 1, "running": 0, "runningIsEstimate": false, "note": "Scans are asynchronous and may take time to complete." } }होता है। - स्कैन जॉब असिंक्रोनस होते हैं। मैनुअल स्कैन अनुरोधों को सामान्य प्रकाशन/बैकफिल कार्य से आगे प्राथमिकता दी जाती है, लेकिन पूरा होना फिर भी वर्कर उपलब्धता पर निर्भर करता है।
GET /api/v1/skills/-/scan/{scanId}
सबमिट किए गए स्कैन के लिए प्रमाणित पोल एंडपॉइंट।
- कतारबद्ध/चल रहा/सफल/विफल स्थिति लौटाता है।
- कतारबद्ध रहते समय
queue.queuedAheadऔरqueue.positionलौटाता है ताकि क्लाइंट दिखा सकें कि अनुरोध से आगे कितने प्राथमिकता प्राप्त मैनुअल स्कैन हैं। बहुत बड़ी कतारें सीमित की जाती हैं औरqueuedAheadIsEstimate: trueके साथ रिपोर्ट की जाती हैं। - उपलब्ध होने पर,
reportमेंclawscan,skillspector,staticAnalysis, औरvirustotalसेक्शन होते हैं। - विफल स्कैन जॉब
lastErrorके साथstatus: "failed"लौटाते हैं।
GET /api/v1/skills/-/scan/{scanId}/download
प्रमाणित रिपोर्ट आर्काइव एंडपॉइंट।
- सफल स्कैन आवश्यक है; गैर-टर्मिनल स्कैन
409लौटाते हैं। manifest.json,clawscan.json,skillspector.json,static-analysis.json,virustotal.json, औरREADME.mdके साथ ZIP लौटाता है।
GET /api/v1/skills/-/scan/download/{name}?version=<version>&kind=skill|plugin
सबमिट किए गए संस्करणों के लिए प्रमाणित संग्रहीत रिपोर्ट आर्काइव एंडपॉइंट।
- कौशल या Plugin के लिए स्वामी/प्रकाशक प्रबंधन पहुंच, या प्लेटफॉर्म मॉडरेटर/एडमिन अधिकार चाहिए।
- सटीक सबमिट किए गए संस्करण के लिए संग्रहीत स्कैन परिणाम लौटाता है, जिसमें ब्लॉक किए गए या छिपे हुए संस्करण भी शामिल हैं।
kindडिफॉल्ट रूप सेskillहोता है; Plugin/पैकेज स्कैन के लिएkind=pluginका उपयोग करें।- स्कैन-अनुरोध डाउनलोड जैसा ही ZIP आकार लौटाता है।
POST /api/v1/skills/-/scan/batch
केवल-एडमिन कैनॉनिकल बैच रीस्कैन रूट। यह लेगेसी POST /api/v1/skills/-/rescan-batch जैसा ही पेलोड आकार स्वीकार करता है।
POST /api/v1/skills/-/scan/batch/status
केवल-एडमिन कैनॉनिकल बैच स्थिति रूट। यह { "jobIds": ["..."] } स्वीकार करता है और लेगेसी POST /api/v1/skills/-/rescan-batch/status जैसे ही समेकित काउंटर लौटाता है।
GET /api/v1/skills/{slug}/verify
clawhub skill verify द्वारा उपयोग किया गया Skill Card सत्यापन एनवेलप लौटाता है।
क्वेरी पैरामीटर:
version(वैकल्पिक): विशिष्ट संस्करण स्ट्रिंग।tag(वैकल्पिक): टैग किया गया संस्करण हल करें (उदाहरण के लिएlatest)।
नोट्स:
okकेवल तबtrueहोता है जब चुने गए संस्करण में जनरेट किया गया Skill Card हो, वह मॉडरेशन द्वारा मालवेयर-ब्लॉक न हो, और ClawScan सत्यापन साफ हो।- कौशल पहचान, प्रकाशक पहचान, और चुने गए संस्करण का मेटाडेटा शीर्ष-स्तरीय एनवेलप फील्ड (
slug,displayName,publisherHandle,version,resolvedFrom,tag,createdAt) हैं ताकि शेल ऑटोमेशन नेस्टेड रैपर अनपैक किए बिना उन्हें पढ़ सके। securityशीर्ष-स्तरीय ClawScan/सुरक्षा निर्णय है। ऑटोमेशन कोok,decision,reasons, औरsecurity.statusपर आधारित होना चाहिए।security.signalsमें सहायक स्कैनर साक्ष्य होते हैं, जैसेstaticScan,virusTotal, औरskillSpector।security.signals.dependencyRegistryv1 प्रतिक्रिया संगतता के लिए रखा गया है, लेकिन निर्भरता रजिस्ट्री अस्तित्व स्कैनर रिटायर हो चुका है और यह कुंजी हमेशाnullहोती है।provenanceकेवल तबserver-resolved-github-importहोता है जब ClawHub ने प्रकाशन या आयात के दौरान GitHub रेपो/ref/commit/path को हल करके संग्रहीत किया हो; अन्यथा यहunavailableहोता है।
POST /api/v1/skills/-/security-verdicts
सटीक कौशल संस्करणों के लिए वर्तमान कॉम्पैक्ट सुरक्षा निर्णय लौटाता है। यह संग्रह एंडपॉइंट उन क्लाइंट के लिए है जो पहले से जानते हैं कि उन्हें कौन से इंस्टॉल किए गए ClawHub कौशल संस्करण दिखाने हैं, जैसे OpenClaw Control UI।
अनुरोध:
{ "items": [{ "slug": "gifgrep", "version": "1.2.3" }]}नोट्स:
itemsमें 1-100 अद्वितीय{ slug, version }जोड़े होने चाहिए।- परिणाम प्रति आइटम होते हैं; कोई एक अनुपस्थित कौशल या संस्करण पूरी प्रतिक्रिया को विफल नहीं करता।
- प्रतिक्रिया केवल-सुरक्षा है। इसमें Skill Card डेटा, जनरेटेड कार्ड स्थिति, आर्टिफैक्ट फाइल सूचियां, या विस्तृत स्कैनर पेलोड शामिल नहीं हैं।
security.signalsमें केवल स्थिति-स्तर का सहायक साक्ष्य होता है; पूर्ण स्कैनर विवरण के लिए/scanया ClawHub सुरक्षा-ऑडिट पेज का उपयोग करें।security.signals.dependencyRegistryv1 प्रतिक्रिया संगतता के लिए रखा गया है, लेकिन निर्भरता रजिस्ट्री अस्तित्व स्कैनर रिटायर हो चुका है और यह कुंजी हमेशाnullहोती है।- Skill Card की अनुपस्थिति इस एंडपॉइंट के
ok,decision, याreasonsको प्रभावित नहीं करती; क्लाइंट को कार्ड सामग्री चाहिए होने पर इंस्टॉल किए गएskill-card.mdको स्थानीय रूप से पढ़ना चाहिए। - जब आपको एकल-कौशल Skill Card सत्यापन एनवेलप चाहिए हो तो
/verifyका उपयोग करें, जनरेटेड कार्ड मार्कडाउन चाहिए हो तो/cardका उपयोग करें, और विस्तृत स्कैनर डेटा चाहिए हो तो/scanका उपयोग करें।
प्रतिक्रिया:
{ "schema": "clawhub.skill.security-verdicts.v1", "items": [ { "ok": true, "decision": "pass", "reasons": [], "requestedSlug": "gifgrep", "slug": "gifgrep", "displayName": "GifGrep", "publisherHandle": "steipete", "publisherDisplayName": "Peter", "requestedVersion": "1.2.3", "version": "1.2.3", "createdAt": 0, "checkedAt": 0, "skillUrl": "https://clawhub.ai/steipete/skills/gifgrep", "securityAuditUrl": "https://clawhub.ai/steipete/skills/gifgrep/security-audit?version=1.2.3", "security": { "status": "clean", "passed": true, "signals": { "staticScan": { "status": "clean", "reasonCodes": [] }, "virusTotal": null, "skillSpector": null, "dependencyRegistry": null } } }, { "ok": false, "decision": "fail", "reasons": ["version.not_found"], "requestedSlug": "missing-version", "requestedVersion": "1.0.0", "error": { "code": "version_not_found", "message": "Version not found" }, "security": null } ]}GET /api/v1/skills/{slug}/file
कच्ची टेक्स्ट सामग्री लौटाता है।
क्वेरी पैरामीटर:
path(आवश्यक)version(वैकल्पिक)tag(वैकल्पिक)
नोट्स:
- नवीनतम संस्करण पर डिफ़ॉल्ट होता है।
- फ़ाइल आकार सीमा: 200KB.
GET /api/v1/packages
इनके लिए एकीकृत कैटलॉग endpoint:
- skills
- कोड plugins
- बंडल plugins
क्वेरी पैरामीटर:
limit(वैकल्पिक): integer (1–100)cursor(वैकल्पिक): पेजिनेशन कर्सरfamily(वैकल्पिक):skill,code-plugin, याbundle-pluginchannel(वैकल्पिक):official,community, याprivateisOfficial(वैकल्पिक):trueयाfalsesort(वैकल्पिक):updated(डिफ़ॉल्ट),recommended,trending,downloads, लेगेसी aliasinstallscategory(वैकल्पिक): plugin category फ़िल्टर। केवल तब समर्थित जब अनुरोध plugin packages (/api/v1/plugins,/api/v1/code-plugins,/api/v1/bundle-plugins, या package endpoints जिनमेंfamily=code-plugin/family=bundle-plugin) तक scoped हो। नियंत्रित categories और legacy v1 filter aliasesGET /api/v1/pluginsके तहत दस्तावेज़ित हैं।
नोट्स:
family,channel,isOfficial,featured,highlightedOnly, याsortके अमान्य मान400लौटाते हैं। अज्ञात क्वेरी पैरामीटर अनदेखे किए जाते हैं।GET /api/v1/code-pluginsऔरGET /api/v1/bundle-pluginsfixed-family aliases बने रहते हैं।- Skill entries skill registry द्वारा समर्थित रहती हैं और अब भी केवल
POST /api/v1/skillsके माध्यम से प्रकाशित की जा सकती हैं। POST /api/v1/packagesअब भी केवल code-plugin और bundle-plugin releases के लिए है।- अनाम callers केवल सार्वजनिक package channels देखते हैं।
- authenticated callers सूची/search results में उन publishers के private packages देख सकते हैं जिनसे वे संबंधित हैं।
channel=privateकेवल वे packages लौटाता है जिन्हें authenticated caller पढ़ सकता है।
GET /api/v1/packages/search
skills + plugin packages में एकीकृत कैटलॉग खोज।
क्वेरी पैरामीटर:
q(आवश्यक): क्वेरी stringlimit(वैकल्पिक): integer (1–100)family(वैकल्पिक):skill,code-plugin, याbundle-pluginchannel(वैकल्पिक):official,community, याprivateisOfficial(वैकल्पिक):trueयाfalsecategory(वैकल्पिक): plugin category फ़िल्टर। केवल तब समर्थित जब अनुरोध plugin packages तक scoped हो। नियंत्रित categories और legacy v1 filter aliasesGET /api/v1/pluginsके तहत दस्तावेज़ित हैं।
नोट्स:
family,channel,isOfficial,featured, याhighlightedOnlyके अमान्य मान400लौटाते हैं। अज्ञात क्वेरी पैरामीटर अनदेखे किए जाते हैं।- अनाम callers केवल सार्वजनिक package channels देखते हैं।
- authenticated callers उन publishers के private packages खोज सकते हैं जिनसे वे संबंधित हैं।
channel=privateकेवल वे packages लौटाता है जिन्हें authenticated caller पढ़ सकता है।
GET /api/v1/plugins
code-plugin और bundle-plugin packages में Plugin-केवल कैटलॉग ब्राउज़।
क्वेरी पैरामीटर:
limit(वैकल्पिक): integer (1-100)cursor(वैकल्पिक): पेजिनेशन कर्सरisOfficial(वैकल्पिक):trueयाfalsesort(वैकल्पिक):recommended(डिफ़ॉल्ट),trending,downloads,updated, लेगेसी aliasinstallscategory(वैकल्पिक): plugin category फ़िल्टर। मौजूदा मान:channels,models,memory,context,voice,media,web,tools,runtime,gateway,security,other.
Legacy v1 filter aliases read endpoints पर स्वीकार बने रहते हैं:
mcp-tooling,data, औरautomationtoolsमें resolve होते हैं।observabilityऔरdeploymentgatewayमें resolve होते हैं।dev-toolsruntimeमें resolve होता है।
trending सात-दिवसीय install/download leaderboard है और all-time totals का उपयोग नहीं करता।
एकीकृत /api/v1/packages endpoint पर यह plugin-only है; skill catalog के लिए
/api/v1/skills?sort=trending का उपयोग करें।
Legacy aliases stored या author-declared category values के रूप में स्वीकार नहीं किए जाते हैं।
GET /api/v1/skills/export
ऑफ़लाइन विश्लेषण के लिए नवीनतम सार्वजनिक skills का bulk export।
Auth:
- API token आवश्यक।
क्वेरी पैरामीटर:
startDate(आवश्यक): skillupdatedAtके लिए Unix milliseconds lower bound।endDate(आवश्यक): skillupdatedAtके लिए Unix milliseconds upper bound।limit(वैकल्पिक): integer (1-250), डिफ़ॉल्ट250।cursor(वैकल्पिक): पिछले response से पेजिनेशन कर्सर।
Response:
- Body: ZIP archive.
- प्रत्येक exported skill
{publisher}/{slug}/पर rooted है। - Hosted skills में latest stored version files शामिल होती हैं और
_manifest.jsonमेंsourceRef: "public-clawhub"के साथ सूचीबद्ध होती हैं। cleanयाsuspiciousscan वाली current GitHub-backed skills में_source_handoff.jsonशामिल होता है जिसमेंsourceRef: "public-github", repo, commit, path, content hash, और archive URL होता है। इनमें ClawHub-hosted source files शामिल नहीं होतीं।- प्रत्येक skill में
_export_skill_meta.jsonशामिल होता है। _manifest.jsonहमेशा ZIP root पर शामिल होता है।_errors.jsonतब शामिल होता है जब individual skills या files export नहीं की जा सकीं।
Headers:
X-Next-CursorX-Has-MoreX-Total-ReturnedX-Date-RangeX-Export-Errors
GET /api/v1/plugins/export
ऑफ़लाइन विश्लेषण के लिए नवीनतम सार्वजनिक Plugin रिलीज़ का बल्क निर्यात।
प्रमाणीकरण:
- API टोकन आवश्यक है।
क्वेरी पैरामीटर:
startDate(आवश्यक): PluginupdatedAtके लिए Unix मिलीसेकंड निचली सीमा।endDate(आवश्यक): PluginupdatedAtके लिए Unix मिलीसेकंड ऊपरी सीमा।limit(वैकल्पिक): पूर्णांक (1-250), डिफ़ॉल्ट250।cursor(वैकल्पिक): पिछले प्रतिसाद से पेजिनेशन कर्सर।family(वैकल्पिक):code-pluginयाbundle-plugin। छोड़े जाने का अर्थ है दोनों Plugin परिवार।
प्रतिसाद:
- बॉडी: ZIP आर्काइव।
- प्रत्येक निर्यातित Plugin
{family}/{packageName}/पर रूट किया जाता है। - प्रत्येक निर्यातित Plugin में नवीनतम रिलीज़ की संग्रहीत फ़ाइलें शामिल होती हैं।
- प्रति-Plugin निर्यात मेटाडेटा
__clawhub_export/{family}/{packageName}/plugin_meta.jsonपर संग्रहीत होता है। _manifest.jsonहमेशा ZIP रूट पर शामिल होता है।- जब अलग-अलग Plugin या फ़ाइलें निर्यात नहीं की जा सकीं, तो
_errors.jsonशामिल होता है।
हेडर:
X-Next-CursorX-Has-MoreX-Total-ReturnedX-Date-RangeX-Export-Errors
GET /api/v1/plugins/search
code-plugin और bundle-plugin पैकेजों में केवल-Plugin खोज।
क्वेरी पैरामीटर:
q(आवश्यक): क्वेरी स्ट्रिंगlimit(वैकल्पिक): पूर्णांक (1-100)isOfficial(वैकल्पिक):trueयाfalsecategory(वैकल्पिक): Plugin श्रेणी फ़िल्टर। वर्तमान मान:channels,models,memory,context,voice,media,web,tools,runtime,gateway,security,other।
नोट्स:
GET /api/v1/pluginsके अंतर्गत दस्तावेज़ित पुराने v1 फ़िल्टर उपनाम भी स्वीकार किए जाते हैं।- श्रेणी फ़िल्टरिंग Plugin श्रेणी डाइजेस्ट पंक्तियों द्वारा समर्थित वास्तविक API फ़िल्टर है, खोज-क्वेरी पुनर्लेखन नहीं।
- परिणाम प्रासंगिकता क्रम में लौटाए जाते हैं और वर्तमान में पेजिनेट नहीं होते।
- Plugin खोज के लिए ब्राउज़र UI सॉर्ट नियंत्रण लोड किए गए प्रासंगिकता परिणामों को पुनः क्रमबद्ध करते हैं,
जो वर्तमान
/skillsब्राउज़ व्यवहार से मेल खाते हैं।
GET /api/v1/packages/{name}
पैकेज विवरण मेटाडेटा लौटाता है।
नोट्स:
- Skills एकीकृत कैटलॉग में इस रूट के माध्यम से भी रिज़ॉल्व हो सकते हैं।
- निजी पैकेज
404लौटाते हैं, जब तक कॉलर स्वामी प्रकाशक को पढ़ नहीं सकता।
DELETE /api/v1/packages/{name}
किसी पैकेज और सभी रिलीज़ को सॉफ्ट-डिलीट करता है।
नोट्स:
- पैकेज स्वामी, संगठन प्रकाशक स्वामी/एडमिन, प्लेटफ़ॉर्म मॉडरेटर, या प्लेटफ़ॉर्म एडमिन के लिए API टोकन आवश्यक है।
GET /api/v1/packages/{name}/versions
संस्करण इतिहास लौटाता है।
क्वेरी पैरामीटर:
limit(वैकल्पिक): पूर्णांक (1–100)cursor(वैकल्पिक): पेजिनेशन कर्सर
नोट्स:
- निजी पैकेज
404लौटाते हैं, जब तक कॉलर स्वामी प्रकाशक को पढ़ नहीं सकता।
GET /api/v1/packages/{name}/versions/{version}
फ़ाइल मेटाडेटा, संगतता, सत्यापन, आर्टिफ़ैक्ट मेटाडेटा, और स्कैन डेटा सहित एक पैकेज संस्करण लौटाता है।
नोट्स:
version.artifact.kindपुराने-विश्व पैकेज आर्काइव के लिएlegacy-zipहै या ClawPack-समर्थित रिलीज़ के लिएnpm-packहै।- ClawPack रिलीज़ में npm-संगत
npmIntegrity,npmShasum, औरnpmTarballNameफ़ील्ड शामिल होते हैं। version.sha256hashपुराने क्लाइंट के लिए अप्रचलित संगतता मेटाडेटा है। यह/api/v1/packages/{name}/downloadद्वारा लौटाए गए सटीक ZIP बाइट्स को हैश करता है। आधुनिक क्लाइंट कोversion.artifact.sha256का उपयोग करना चाहिए, जो कैनोनिकल रिलीज़ आर्टिफ़ैक्ट की पहचान करता है।- स्कैन डेटा मौजूद होने पर
version.vtAnalysis,version.llmAnalysis, औरversion.staticScanशामिल होते हैं। - निजी पैकेज
404लौटाते हैं, जब तक कॉलर स्वामी प्रकाशक को पढ़ नहीं सकता।
GET /api/v1/packages/{name}/versions/{version}/security
इंस्टॉल क्लाइंट के लिए सटीक पैकेज रिलीज़ सुरक्षा और भरोसा सारांश लौटाता है। यह यह तय करने के लिए सार्वजनिक OpenClaw उपभोग सतह है कि कोई रिज़ॉल्व की गई रिलीज़ इंस्टॉल की जा सकती है या नहीं।
प्रमाणीकरण:
- सार्वजनिक रीड एंडपॉइंट। कोई स्वामी, प्रकाशक, मॉडरेटर, या एडमिन टोकन आवश्यक नहीं है।
प्रतिसाद:
{ "package": { "name": "@openclaw/example-plugin", "displayName": "Example Plugin", "family": "code-plugin" }, "release": { "releaseId": "packageReleases:...", "version": "1.2.3", "artifactKind": "npm-pack", "artifactSha256": "0123456789abcdef...", "npmIntegrity": "sha512-...", "npmShasum": "0123456789abcdef0123456789abcdef01234567", "npmTarballName": "example-plugin-1.2.3.tgz", "createdAt": 1730000000000 }, "trust": { "scanStatus": "malicious", "moderationState": "quarantined", "blockedFromDownload": true, "reasons": ["manual:quarantined", "scan:malicious"], "pending": false, "stale": false }}प्रतिसाद फ़ील्ड:
package.name,package.displayName, औरpackage.familyरिज़ॉल्व किए गए रजिस्ट्री पैकेज की पहचान करते हैं।release.releaseId,release.version, औरrelease.createdAtउस सटीक रिलीज़ की पहचान करते हैं जिसका मूल्यांकन किया गया था।release.artifactKind,release.artifactSha256,release.npmIntegrity,release.npmShasum, औरrelease.npmTarballNameरिलीज़ आर्टिफ़ैक्ट के लिए ज्ञात होने पर मौजूद होते हैं।trust.scanStatusस्कैनर इनपुट और मैनुअल रिलीज़ मॉडरेशन से निकाली गई प्रभावी भरोसा स्थिति है।trust.moderationStatenullable है। जब कोई मैनुअल रिलीज़ मॉडरेशन मौजूद नहीं होता, यहnullहोता है।trust.blockedFromDownloadइंस्टॉल ब्लॉक संकेत है। OpenClaw और अन्य इंस्टॉल क्लाइंट को इस मान केtrueहोने पर स्कैनर या मॉडरेशन फ़ील्ड से ब्लॉकिंग नियमों को फिर से निकालने के बजाय इंस्टॉलेशन ब्लॉक करना चाहिए।trust.reasonsउपयोगकर्ता-दृश्य और ऑडिट व्याख्या सूची है। कारण कोड स्थिर, संक्षिप्त स्ट्रिंग होते हैं, जैसेmanual:quarantined,scan:malicious, औरpackage:malicious।trust.pendingका अर्थ है कि एक या अधिक भरोसा इनपुट अभी भी पूर्णता की प्रतीक्षा कर रहे हैं।trust.staleका अर्थ है कि भरोसा सारांश पुराने इनपुट से गणना किया गया था और उच्च-विश्वास अनुमति निर्णय से पहले इसे रीफ़्रेश की आवश्यकता के रूप में माना जाना चाहिए।
नोट्स:
- यह एंडपॉइंट संस्करण-सटीक है। क्लाइंट को इसे उस पैकेज संस्करण को रिज़ॉल्व करने के बाद कॉल करना चाहिए जिसे वे इंस्टॉल करना चाहते हैं, न कि केवल नवीनतम पैकेज मेटाडेटा पढ़ने के बाद।
- निजी पैकेज
404लौटाते हैं, जब तक कॉलर स्वामी प्रकाशक को पढ़ नहीं सकता। - यह एंडपॉइंट जानबूझकर स्वामी/मॉडरेटर मॉडरेशन एंडपॉइंट की तुलना में संकरा है। यह इंस्टॉल निर्णय और सार्वजनिक व्याख्या उजागर करता है, न कि रिपोर्टर पहचान, रिपोर्ट बॉडी, निजी साक्ष्य, या आंतरिक समीक्षा समयरेखाएँ।
GET /api/v1/packages/{name}/versions/{version}/artifact
किसी पैकेज संस्करण के लिए स्पष्ट आर्टिफ़ैक्ट रिज़ॉल्वर मेटाडेटा लौटाता है।
नोट्स:
- पुराने पैकेज संस्करण
legacy-zipआर्टिफ़ैक्ट और पुराना ZIPdownloadUrlलौटाते हैं। - ClawPack संस्करण
npm-packआर्टिफ़ैक्ट, npm अखंडता फ़ील्ड,tarballUrl, और पुराना ZIP संगतता URL लौटाते हैं। - यह OpenClaw रिज़ॉल्वर सतह है; यह साझा URL से आर्काइव फ़ॉर्मैट का अनुमान लगाने से बचता है।
GET /api/v1/packages/{name}/versions/{version}/artifact/download
स्पष्ट रिज़ॉल्वर पथ के माध्यम से संस्करण आर्टिफ़ैक्ट डाउनलोड करता है।
नोट्स:
- ClawPack संस्करण सटीक अपलोड किए गए npm-pack
.tgzबाइट्स स्ट्रीम करते हैं। - पुराने ZIP संस्करण
/api/v1/packages/{name}/download?version=पर रीडायरेक्ट करते हैं। - डाउनलोड दर बकेट का उपयोग करता है।
GET /api/v1/packages/{name}/readiness
भविष्य के OpenClaw उपभोग के लिए गणित तैयारी लौटाता है।
तैयारी जाँचें कवर करती हैं:
- आधिकारिक चैनल स्थिति
- नवीनतम संस्करण उपलब्धता
- ClawPack npm-pack आर्टिफ़ैक्ट उपलब्धता
- आर्टिफ़ैक्ट डाइजेस्ट
- स्रोत रेपो और कमिट उद्गम
- OpenClaw संगतता मेटाडेटा
- होस्ट लक्ष्य
- स्कैन स्थिति
प्रतिसाद:
{ "package": { "name": "@openclaw/example-plugin", "displayName": "Example Plugin", "family": "code-plugin", "isOfficial": true, "latestVersion": "1.2.3" }, "ready": false, "checks": [ { "id": "clawpack", "label": "ClawPack artifact", "status": "fail", "message": "Latest version is legacy ZIP-only." } ], "blockers": ["clawpack"]}GET /api/v1/packages/migrations
आधिकारिक OpenClaw Plugin माइग्रेशन पंक्तियाँ सूचीबद्ध करने के लिए मॉडरेटर एंडपॉइंट।
प्रमाणीकरण:
- मॉडरेटर या एडमिन उपयोगकर्ता के लिए API टोकन आवश्यक है।
क्वेरी पैरामीटर:
phase(वैकल्पिक):planned,published,clawpack-ready,legacy-zip-only,metadata-ready,blocked,ready-for-openclaw, याall(डिफ़ॉल्ट)।limit(वैकल्पिक): पूर्णांक (1-100)cursor(वैकल्पिक): पेजिनेशन कर्सर
प्रतिसाद:
{ "items": [ { "migrationId": "officialPluginMigrations:...", "bundledPluginId": "core.search", "packageName": "@openclaw/search-plugin", "packageId": "packages:...", "owner": "platform", "sourceRepo": "openclaw/openclaw", "sourcePath": "plugins/search", "sourceCommit": "abc123", "phase": "blocked", "blockers": ["missing ClawPack"], "hostTargetsComplete": true, "scanClean": false, "moderationApproved": false, "runtimeBundlesReady": false, "notes": null, "createdAt": 1760000000000, "updatedAt": 1760000000000 } ], "nextCursor": null, "done": true}POST /api/v1/packages/migrations
आधिकारिक Plugin माइग्रेशन पंक्ति बनाने या अपडेट करने के लिए एडमिन एंडपॉइंट।
प्रमाणीकरण:
- एडमिन उपयोगकर्ता के लिए API टोकन आवश्यक है।
अनुरोध बॉडी:
{ "bundledPluginId": "core.search", "packageName": "@openclaw/search-plugin", "owner": "platform", "sourceRepo": "openclaw/openclaw", "sourcePath": "plugins/search", "sourceCommit": "abc123", "phase": "blocked", "blockers": ["missing ClawPack"], "hostTargetsComplete": true, "scanClean": false, "moderationApproved": false, "runtimeBundlesReady": false, "notes": "waiting on publisher upload"}नोट्स:
bundledPluginIdको लोअरकेस में सामान्यीकृत किया जाता है और यह स्थिर upsert कुंजी है।packageNamenpm-name सामान्यीकृत है; नियोजित माइग्रेशन के लिए पैकेज अनुपस्थित हो सकता है।- यह केवल माइग्रेशन तैयारी ट्रैक करता है। यह OpenClaw को परिवर्तित नहीं करता या ClawPacks जनरेट नहीं करता।
GET /api/v1/packages/moderation/queue
पैकेज रिलीज़ समीक्षा कतारों के लिए मॉडरेटर/एडमिन एंडपॉइंट।
प्रमाणीकरण:
- मॉडरेटर या एडमिन उपयोगकर्ता के लिए API टोकन आवश्यक है।
क्वेरी पैरामीटर:
status(वैकल्पिक):open(डिफ़ॉल्ट),blocked,manual, याalllimit(वैकल्पिक): पूर्णांक (1-100)cursor(वैकल्पिक): पेजिनेशन कर्सर
स्थिति अर्थ:
open: संदिग्ध, दुर्भावनापूर्ण, लंबित, क्वारंटीन, निरस्त, या रिपोर्ट की गई रिलीज़।blocked: क्वारंटीन, निरस्त, या दुर्भावनापूर्ण रिलीज़।manual: मैनुअल मॉडरेशन ओवरराइड वाली कोई भी रिलीज़।all: मैनुअल ओवरराइड, non-clean स्कैन स्थिति, या पैकेज रिपोर्ट वाली कोई भी रिलीज़।
प्रतिसाद:
{ "items": [ { "packageId": "packages:...", "releaseId": "packageReleases:...", "name": "@openclaw/example-plugin", "displayName": "Example Plugin", "family": "code-plugin", "channel": "community", "isOfficial": false, "version": "1.2.3", "createdAt": 1730000000000, "artifactKind": "npm-pack", "scanStatus": "malicious", "moderationState": "quarantined", "moderationReason": "manual review", "sourceRepo": "openclaw/example-plugin", "sourceCommit": "abc123", "reportCount": 2, "lastReportedAt": 1730000001000, "reasons": ["manual:quarantined", "scan:malicious", "reports:2"] } ], "nextCursor": null, "done": true}POST /api/v1/packages/{name}/report
मॉडरेटर समीक्षा के लिए पैकेज रिपोर्ट करें। रिपोर्ट पैकेज-स्तर की होती हैं, वैकल्पिक रूप से किसी संस्करण से जुड़ी होती हैं। वे मॉडरेशन कतार को फ़ीड करती हैं लेकिन स्वयं डाउनलोड को स्वतः छिपाती या ब्लॉक नहीं करतीं; मॉडरेटर को आर्टिफ़ैक्ट स्वीकृत करने, क्वारंटीन करने, या निरस्त करने के लिए रिलीज़ मॉडरेशन का उपयोग करना चाहिए।
प्रमाणीकरण:
- API टोकन आवश्यक है।
अनुरोध:
{ "reason": "Suspicious native binary", "version": "1.2.3" }प्रतिसाद:
{ "ok": true, "reported": true, "alreadyReported": false, "packageId": "packages:...", "releaseId": "packageReleases:...", "reportCount": 1}GET /api/v1/packages/reports
पैकेज रिपोर्ट ग्रहण के लिए मॉडरेटर/एडमिन एंडपॉइंट।
प्रमाणीकरण:
- मॉडरेटर या एडमिन उपयोगकर्ता के लिए API टोकन आवश्यक है।
क्वेरी पैरामीटर:
status(वैकल्पिक):open(डिफ़ॉल्ट),confirmed,dismissed, याalllimit(वैकल्पिक): पूर्णांक (1-100)cursor(वैकल्पिक): पेजिनेशन कर्सर
प्रतिक्रिया:
{ "items": [ { "reportId": "packageReports:...", "packageId": "packages:...", "releaseId": "packageReleases:...", "name": "@openclaw/example-plugin", "displayName": "Example Plugin", "family": "code-plugin", "version": "1.2.3", "reason": "Suspicious native binary", "status": "open", "createdAt": 1730000000000, "reporter": { "userId": "users:...", "handle": "reporter", "displayName": "Reporter" }, "triagedAt": null, "triagedBy": null, "triageNote": null } ], "nextCursor": null, "done": true}GET /api/v1/packages/{name}/moderation
पैकेज मॉडरेशन दृश्यता के लिए मालिक/मॉडरेटर एंडपॉइंट।
प्रमाणीकरण:
- पैकेज मालिक, प्रकाशक सदस्य, मॉडरेटर, या एडमिन उपयोगकर्ता के लिए API टोकन आवश्यक है।
प्रतिक्रिया:
{ "package": { "packageId": "packages:...", "name": "@openclaw/example-plugin", "displayName": "Example Plugin", "family": "code-plugin", "channel": "community", "isOfficial": false, "reportCount": 2, "lastReportedAt": 1730000001000, "scanStatus": "malicious" }, "latestRelease": { "releaseId": "packageReleases:...", "version": "1.2.3", "artifactKind": "npm-pack", "scanStatus": "malicious", "moderationState": "quarantined", "moderationReason": "manual review", "blockedFromDownload": true, "reasons": ["manual:quarantined", "scan:malicious", "reports:2"], "createdAt": 1730000000000 }}POST /api/v1/packages/reports/{reportId}/triage
पैकेज रिपोर्ट हल करने या फिर से खोलने के लिए मॉडरेटर/एडमिन एंडपॉइंट।
अनुरोध:
{ "status": "confirmed", "note": "Reviewed and quarantined affected release.", "finalAction": "quarantine"}confirmed और dismissed के लिए note आवश्यक है; status को वापस open
पर सेट करते समय इसे छोड़ा जा सकता है। उसी ऑडिट योग्य वर्कफ़्लो में रिलीज़
मॉडरेशन लागू करने के लिए पुष्टि की गई रिपोर्ट के साथ finalAction: "quarantine"
या finalAction: "revoke" पास करें।
प्रतिक्रिया:
{ "ok": true, "reportId": "packageReports:...", "packageId": "packages:...", "status": "confirmed", "reportCount": 0}POST /api/v1/packages/{name}/versions/{version}/moderation
पैकेज रिलीज़ समीक्षा के लिए मॉडरेटर/एडमिन एंडपॉइंट।
अनुरोध:
{ "state": "quarantined", "reason": "Suspicious native payload." }समर्थित अवस्थाएँ:
approved: मैन्युअल रूप से समीक्षा की गई और अनुमति दी गई।quarantined: आगे की कार्रवाई लंबित रहने तक अवरुद्ध।revoked: किसी रिलीज़ को पहले विश्वसनीय माने जाने के बाद अवरुद्ध।
क्वारंटीन और निरस्त रिलीज़ आर्टिफ़ैक्ट डाउनलोड रूट से 403 लौटाती हैं।
हर बदलाव एक ऑडिट लॉग प्रविष्टि लिखता है।
GET /api/v1/packages/{name}/file
पैकेज फ़ाइल के लिए कच्ची टेक्स्ट सामग्री लौटाता है।
क्वेरी पैरामीटर:
path(आवश्यक)version(वैकल्पिक)tag(वैकल्पिक)
नोट्स:
- नवीनतम रिलीज़ पर डिफ़ॉल्ट होता है।
- डाउनलोड बकेट नहीं, पढ़ने की दर बकेट का उपयोग करता है।
- बाइनरी फ़ाइलें
415लौटाती हैं। - फ़ाइल आकार सीमा: 200KB।
- लंबित VirusTotal स्कैन पढ़ने को अवरुद्ध नहीं करते; दुर्भावनापूर्ण रिलीज़ फिर भी कहीं और रोकी जा सकती हैं।
- निजी पैकेज
404लौटाते हैं जब तक कि कॉलर मालिक प्रकाशक को पढ़ नहीं सकता।
GET /api/v1/packages/{name}/download
पैकेज रिलीज़ के लिए पुराना निर्धारक ZIP आर्काइव डाउनलोड करता है।
क्वेरी पैरामीटर:
version(वैकल्पिक)tag(वैकल्पिक)
नोट्स:
- नवीनतम रिलीज़ पर डिफ़ॉल्ट होता है।
- Skills
GET /api/v1/downloadपर रीडायरेक्ट करती हैं। - Plugin/पैकेज आर्काइव
package/रूट वाली zip फ़ाइलें हैं ताकि पुराने OpenClaw क्लाइंट काम करते रहें। - यह रूट केवल ZIP ही रहता है। यह ClawPack
.tgzफ़ाइलें स्ट्रीम नहीं करता। - प्रतिक्रियाओं में रिज़ॉल्वर अखंडता जाँच के लिए
ETag,Digest,X-ClawHub-Artifact-Type, औरX-ClawHub-Artifact-Sha256हेडर शामिल होते हैं। - केवल-रजिस्ट्री मेटाडेटा डाउनलोड किए गए आर्काइव में इंजेक्ट नहीं किया जाता।
- लंबित VirusTotal स्कैन डाउनलोड अवरुद्ध नहीं करते; दुर्भावनापूर्ण रिलीज़
403लौटाती हैं। - निजी पैकेज
404लौटाते हैं जब तक कि कॉलर मालिक न हो।
GET /api/npm/{package}
ClawPack-समर्थित पैकेज संस्करणों के लिए npm-संगत पैक्यूमेंट लौटाता है।
नोट्स:
- केवल अपलोड किए गए ClawPack npm-pack tarball वाले संस्करण सूचीबद्ध किए जाते हैं।
- पुराने केवल-ZIP संस्करण जानबूझकर छोड़े जाते हैं।
dist.tarball,dist.integrity, औरdist.shasumnpm-संगत फ़ील्ड का उपयोग करते हैं ताकि उपयोगकर्ता चाहें तो npm को मिरर की ओर इंगित कर सकें।- स्कोप्ड पैकेज पैक्यूमेंट
/api/npm/@scope/nameऔर npm के एन्कोडेड/api/npm/@scope%2Fnameअनुरोध पथ, दोनों का समर्थन करते हैं।
GET /api/npm/{package}/-/{tarball}.tgz
npm मिरर क्लाइंट के लिए बिल्कुल अपलोड किए गए ClawPack tarball बाइट्स स्ट्रीम करता है।
नोट्स:
- डाउनलोड दर बकेट का उपयोग करता है।
- डाउनलोड हेडर में ClawHub SHA-256 के साथ npm integrity/shasum मेटाडेटा शामिल होता है।
- मॉडरेशन और निजी पैकेज एक्सेस जाँचें अब भी लागू होती हैं।
GET /api/v1/resolve
CLI द्वारा स्थानीय फ़िंगरप्रिंट को ज्ञात संस्करण से मैप करने के लिए उपयोग किया जाता है।
क्वेरी पैरामीटर:
slug(आवश्यक)hash(आवश्यक): बंडल फ़िंगरप्रिंट का 64-अक्षर hex sha256
प्रतिक्रिया:
{ "slug": "gifgrep", "match": { "version": "1.2.2" }, "latestVersion": { "version": "1.2.3" } }GET /api/v1/download
होस्ट किया गया skill संस्करण ZIP डाउनलोड करता है, या मौजूदा GitHub-समर्थित skill
के लिए, जिसमें clean या suspicious स्कैन हो और कोई होस्टेड संस्करण न हो,
GitHub स्रोत हैंडऑफ़ लौटाता है।
क्वेरी पैरामीटर:
slug(आवश्यक)version(वैकल्पिक): semver स्ट्रिंगtag(वैकल्पिक): टैग नाम (जैसेlatest)
नोट्स:
- यदि न
versionदिया गया है और नtag, तो नवीनतम संस्करण उपयोग किया जाता है। - सॉफ्ट-डिलीट किए गए संस्करण
410लौटाते हैं। - GitHub-समर्थित skill हैंडऑफ़ बाइट्स को प्रॉक्सी या मिरर नहीं करते। JSON प्रतिक्रिया
में
sourceRef: "public-github",repo,commit,path,contentHash, औरarchiveUrlशामिल होते हैं; स्कैन/मौजूदा स्थिति एक गेट है और इसे सफलता पेलोड मेटाडेटा के रूप में शामिल नहीं किया जाता। - डाउनलोड आँकड़े प्रति UTC दिन अद्वितीय पहचान के रूप में गिने जाते हैं (API टोकन मान्य होने पर
userId, अन्यथा IP)।
प्रमाणीकरण एंडपॉइंट (Bearer टोकन)
सभी एंडपॉइंट्स के लिए आवश्यक:
Authorization: Bearer clh_...GET /api/v1/whoami
टोकन सत्यापित करता है और उपयोगकर्ता हैंडल लौटाता है।
POST /api/v1/skills
नया संस्करण प्रकाशित करता है।
- प्राथमिकता:
payloadJSON +files[]blobs के साथmultipart/form-data। files(storageId-आधारित) वाला JSON body भी स्वीकार किया जाता है।- वैकल्पिक पेलोड फ़ील्ड:
ownerHandle। मौजूद होने पर, API उस प्रकाशक को सर्वर-साइड रिज़ॉल्व करता है और अभिनेता के पास प्रकाशक एक्सेस होना आवश्यक करता है। - वैकल्पिक पेलोड फ़ील्ड:
migrateOwner।ownerHandleके साथtrueहोने पर, कोई मौजूदा skill उस मालिक के पास जा सकती है यदि अभिनेता मौजूदा और लक्ष्य, दोनों प्रकाशकों पर एडमिन/मालिक है। इस opt-in के बिना, मालिक बदलाव अस्वीकार किए जाते हैं।
POST /api/v1/packages
code-plugin या bundle-plugin रिलीज़ प्रकाशित करता है।
- Bearer टोकन प्रमाणीकरण आवश्यक है।
multipart/form-dataआवश्यक है।- अनुमत फ़ॉर्म फ़ील्ड
payload, दोहराए गएfilesblobs, या एकclawpacktarball संदर्भ हैं।clawpackएक.tgzblob या upload-url flow द्वारा लौटाई गई storage id हो सकती है। स्टेज किए गए storage-id प्रकाशन में उस upload URL के साथ लौटाया गयाclawpackUploadTicketभी शामिल होना चाहिए। - उसी अनुरोध में
filesयाclawpackमें से किसी एक का उपयोग करें, दोनों का कभी नहीं। - JSON bodies और कॉलर-प्रदत्त
payload.files/payload.artifactमेटाडेटा अस्वीकार किए जाते हैं। - सीधे multipart publish अनुरोध 18MB तक सीमित हैं। ClawPack tarball 120MB tarball सीमा तक upload-url flow का उपयोग कर सकते हैं।
- वैकल्पिक पेलोड फ़ील्ड:
ownerHandle। मौजूद होने पर, केवल एडमिन उस मालिक की ओर से प्रकाशित कर सकते हैं।
सत्यापन मुख्य बिंदु:
familyकोcode-pluginयाbundle-pluginहोना चाहिए।- Plugin पैकेजों के लिए
openclaw.plugin.jsonआवश्यक है। ClawPack.tgzअपलोड में यहpackage/openclaw.plugin.jsonपर होना चाहिए। - Code plugins के लिए
package.json, स्रोत repo मेटाडेटा, स्रोत commit मेटाडेटा, config schema मेटाडेटा,openclaw.compat.pluginApi, औरopenclaw.build.openclawVersionआवश्यक हैं। openclaw.hostTargetsऔरopenclaw.environmentवैकल्पिक मेटाडेटा हैं।- केवल
openclaworg प्रकाशक और मौजूदाopenclaworg सदस्यों के व्यक्तिगत प्रकाशकofficialचैनल पर प्रकाशित कर सकते हैं। - किसी की ओर से किए गए प्रकाशन लक्ष्य मालिक खाते के विरुद्ध official-channel पात्रता अब भी सत्यापित करते हैं।
DELETE /api/v1/skills/{slug} / POST /api/v1/skills/{slug}/undelete
skill को सॉफ्ट-डिलीट / पुनर्स्थापित करें (मालिक, मॉडरेटर, या एडमिन)।
वैकल्पिक JSON body:
{ "reason": "Held for moderation pending legal review." }मौजूद होने पर, reason को skill मॉडरेशन नोट के रूप में संग्रहीत किया जाता है और ऑडिट लॉग में कॉपी किया जाता है।
मालिक-आरंभित सॉफ्ट डिलीट slug को 30 दिनों के लिए आरक्षित रखते हैं, फिर slug को
दूसरा प्रकाशक दावा कर सकता है। यह समाप्ति लागू होने पर डिलीट प्रतिक्रिया में slugReservedUntil शामिल होता है।
मॉडरेटर/एडमिन द्वारा छिपाने और सुरक्षा हटाने पर इस तरह समाप्ति नहीं होती।
डिलीट प्रतिक्रिया:
{ "ok": true, "slugReservedUntil": 1730000000000 }स्थिति कोड:
200: ठीक401: अनधिकृत403: निषिद्ध404: skill/उपयोगकर्ता नहीं मिला500: आंतरिक सर्वर त्रुटि
POST /api/v1/users/publisher
केवल एडमिन। किसी हैंडल के लिए org प्रकाशक मौजूद होना सुनिश्चित करता है। यदि हैंडल अभी भी
पुराने साझा उपयोगकर्ता/व्यक्तिगत प्रकाशक की ओर इंगित करता है, तो एंडपॉइंट पहले उसे org प्रकाशक में माइग्रेट करता है।
नए बनाए गए org के लिए, memberHandle प्रदान करें; कार्यरत एडमिन को सदस्य के रूप में नहीं जोड़ा जाता।
memberRole का डिफ़ॉल्ट owner है।
- Body:
{ "handle": "openclaw", "displayName": "OpenClaw", "memberHandle": "alice", "memberRole": "owner", "trusted": true } - Response:
{ "ok": true, "publisherId": "...", "handle": "openclaw", "created": true, "migrated": false, "trusted": true, "member": { "userId": "...", "handle": "alice", "role": "owner" } }
POST /api/v1/publishers
प्रमाणित self-serve org प्रकाशक निर्माण। नया org प्रकाशक बनाता है और कॉलर को मालिक के रूप में जोड़ता है। यह एंडपॉइंट मौजूदा उपयोगकर्ता/व्यक्तिगत हैंडल माइग्रेट नहीं करता और प्रकाशक को trusted/official चिह्नित नहीं करता।
- Body:
{ "handle": "opik", "displayName": "Opik" } - Response:
{ "ok": true, "publisherId": "...", "handle": "opik", "created": true, "trusted": false } - जब हैंडल पहले से किसी प्रकाशक, उपयोगकर्ता, या व्यक्तिगत प्रकाशक द्वारा उपयोग किया जा रहा हो तो
409लौटाता है।
POST /api/v1/users/reserve
केवल एडमिन। रिलीज़ प्रकाशित किए बिना वैध मालिक के लिए root slugs और पैकेज नाम आरक्षित करता है। पैकेज नाम बिना रिलीज़ पंक्तियों वाले निजी placeholder पैकेज बन जाते हैं, ताकि वही मालिक बाद में असली code-plugin या bundle-plugin रिलीज़ उस नाम में प्रकाशित कर सके।
- Body:
{ "handle": "openclaw", "slugs": ["diffs"], "packageNames": ["@openclaw/diffs"], "reason": "reserved for official OpenClaw plugin" } - Response:
{ "ok": true, "succeeded": 2, "failed": 0, "results": [{ "kind": "slug", "name": "diffs", "ok": true, "action": "reserved" }] }
POST /api/v1/users/publisher-recovery
केवल एडमिन। Convex Auth खाते की पंक्तियाँ संपादित किए बिना सत्यापित replacement GitHub OAuth principal के लिए व्यक्तिगत प्रकाशक पुनर्प्राप्त करता है। अनुरोध में दोनों immutable GitHub provider account ids का नाम होना चाहिए; mutable handles केवल ऑपरेटर-सामने guard के रूप में उपयोग किए जाते हैं।
एंडपॉइंट डिफ़ॉल्ट रूप से dry-run होता है। रिकवरी लागू करने के लिए, स्टाफ़ द्वारा दोनों
GitHub principals के बीच continuity को स्वतंत्र रूप से सत्यापित करने के बाद dryRun: false और
confirmIdentityVerified: true आवश्यक हैं। जब गंतव्य उपयोगकर्ता के मौजूदा व्यक्तिगत
publisher के पास skills, packages, या GitHub skill sources हों, तो रिकवरी fail closed होती है।
रिकवरी recovered publisher की skills, skill slug aliases, packages, package inspector warnings, और derived search digest rows के लिए legacy ownerUserId फ़ील्ड भी माइग्रेट करती है ताकि
direct-owner paths नए publisher authority से मेल खाएँ। recovered handle के लिए एक सक्रिय protected-handle
reservation को भी replacement user को फिर से असाइन किया जाता है ताकि बाद में होने वाला
profile synchronization पूर्व उपयोगकर्ता की competing authority को restore न कर सके। प्रत्येक primary table प्रति apply transaction
100 rows तक सीमित है; बड़ी recoveries के लिए पहले resumable owner migration का उपयोग करना होगा।
GitHub skill sources publisher-scoped होते हैं और उन्हें rewrite करने के बजाय checked के रूप में रिपोर्ट किया जाता है।
- Body:
{ "handle": "gingiris", "nextUserHandle": "gingiris-1031", "previousGitHubProviderAccountId": "123", "nextGitHubProviderAccountId": "456", "reason": "Verified account continuity for issue #2555", "confirmIdentityVerified": true, "dryRun": false } - Response:
{ "ok": true, "dryRun": false, "recovered": true, "publisherId": "...", "handle": "gingiris", "previousUser": { "userId": "...", "handle": "gingiris", "nextHandle": "gingiris-recovered", "githubProviderAccountId": "123", "authAccountCount": 1 }, "nextUser": { "userId": "...", "handle": "gingiris-1031", "nextHandle": "gingiris", "githubProviderAccountId": "456", "authAccountCount": 1 }, "retiredPersonalPublisher": null, "resourceOwnerMigration": { "limitPerTable": 100, "skills": 1, "skillSlugAliases": 1, "packages": 0, "packageInspectorWarnings": 0, "githubSourcesChecked": 1, "handleReservations": 1 }, "identityVerified": true, "reason": "Verified account continuity for issue #2555" }
Owner slug management endpoints
POST /api/v1/skills/{slug}/rename- Body:
{ "newSlug": "new-canonical-slug" } - Response:
{ "ok": true, "slug": "new-canonical-slug", "previousSlug": "old-slug" }
- Body:
POST /api/v1/skills/{slug}/merge- Body:
{ "targetSlug": "canonical-target-slug" } - Response:
{ "ok": true, "sourceSlug": "old-slug", "targetSlug": "canonical-target-slug" }
- Body:
नोट्स:
- दोनों endpoints को API token auth की आवश्यकता होती है और ये केवल skill owner के लिए काम करते हैं।
renameपिछले slug को redirect alias के रूप में सुरक्षित रखता है।mergesource listing को छिपाता है और source slug को target listing पर redirect करता है।
Transfer ownership endpoints
POST /api/v1/skills/{slug}/transfer- Body:
{ "toUserHandle": "target_handle", "message": "optional" } - Response:
{ "ok": true, "transferId": "skillOwnershipTransfers:...", "toUserHandle": "target_handle", "expiresAt": 1730000000000 }
- Body:
POST /api/v1/skills/{slug}/transfer/acceptPOST /api/v1/skills/{slug}/transfer/rejectPOST /api/v1/skills/{slug}/transfer/cancel- Response (accept/reject/cancel):
{ "ok": true, "skillSlug": "demo-skill?" }
- Response (accept/reject/cancel):
GET /api/v1/transfers/incomingGET /api/v1/transfers/outgoing- Response shape:
{ "transfers": [{ "_id": "...", "skill": { "slug": "demo", "displayName": "Demo" }, "fromUser"|"toUser": { "handle": "..." }, "message": "...", "requestedAt": 0, "expiresAt": 0 }] }
- Response shape:
POST /api/v1/users/ban
किसी उपयोगकर्ता को ban करें और owned skills को hard-delete करें (केवल moderator/admin)।
Body:
{ "handle": "user_handle", "reason": "optional ban reason" }या
{ "userId": "users_...", "reason": "optional ban reason" }Response:
{ "ok": true, "alreadyBanned": false, "deletedSkills": 3 }POST /api/v1/users/unban
किसी उपयोगकर्ता को unban करें और eligible skills को restore करें (केवल admin)।
Body:
{ "handle": "user_handle", "reason": "optional unban reason" }या
{ "userId": "users_...", "reason": "optional unban reason" }Response:
{ "ok": true, "alreadyUnbanned": false, "restoredSkills": 3 }POST /api/v1/users/reclassify-ban
किसी मौजूदा ban के लिए stored reason को, unban किए बिना या content restore किए बिना,
बदलें (केवल admin)। जब तक dryRun false न हो, डिफ़ॉल्ट dry-run होता है।
Body:
{ "handle": "user_handle", "reason": "bulk publishing spam", "dryRun": true }या
{ "userId": "users_...", "reason": "bulk publishing spam", "dryRun": false }Response:
{ "ok": true, "dryRun": false, "userId": "users_...", "handle": "user_handle", "previousReason": "malware auto-ban", "nextReason": "bulk publishing spam", "changed": true}POST /api/v1/users/role
किसी user role को बदलें (केवल admin)।
Body:
{ "handle": "user_handle", "role": "moderator" }या
{ "userId": "users_...", "role": "admin" }Response:
{ "ok": true, "role": "moderator" }GET /api/v1/users
उपयोगकर्ताओं की सूची दें या खोजें (केवल admin)।
Query params:
q(optional): search queryquery(optional):qके लिए aliaslimit(optional): अधिकतम results (default 20, max 200)
Response:
{ "items": [ { "userId": "users_...", "handle": "user_handle", "displayName": "User", "name": "User", "role": "moderator" } ], "total": 1}POST /api/v1/stars/{slug} / DELETE /api/v1/stars/{slug}
star जोड़ें/हटाएँ (highlights)। दोनों endpoints idempotent हैं।
Responses:
{ "ok": true, "starred": true, "alreadyStarred": false }{ "ok": true, "unstarred": true, "alreadyUnstarred": false }Legacy CLI endpoints (deprecated)
पुराने CLI versions के लिए अभी भी supported:
GET /api/cli/whoamiPOST /api/cli/upload-urlPOST /api/cli/publishPOST /api/cli/telemetry/installPOST /api/cli/skill/deletePOST /api/cli/skill/undelete
removal plan के लिए DEPRECATIONS.md देखें।
POST /api/cli/upload-url uploadUrl और uploadTicket लौटाता है। Package
publishes जो ClawPack tarball stage करते हैं, उन्हें resulting storage id को
clawpack के रूप में और returned ticket को clawpackUploadTicket के रूप में भेजना होगा।
Registry discovery (/.well-known/clawhub.json)
CLI site से registry/auth settings discover कर सकता है:
/.well-known/clawhub.json(JSON, preferred)/.well-known/clawdhub.json(legacy)
Schema:
{ "apiBase": "https://clawhub.ai", "authBase": "https://clawhub.ai", "minCliVersion": "0.0.5" }यदि आप self-host करते हैं, तो यह file serve करें (या CLAWHUB_REGISTRY explicit रूप से set करें; legacy CLAWDHUB_REGISTRY)।