{"name":"WoolKey Credential Generator","version":"1.1.0","description":"Generates cryptographically secure passwords and passphrases. Stateless: no credential is stored, logged, or retained.","openapi":"/api/openapi.json","stateless":true,"storage":"none","auth":{"required":true,"scheme":"api-key","headers":["X-Api-Key: <token>","Authorization: Bearer <token>"]},"endpoints":[{"method":"GET","path":"/api/generate","auth":false,"description":"This descriptor"},{"method":"GET","path":"/api/health","auth":false,"description":"Liveness probe"},{"method":"POST","path":"/api/generate","auth":true,"description":"Generate credentials"}],"limits":{"maxCount":20,"rateLimit":{"requests":20,"windowSeconds":60},"maxBodyBytes":16384},"request":{"mode":{"type":"string","required":true,"enum":["password","passphrase"]},"count":{"type":"integer","required":false,"default":1,"min":1,"max":20},"entropyMode":{"type":"string","required":false,"default":"system","enum":["system"],"note":"\"system+user\" is browser-only (window.WoolKeyAPI); the server has no user input to mix."}},"modes":{"password":{"options":{"length":{"type":"integer","default":24,"min":8,"max":128},"includeLowercase":{"type":"boolean","default":true},"includeUppercase":{"type":"boolean","default":true},"includeNumbers":{"type":"boolean","default":true},"includeSymbols":{"type":"boolean","default":false},"avoidAmbiguous":{"type":"boolean","default":false,"note":"Excludes 0O1Il5S8B"},"excludedCharacters":{"type":"string","default":"","maxLength":128}},"symbolSet":"!@#$%^&*()-_=+[]{};:,.?"},"passphrase":{"options":{"wordCount":{"type":"integer","default":4,"min":4,"max":8},"separator":{"type":"string","default":"hyphen","enum":["hyphen","underscore","dot","space"]},"capitalize":{"type":"boolean","default":false},"addNumber":{"type":"boolean","default":false,"note":"Appends a two-digit suffix; not counted toward entropy."}},"wordListSize":1144}},"strengthLevels":[{"level":0,"label":"Weak","minBits":0},{"level":1,"label":"Fair","minBits":40},{"level":2,"label":"Strong","minBits":60},{"level":3,"label":"Very strong","minBits":80},{"level":4,"label":"Excellent","minBits":100}]}