{"endpoints":[{"path":"/","method":"GET","description":"Returns a list of all available endpoints","parameters":null,"request_body":null,"response":{"type":"application/json","schema":{"endpoints":"array of endpoint objects"}}},{"path":"/encode-secret","method":"POST","description":"Encode a secret into an image using LSB steganography","parameters":null,"request_body":{"type":"application/json","schema":{"secret":"string (required) - The secret message to encode","cover_image_path":"string (optional) - Path to cover image (currently not used, generates gradient)"}},"response":{"type":"image/png","description":"PNG image file with encoded secret"}},{"path":"/decode-secret","method":"POST","description":"Decode a secret from an image using LSB steganography","parameters":null,"request_body":{"type":"multipart/form-data","schema":{"image":"file (required) - PNG image file containing encoded secret"}},"response":{"type":"application/json","schema":{"secret":"string - The decoded secret message"}}},{"path":"/encrypt-file","method":"POST","description":"Encrypt a file and encode it into a steganography image","parameters":null,"request_body":{"type":"multipart/form-data","schema":{"file":"file (required) - File to encrypt and encode"}},"response":{"type":"application/json","schema":{"decrypt_at":"string - URL (SITE_URL?d=<key_id>) used to retrieve the decryption key (valid for 48 hours)","encrypted_image":"string - Base64-encoded PNG image (dynamically sized to the payload) with encrypted file encoded using LSB steganography"}}},{"path":"/auth/signup","method":"POST","description":"Create an account (email + password); returns a JWT access token","parameters":null,"request_body":{"type":"application/json","schema":{"email":"string (required)","password":"string (required, min 8 chars)"}},"response":{"type":"application/json","schema":{"access_token":"string","token_type":"bearer","user":"object {id, email}"}}},{"path":"/auth/login","method":"POST","description":"Log in with email + password; returns a JWT access token","parameters":null,"request_body":{"type":"application/json","schema":{"email":"string (required)","password":"string (required)"}},"response":{"type":"application/json","schema":{"access_token":"string","token_type":"bearer","user":"object {id, email}"}}},{"path":"/auth/me","method":"GET","description":"Return the current authenticated user (requires Bearer token)","parameters":null,"request_body":null,"response":{"type":"application/json","schema":{"id":"string","email":"string"}}},{"path":"/encrypt-password","method":"POST","description":"Encrypt a password with Fernet and embed it into a steganography image. Anonymous: embeds key+ciphertext (self-contained). Authenticated (Bearer token): stores the key under keys/users/<userId>/passwords/ and embeds only a key reference.","parameters":null,"request_body":{"type":"application/json","schema":{"password":"string (required) - The password to encrypt"}},"response":{"type":"image/png","description":"PNG image file with the encrypted password embedded via LSB"}},{"path":"/decode-password","method":"POST","description":"Decode and decrypt a password image produced by /encrypt-password; falls back to raw decode for /encode-secret images. Account (apwd) images require a Bearer token for the owning user.","parameters":null,"request_body":{"type":"multipart/form-data","schema":{"image":"file (required) - PNG image file containing an encrypted password"}},"response":{"type":"application/json","schema":{"password":"string - The decrypted password","format":"string - 'password' for /encrypt-password images, 'secret' for /encode-secret images"}}},{"path":"/decrypt-file","method":"POST","description":"Decrypt an image file that contains an encrypted file encoded using LSB steganography","parameters":null,"request_body":{"type":"multipart/form-data","schema":{"image":"file (required) - PNG image file containing encrypted content encoded using LSB steganography","key_id":"string (required) - The key identifier (UUID) to retrieve the decryption key"}},"response":{"type":"application/octet-stream","description":"Decrypted file as binary download"}},{"path":"/health","method":"GET","description":"Health check endpoint","parameters":null,"request_body":null,"response":{"type":"application/json","schema":{"status":"string - Health status (e.g., 'healthy')"}}}]}