{"openapi":"3.0.3","info":{"title":"Semver & Dependency Diff Judge API","version":"1.0.0","description":"Compares two package.json manifests and scores dependency changes for major breaking bumps, 0.x minor breaking bumps, downgrades, pre-releases, and unpinned/VCS specifiers."},"servers":[{"url":"https://api.tinplate.dev","description":"Production Edge Gateway"}],"components":{"schemas":{"SemverLockfileJudgeResponseData":{"type":"object","properties":{"verdict":{"type":"string","enum":["allow","review","block"]},"risk_score":{"type":"integer","minimum":0,"maximum":100},"breaking_count":{"type":"integer","minimum":0},"summary":{"type":"object","properties":{"total_changes":{"type":"integer"},"major_breaking":{"type":"integer"},"zero_ver_breaking":{"type":"integer"},"downgrades":{"type":"integer"},"unpinned_or_vcs":{"type":"integer"},"added":{"type":"integer"},"removed":{"type":"integer"},"minor_or_patch":{"type":"integer"}},"required":["total_changes","major_breaking","zero_ver_breaking","downgrades","unpinned_or_vcs","added","removed","minor_or_patch"]},"changes":{"type":"array","items":{"type":"object","properties":{"package":{"type":"string"},"section":{"type":"string","enum":["dependencies","devDependencies","peerDependencies","optionalDependencies","engines"]},"before_spec":{"type":"string","nullable":true},"after_spec":{"type":"string","nullable":true},"change_type":{"type":"string","enum":["major_breaking","zero_ver_breaking","downgrade","prerelease_introduced","unpinned_or_vcs","removed","added","minor_upgrade","patch_upgrade","range_tightened_or_changed"]},"risk":{"type":"string","enum":["critical","high","medium","low","info"]},"explanation":{"type":"string"}},"required":["package","section","before_spec","after_spec","change_type","risk","explanation"]}},"recommendations":{"type":"array","items":{"type":"string"}}},"required":["verdict","risk_score","breaking_count","summary","changes","recommendations"]},"SemverLockfileJudgeRequest":{"type":"object","properties":{"before":{"anyOf":[{"type":"string","maxLength":262144},{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"engines":{"type":"object","additionalProperties":{"type":"string"}},"dependencies":{"type":"object","additionalProperties":{"type":"string"}},"devDependencies":{"type":"object","additionalProperties":{"type":"string"}},"peerDependencies":{"type":"object","additionalProperties":{"type":"string"}},"optionalDependencies":{"type":"object","additionalProperties":{"type":"string"}},"overrides":{"type":"object","additionalProperties":{"nullable":true}},"resolutions":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":{"nullable":true}}]},"after":{"anyOf":[{"type":"string","maxLength":262144},{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"engines":{"type":"object","additionalProperties":{"type":"string"}},"dependencies":{"type":"object","additionalProperties":{"type":"string"}},"devDependencies":{"type":"object","additionalProperties":{"type":"string"}},"peerDependencies":{"type":"object","additionalProperties":{"type":"string"}},"optionalDependencies":{"type":"object","additionalProperties":{"type":"string"}},"overrides":{"type":"object","additionalProperties":{"nullable":true}},"resolutions":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":{"nullable":true}}]},"include_dev_dependencies":{"type":"boolean","default":true},"fail_on_zero_ver_minor":{"type":"boolean","default":true}},"required":["before","after"]},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid"},"ms":{"type":"integer","minimum":0},"version":{"type":"string","example":"1.0.0"}}},"ErrorEnvelope":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_input"},"message":{"type":"string","example":"Request body failed validation"}}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}},"parameters":{}},"paths":{"/v1/semver-lockfile-judge":{"post":{"tags":["27_SEMVER_LOCKFILE_JUDGE"],"summary":"Judge SemVer risk between two package.json manifests","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemverLockfileJudgeRequest"}}}},"responses":{"200":{"description":"SemVer diff verdict, risk score, and per-package change breakdown","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/SemverLockfileJudgeResponseData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["ok","data","meta"]}}}},"400":{"description":"Invalid input or malformed JSON request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid authentication credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request payload exceeds subscribed plan byte cap","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}}}