diff --git a/assets/i18n/en-US.json b/assets/i18n/en-US.json
index 124a510..af7c3bc 100644
--- a/assets/i18n/en-US.json
+++ b/assets/i18n/en-US.json
@@ -281,5 +281,7 @@
   "settingsEnterToSend": "Enter to Send",
   "postTitle": "Title",
   "postDescription": "Description",
-  "call": "Call"
+  "call": "Call",
+  "done": "Done",
+  "loginResetPasswordSent": "Password reset link sent, please check your email inbox."
 }
diff --git a/lib/screens/auth/login.dart b/lib/screens/auth/login.dart
index 34543a6..b23b767 100644
--- a/lib/screens/auth/login.dart
+++ b/lib/screens/auth/login.dart
@@ -19,6 +19,8 @@ import 'package:material_symbols_icons/symbols.dart';
 import 'package:styled_widget/styled_widget.dart';
 import 'package:url_launcher/url_launcher_string.dart';
 
+import 'captcha.dart';
+
 final Map<int, (String, String, IconData)> kFactorTypes = {
   0: ('authFactorPassword', 'authFactorPasswordDescription', Symbols.password),
   1: ('authFactorEmail', 'authFactorEmailDescription', Symbols.email),
@@ -354,15 +356,18 @@ class _LoginLookupScreen extends HookConsumerWidget {
         showErrorAlert('loginResetPasswordHint'.tr());
         return;
       }
+      final captchaTk = await Navigator.of(
+        context,
+      ).push(MaterialPageRoute(builder: (context) => CaptchaScreen()));
+      if (captchaTk == null) return;
       isBusy.value = true;
       try {
         final client = ref.watch(apiClientProvider);
-        final lookupResp = await client.get('/users/lookup?probe=$uname');
         await client.post(
-          '/users/me/password-reset',
-          data: {'user_id': lookupResp.data['id']},
+          '/accounts/recovery/password',
+          data: {'account': uname, 'captcha_token': captchaTk},
         );
-        showInfoAlert('done'.tr(), 'signinResetPasswordSent'.tr());
+        showInfoAlert('loginResetPasswordSent'.tr(), 'done'.tr());
       } catch (err) {
         showErrorAlert(err);
       } finally {