{
 "openapi": "3.1.0",
 "info": {
  "title": "Notary API",
  "version": "1.0.0",
  "description": "Notary checks npm and PyPI package names against the live registry before you install them: does it exist, does that version exist, how old and how used is it, is it deprecated, does it run install scripts, is it a typo of a famous package. No account. Public, no API key. Rate limited.",
  "contact": {
   "name": "Clawhard Studio",
   "url": "https://clawhard.com",
   "email": "support@clawhard.com"
  }
 },
 "servers": [
  {
   "url": "https://notary.clawhard.com"
  }
 ],
 "paths": {
  "/api/v1/check_packages": {
   "post": {
    "operationId": "check_packages",
    "summary": "Check that npm and PyPI packages really exist before installing them",
    "description": "Use when you or the user are about to install or import npm or PyPI packages: before npm install or pip install, when adding lines to package.json or requirements.txt, or when a package name came from an AI answer, a tutorial or memory and may be invented.",
    "x-full-description": "Use when you or the user are about to install or import npm or PyPI packages: before npm install or pip install, when adding lines to package.json or requirements.txt, or when a package name came from an AI answer, a tutorial or memory and may be invented. Looks each name up in the live registry and returns whether it exists, the latest version, whether a pinned version exists, weekly downloads, first and last publish dates, deprecation or yanked status, install-time scripts, whether the name is one or two typed characters from a well-known package, and real similar packages when the name does not exist. Example: {\"packages\":[{\"ecosystem\":\"npm\",\"name\":\"@anthropic/mcp-client\"},{\"ecosystem\":\"pypi\",\"name\":\"requests\",\"version\":\"2.32.3\"}]}. Up to 10 packages per call; versions must be exact, not ranges. Not a malware or vulnerability scan: \"ok\" means it exists and nothing looked wrong. Returns: {checked_at, counts:{ok,caution,not_found,version_not_found,placeholder,unknown}, summary, results:[{ecosystem, name, requested_version, exists, verdict, latest, checked_version, version_checked:{version,exists,deprecated?,yanked?,available?}, downloads_last_week, first_published, last_published, age_days, versions_count, flags:[{level: block|warn|info, code, text}], notes, links:{registry,repository}, license, description, install_scripts?, provenance?, did_you_mean:[{name,why,version?,weekly_downloads?,description?}], summary}], sources, engine, open_url}",
    "x-openai-isConsequential": false,
    "responses": {
     "200": {
      "description": "Result. Always has \"ok\": true.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          }
         },
         "additionalProperties": true
        }
       }
      }
     },
     "400": {
      "description": "Bad input. {\"ok\":false,\"error\":\"...\"}"
     },
     "429": {
      "description": "Rate limited. Retry after the Retry-After header."
     }
    },
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "properties": {
         "packages": {
          "type": "array",
          "minItems": 1,
          "maxItems": 10,
          "description": "1 to 10 packages to look up.",
          "items": {
           "type": "object",
           "properties": {
            "ecosystem": {
             "type": "string",
             "enum": [
              "npm",
              "pypi"
             ],
             "description": "Which registry: npm (JavaScript, TypeScript, Node) or pypi (Python)."
            },
            "name": {
             "type": "string",
             "minLength": 1,
             "maxLength": 214,
             "description": "The package name only, e.g. left-pad, @types/node or requests. No version, extras (requests[security]), URL or path."
            },
            "version": {
             "type": "string",
             "maxLength": 64,
             "description": "Optional: one exact version to verify, e.g. 4.17.21 (npm also accepts a dist-tag like latest). Not a range such as ^4.17.0."
            }
           },
           "required": [
            "ecosystem",
            "name"
           ]
          }
         }
        },
        "required": [
         "packages"
        ]
       }
      }
     }
    }
   }
  }
 },
 "externalDocs": {
  "description": "llms.txt",
  "url": "https://notary.clawhard.com/llms.txt"
 }
}