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: 0
  • 429 पर: Retry-After

हेडर अर्थ:

  • X-RateLimit-Reset: निरपेक्ष Unix epoch सेकंड
  • RateLimit-Reset: रीसेट तक सेकंड (विलंब)
  • X-RateLimit-Remaining / RateLimit-Remaining: मौजूद होने पर सटीक शेष बजट। शार्ड किए गए सफल अनुरोध अनुमानित वैश्विक मान लौटाने के बजाय इस हेडर को छोड़ देते हैं।
  • Retry-After: 429 पर फिर से प्रयास करने से पहले प्रतीक्षा करने के सेकंड (विलंब)

उदाहरण 429 प्रतिक्रिया:

http
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 तक फ़िल्टर करने के लिए true
  • nonSuspiciousOnly (वैकल्पिक): संदिग्ध (flagged.suspicious) Skills छिपाने के लिए true
  • nonSuspicious (वैकल्पिक): nonSuspiciousOnly के लिए लेगेसी उपनाम

प्रतिक्रिया:

json
{  "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/installsAllTime downloads पर मैप होते हैं, trending
  • nonSuspiciousOnly (वैकल्पिक): संदिग्ध (flagged.suspicious) Skills छिपाने के लिए true
  • nonSuspicious (वैकल्पिक): nonSuspiciousOnly के लिए लेगेसी उपनाम

अमान्य sort मान 400 लौटाते हैं।

टिप्पणियाँ:

  • recommended एंगेजमेंट और नवीनता संकेतों का उपयोग करता है।
  • trending पिछले 7 दिनों के इंस्टॉल के आधार पर रैंक करता है (टेलीमेट्री-आधारित)।
  • createdAt नए-Skill क्रॉल के लिए स्थिर है; मौजूदा Skills दोबारा प्रकाशित होने पर updated बदलता है।
  • जब nonSuspiciousOnly=true हो, तो कर्सर-आधारित सॉर्ट किसी पेज पर limit से कम आइटम लौटा सकते हैं क्योंकि संदिग्ध Skills पेज पुनर्प्राप्ति के बाद फ़िल्टर किए जाते हैं।
  • मौजूद होने पर पेजिनेशन जारी रखने के लिए nextCursor का उपयोग करें। छोटा पेज अपने आप में परिणामों के अंत का अर्थ नहीं है।

प्रतिक्रिया:

json
{  "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}

प्रतिक्रिया:

json
{  "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 में कोई प्लेटफ़ॉर्म मेटाडेटा नहीं है, तो metadata null है।
  • moderation केवल तब शामिल होता है जब Skill फ़्लैग किया गया हो या स्वामी उसे देख रहा हो।

GET /api/v1/skills/{slug}/moderation

संरचित मॉडरेशन स्थिति लौटाता है।

प्रतिक्रिया:

json
{  "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 टोकन आवश्यक है।

अनुरोध:

json
{ "reason": "Suspicious install step", "version": "1.2.3" }

प्रतिक्रिया:

json
{  "ok": true,  "reported": true,  "alreadyReported": false,  "reportId": "skillReports:...",  "skillId": "skills:...",  "reportCount": 1}

GET /api/v1/skills/-/reports

Skill रिपोर्ट इनटेक के लिए मॉडरेटर/प्रशासक एंडपॉइंट।

क्वेरी पैरामीटर:

  • status (वैकल्पिक): open (डिफ़ॉल्ट), confirmed, dismissed, या all
  • limit (वैकल्पिक): पूर्णांक (1-200)
  • cursor (वैकल्पिक): पेजिनेशन कर्सर

प्रतिक्रिया:

json
{  "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 रिपोर्टों को हल करने या फिर से खोलने के लिए मॉडरेटर/प्रशासक एंडपॉइंट।

अनुरोध:

json
{ "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 का उपयोग करते हैं:

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.dependencyRegistry v1 प्रतिक्रिया संगतता के लिए रखा गया है, लेकिन निर्भरता रजिस्ट्री अस्तित्व स्कैनर रिटायर हो चुका है और यह कुंजी हमेशा null होती है।
  • provenance केवल तब server-resolved-github-import होता है जब ClawHub ने प्रकाशन या आयात के दौरान GitHub रेपो/ref/commit/path को हल करके संग्रहीत किया हो; अन्यथा यह unavailable होता है।

POST /api/v1/skills/-/security-verdicts

सटीक कौशल संस्करणों के लिए वर्तमान कॉम्पैक्ट सुरक्षा निर्णय लौटाता है। यह संग्रह एंडपॉइंट उन क्लाइंट के लिए है जो पहले से जानते हैं कि उन्हें कौन से इंस्टॉल किए गए ClawHub कौशल संस्करण दिखाने हैं, जैसे OpenClaw Control UI।

अनुरोध:

json
{  "items": [{ "slug": "gifgrep", "version": "1.2.3" }]}

नोट्स:

  • items में 1-100 अद्वितीय { slug, version } जोड़े होने चाहिए।
  • परिणाम प्रति आइटम होते हैं; कोई एक अनुपस्थित कौशल या संस्करण पूरी प्रतिक्रिया को विफल नहीं करता।
  • प्रतिक्रिया केवल-सुरक्षा है। इसमें Skill Card डेटा, जनरेटेड कार्ड स्थिति, आर्टिफैक्ट फाइल सूचियां, या विस्तृत स्कैनर पेलोड शामिल नहीं हैं।
  • security.signals में केवल स्थिति-स्तर का सहायक साक्ष्य होता है; पूर्ण स्कैनर विवरण के लिए /scan या ClawHub सुरक्षा-ऑडिट पेज का उपयोग करें।
  • security.signals.dependencyRegistry v1 प्रतिक्रिया संगतता के लिए रखा गया है, लेकिन निर्भरता रजिस्ट्री अस्तित्व स्कैनर रिटायर हो चुका है और यह कुंजी हमेशा null होती है।
  • Skill Card की अनुपस्थिति इस एंडपॉइंट के ok, decision, या reasons को प्रभावित नहीं करती; क्लाइंट को कार्ड सामग्री चाहिए होने पर इंस्टॉल किए गए skill-card.md को स्थानीय रूप से पढ़ना चाहिए।
  • जब आपको एकल-कौशल Skill Card सत्यापन एनवेलप चाहिए हो तो /verify का उपयोग करें, जनरेटेड कार्ड मार्कडाउन चाहिए हो तो /card का उपयोग करें, और विस्तृत स्कैनर डेटा चाहिए हो तो /scan का उपयोग करें।

प्रतिक्रिया:

json
{  "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-plugin
  • channel (वैकल्पिक): official, community, या private
  • isOfficial (वैकल्पिक): true या false
  • sort (वैकल्पिक): updated (डिफ़ॉल्ट), recommended, trending, downloads, लेगेसी alias installs
  • category (वैकल्पिक): 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 aliases GET /api/v1/plugins के तहत दस्तावेज़ित हैं।

नोट्स:

  • family, channel, isOfficial, featured, highlightedOnly, या sort के अमान्य मान 400 लौटाते हैं। अज्ञात क्वेरी पैरामीटर अनदेखे किए जाते हैं।
  • GET /api/v1/code-plugins और GET /api/v1/bundle-plugins fixed-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 (आवश्यक): क्वेरी string
  • limit (वैकल्पिक): integer (1–100)
  • family (वैकल्पिक): skill, code-plugin, या bundle-plugin
  • channel (वैकल्पिक): official, community, या private
  • isOfficial (वैकल्पिक): true या false
  • category (वैकल्पिक): plugin category फ़िल्टर। केवल तब समर्थित जब अनुरोध plugin packages तक scoped हो। नियंत्रित categories और legacy v1 filter aliases GET /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 या false
  • sort (वैकल्पिक): recommended (डिफ़ॉल्ट), trending, downloads, updated, लेगेसी alias installs
  • category (वैकल्पिक): plugin category फ़िल्टर। मौजूदा मान: channels, models, memory, context, voice, media, web, tools, runtime, gateway, security, other.

Legacy v1 filter aliases read endpoints पर स्वीकार बने रहते हैं:

  • mcp-tooling, data, और automation tools में resolve होते हैं।
  • observability और deployment gateway में resolve होते हैं।
  • dev-tools runtime में 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 (आवश्यक): skill updatedAt के लिए Unix milliseconds lower bound।
  • endDate (आवश्यक): skill updatedAt के लिए 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 या suspicious scan वाली 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-Cursor
  • X-Has-More
  • X-Total-Returned
  • X-Date-Range
  • X-Export-Errors

GET /api/v1/plugins/export

ऑफ़लाइन विश्लेषण के लिए नवीनतम सार्वजनिक Plugin रिलीज़ का बल्क निर्यात।

प्रमाणीकरण:

  • API टोकन आवश्यक है।

क्वेरी पैरामीटर:

  • startDate (आवश्यक): Plugin updatedAt के लिए Unix मिलीसेकंड निचली सीमा।
  • endDate (आवश्यक): Plugin updatedAt के लिए 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-Cursor
  • X-Has-More
  • X-Total-Returned
  • X-Date-Range
  • X-Export-Errors

GET /api/v1/plugins/search

code-plugin और bundle-plugin पैकेजों में केवल-Plugin खोज।

क्वेरी पैरामीटर:

  • q (आवश्यक): क्वेरी स्ट्रिंग
  • limit (वैकल्पिक): पूर्णांक (1-100)
  • isOfficial (वैकल्पिक): true या false
  • category (वैकल्पिक): 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 उपभोग सतह है कि कोई रिज़ॉल्व की गई रिलीज़ इंस्टॉल की जा सकती है या नहीं।

प्रमाणीकरण:

  • सार्वजनिक रीड एंडपॉइंट। कोई स्वामी, प्रकाशक, मॉडरेटर, या एडमिन टोकन आवश्यक नहीं है।

प्रतिसाद:

json
{  "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.moderationState nullable है। जब कोई मैनुअल रिलीज़ मॉडरेशन मौजूद नहीं होता, यह 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 आर्टिफ़ैक्ट और पुराना ZIP downloadUrl लौटाते हैं।
  • 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 संगतता मेटाडेटा
  • होस्ट लक्ष्य
  • स्कैन स्थिति

प्रतिसाद:

json
{  "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 (वैकल्पिक): पेजिनेशन कर्सर

प्रतिसाद:

json
{  "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 टोकन आवश्यक है।

अनुरोध बॉडी:

json
{  "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 कुंजी है।
  • packageName npm-name सामान्यीकृत है; नियोजित माइग्रेशन के लिए पैकेज अनुपस्थित हो सकता है।
  • यह केवल माइग्रेशन तैयारी ट्रैक करता है। यह OpenClaw को परिवर्तित नहीं करता या ClawPacks जनरेट नहीं करता।

GET /api/v1/packages/moderation/queue

पैकेज रिलीज़ समीक्षा कतारों के लिए मॉडरेटर/एडमिन एंडपॉइंट।

प्रमाणीकरण:

  • मॉडरेटर या एडमिन उपयोगकर्ता के लिए API टोकन आवश्यक है।

क्वेरी पैरामीटर:

  • status (वैकल्पिक): open (डिफ़ॉल्ट), blocked, manual, या all
  • limit (वैकल्पिक): पूर्णांक (1-100)
  • cursor (वैकल्पिक): पेजिनेशन कर्सर

स्थिति अर्थ:

  • open: संदिग्ध, दुर्भावनापूर्ण, लंबित, क्वारंटीन, निरस्त, या रिपोर्ट की गई रिलीज़।
  • blocked: क्वारंटीन, निरस्त, या दुर्भावनापूर्ण रिलीज़।
  • manual: मैनुअल मॉडरेशन ओवरराइड वाली कोई भी रिलीज़।
  • all: मैनुअल ओवरराइड, non-clean स्कैन स्थिति, या पैकेज रिपोर्ट वाली कोई भी रिलीज़।

प्रतिसाद:

json
{  "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 टोकन आवश्यक है।

अनुरोध:

json
{ "reason": "Suspicious native binary", "version": "1.2.3" }

प्रतिसाद:

json
{  "ok": true,  "reported": true,  "alreadyReported": false,  "packageId": "packages:...",  "releaseId": "packageReleases:...",  "reportCount": 1}

GET /api/v1/packages/reports

पैकेज रिपोर्ट ग्रहण के लिए मॉडरेटर/एडमिन एंडपॉइंट।

प्रमाणीकरण:

  • मॉडरेटर या एडमिन उपयोगकर्ता के लिए API टोकन आवश्यक है।

क्वेरी पैरामीटर:

  • status (वैकल्पिक): open (डिफ़ॉल्ट), confirmed, dismissed, या all
  • limit (वैकल्पिक): पूर्णांक (1-100)
  • cursor (वैकल्पिक): पेजिनेशन कर्सर

प्रतिक्रिया:

json
{  "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 टोकन आवश्यक है।

प्रतिक्रिया:

json
{  "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

पैकेज रिपोर्ट हल करने या फिर से खोलने के लिए मॉडरेटर/एडमिन एंडपॉइंट।

अनुरोध:

json
{  "status": "confirmed",  "note": "Reviewed and quarantined affected release.",  "finalAction": "quarantine"}

confirmed और dismissed के लिए note आवश्यक है; status को वापस open पर सेट करते समय इसे छोड़ा जा सकता है। उसी ऑडिट योग्य वर्कफ़्लो में रिलीज़ मॉडरेशन लागू करने के लिए पुष्टि की गई रिपोर्ट के साथ finalAction: "quarantine" या finalAction: "revoke" पास करें।

प्रतिक्रिया:

json
{  "ok": true,  "reportId": "packageReports:...",  "packageId": "packages:...",  "status": "confirmed",  "reportCount": 0}

POST /api/v1/packages/{name}/versions/{version}/moderation

पैकेज रिलीज़ समीक्षा के लिए मॉडरेटर/एडमिन एंडपॉइंट।

अनुरोध:

json
{ "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.shasum npm-संगत फ़ील्ड का उपयोग करते हैं ताकि उपयोगकर्ता चाहें तो 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

प्रतिक्रिया:

json
{ "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 टोकन)

सभी एंडपॉइंट्स के लिए आवश्यक:

Code
Authorization: Bearer clh_...

GET /api/v1/whoami

टोकन सत्यापित करता है और उपयोगकर्ता हैंडल लौटाता है।

POST /api/v1/skills

नया संस्करण प्रकाशित करता है।

  • प्राथमिकता: payload JSON + files[] blobs के साथ multipart/form-data
  • files (storageId-आधारित) वाला JSON body भी स्वीकार किया जाता है।
  • वैकल्पिक पेलोड फ़ील्ड: ownerHandle। मौजूद होने पर, API उस प्रकाशक को सर्वर-साइड रिज़ॉल्व करता है और अभिनेता के पास प्रकाशक एक्सेस होना आवश्यक करता है।
  • वैकल्पिक पेलोड फ़ील्ड: migrateOwnerownerHandle के साथ true होने पर, कोई मौजूदा skill उस मालिक के पास जा सकती है यदि अभिनेता मौजूदा और लक्ष्य, दोनों प्रकाशकों पर एडमिन/मालिक है। इस opt-in के बिना, मालिक बदलाव अस्वीकार किए जाते हैं।

POST /api/v1/packages

code-plugin या bundle-plugin रिलीज़ प्रकाशित करता है।

  • Bearer टोकन प्रमाणीकरण आवश्यक है।
  • multipart/form-data आवश्यक है।
  • अनुमत फ़ॉर्म फ़ील्ड payload, दोहराए गए files blobs, या एक clawpack tarball संदर्भ हैं। clawpack एक .tgz blob या 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 वैकल्पिक मेटाडेटा हैं।
  • केवल openclaw org प्रकाशक और मौजूदा openclaw org सदस्यों के व्यक्तिगत प्रकाशक official चैनल पर प्रकाशित कर सकते हैं।
  • किसी की ओर से किए गए प्रकाशन लक्ष्य मालिक खाते के विरुद्ध official-channel पात्रता अब भी सत्यापित करते हैं।

DELETE /api/v1/skills/{slug} / POST /api/v1/skills/{slug}/undelete

skill को सॉफ्ट-डिलीट / पुनर्स्थापित करें (मालिक, मॉडरेटर, या एडमिन)।

वैकल्पिक JSON body:

json
{ "reason": "Held for moderation pending legal review." }

मौजूद होने पर, reason को skill मॉडरेशन नोट के रूप में संग्रहीत किया जाता है और ऑडिट लॉग में कॉपी किया जाता है। मालिक-आरंभित सॉफ्ट डिलीट slug को 30 दिनों के लिए आरक्षित रखते हैं, फिर slug को दूसरा प्रकाशक दावा कर सकता है। यह समाप्ति लागू होने पर डिलीट प्रतिक्रिया में slugReservedUntil शामिल होता है। मॉडरेटर/एडमिन द्वारा छिपाने और सुरक्षा हटाने पर इस तरह समाप्ति नहीं होती।

डिलीट प्रतिक्रिया:

json
{ "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" }
  • POST /api/v1/skills/{slug}/merge
    • Body: { "targetSlug": "canonical-target-slug" }
    • Response: { "ok": true, "sourceSlug": "old-slug", "targetSlug": "canonical-target-slug" }

नोट्स:

  • दोनों endpoints को API token auth की आवश्यकता होती है और ये केवल skill owner के लिए काम करते हैं।
  • rename पिछले slug को redirect alias के रूप में सुरक्षित रखता है।
  • merge source 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 }
  • POST /api/v1/skills/{slug}/transfer/accept
  • POST /api/v1/skills/{slug}/transfer/reject
  • POST /api/v1/skills/{slug}/transfer/cancel
    • Response (accept/reject/cancel): { "ok": true, "skillSlug": "demo-skill?" }
  • GET /api/v1/transfers/incoming
  • GET /api/v1/transfers/outgoing
    • Response shape: { "transfers": [{ "_id": "...", "skill": { "slug": "demo", "displayName": "Demo" }, "fromUser"|"toUser": { "handle": "..." }, "message": "...", "requestedAt": 0, "expiresAt": 0 }] }

POST /api/v1/users/ban

किसी उपयोगकर्ता को ban करें और owned skills को hard-delete करें (केवल moderator/admin)।

Body:

json
{ "handle": "user_handle", "reason": "optional ban reason" }

या

json
{ "userId": "users_...", "reason": "optional ban reason" }

Response:

json
{ "ok": true, "alreadyBanned": false, "deletedSkills": 3 }

POST /api/v1/users/unban

किसी उपयोगकर्ता को unban करें और eligible skills को restore करें (केवल admin)।

Body:

json
{ "handle": "user_handle", "reason": "optional unban reason" }

या

json
{ "userId": "users_...", "reason": "optional unban reason" }

Response:

json
{ "ok": true, "alreadyUnbanned": false, "restoredSkills": 3 }

POST /api/v1/users/reclassify-ban

किसी मौजूदा ban के लिए stored reason को, unban किए बिना या content restore किए बिना, बदलें (केवल admin)। जब तक dryRun false न हो, डिफ़ॉल्ट dry-run होता है।

Body:

json
{ "handle": "user_handle", "reason": "bulk publishing spam", "dryRun": true }

या

json
{ "userId": "users_...", "reason": "bulk publishing spam", "dryRun": false }

Response:

json
{  "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:

json
{ "handle": "user_handle", "role": "moderator" }

या

json
{ "userId": "users_...", "role": "admin" }

Response:

json
{ "ok": true, "role": "moderator" }

GET /api/v1/users

उपयोगकर्ताओं की सूची दें या खोजें (केवल admin)।

Query params:

  • q (optional): search query
  • query (optional): q के लिए alias
  • limit (optional): अधिकतम results (default 20, max 200)

Response:

json
{  "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:

json
{ "ok": true, "starred": true, "alreadyStarred": false }
json
{ "ok": true, "unstarred": true, "alreadyUnstarred": false }

Legacy CLI endpoints (deprecated)

पुराने CLI versions के लिए अभी भी supported:

  • GET /api/cli/whoami
  • POST /api/cli/upload-url
  • POST /api/cli/publish
  • POST /api/cli/telemetry/install
  • POST /api/cli/skill/delete
  • POST /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:

json
{ "apiBase": "https://clawhub.ai", "authBase": "https://clawhub.ai", "minCliVersion": "0.0.5" }

यदि आप self-host करते हैं, तो यह file serve करें (या CLAWHUB_REGISTRY explicit रूप से set करें; legacy CLAWDHUB_REGISTRY)।

Was this useful?
On this page

On this page