The set-password screen is only valid with a real slug and was not captured.
Behavior
Request
Email field, required and must look like an email.
Invisible reCAPTCHA (size=invisible, dark theme) runs before submit.
Success always navigates to the confirmation screen.
Failure: “Unable to reset password. Please try again.”
Back to Sign In.
Confirmation
Title “Check Your Email”.
Copy: “If an account exists for that address, we sent a link to set a new password.”
No API. Back to Sign In.
Set password
Read slug from the query string. Missing or GET failure → Sign in.
While checking the link, show a loading state.
Two fields, password1 and password2. Rules: match, min length, at least one number, at least one special character.
Success → Sign in.
API
Unauthenticated client (web cleanAxiosInstance, no Bearer token).
Call
Purpose
POST user/reset_password/
Body { email, recaptchaToken }.
GET user/set_password/{slug}/
Validate the email link.
POST user/set_password/{slug}/
Body { password1, password2 }.
Android
In-app screens or a Custom Tab are both acceptable. reCAPTCHA must run against a key that allows the Android origin; the headless capture hit an invalid-domain badge and that badge is not part of the product UI. Deep-link /set_password/?slug= from the email.
Part of #1.
Web routes:
- `/password_reset/` request form
- `/password_reset_confirmation/` “check your email”
- `/set_password/?slug=` set a new password from the email link (also used by company invites)
Sources: `pages/PasswordReset/PasswordReset.tsx`, `pages/PasswordResetConfirmation/PasswordReset.tsx`, `components/SetPassword/SetPassword.tsx`.
## Screenshots


Phone-width captures. Analytics consent banner dismissed before capture.
1. Reset request: https://hesychia.ai/password_reset/
2. Confirmation: https://hesychia.ai/password_reset_confirmation/
The set-password screen is only valid with a real `slug` and was not captured.
## Behavior
**Request**
- Email field, required and must look like an email.
- Invisible reCAPTCHA (`size=invisible`, dark theme) runs before submit.
- Success always navigates to the confirmation screen.
- Failure: “Unable to reset password. Please try again.”
- Back to Sign In.
**Confirmation**
- Title “Check Your Email”.
- Copy: “If an account exists for that address, we sent a link to set a new password.”
- No API. Back to Sign In.
**Set password**
- Read `slug` from the query string. Missing or `GET` failure → Sign in.
- While checking the link, show a loading state.
- Two fields, `password1` and `password2`. Rules: match, min length, at least one number, at least one special character.
- Success → Sign in.
## API
Unauthenticated client (web `cleanAxiosInstance`, no Bearer token).
| Call | Purpose |
| --- | --- |
| `POST user/reset_password/` | Body `{ email, recaptchaToken }`. |
| `GET user/set_password/{slug}/` | Validate the email link. |
| `POST user/set_password/{slug}/` | Body `{ password1, password2 }`. |
## Android
In-app screens or a Custom Tab are both acceptable. reCAPTCHA must run against a key that allows the Android origin; the headless capture hit an invalid-domain badge and that badge is not part of the product UI. Deep-link `/set_password/?slug=` from the email.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #1.
Web routes:
/password_reset/request form/password_reset_confirmation/“check your email”/set_password/?slug=set a new password from the email link (also used by company invites)Sources:
pages/PasswordReset/PasswordReset.tsx,pages/PasswordResetConfirmation/PasswordReset.tsx,components/SetPassword/SetPassword.tsx.Screenshots
Phone-width captures. Analytics consent banner dismissed before capture.
The set-password screen is only valid with a real
slugand was not captured.Behavior
Request
size=invisible, dark theme) runs before submit.Confirmation
Set password
slugfrom the query string. Missing orGETfailure → Sign in.password1andpassword2. Rules: match, min length, at least one number, at least one special character.API
Unauthenticated client (web
cleanAxiosInstance, no Bearer token).POST user/reset_password/{ email, recaptchaToken }.GET user/set_password/{slug}/POST user/set_password/{slug}/{ password1, password2 }.Android
In-app screens or a Custom Tab are both acceptable. reCAPTCHA must run against a key that allows the Android origin; the headless capture hit an invalid-domain badge and that badge is not part of the product UI. Deep-link
/set_password/?slug=from the email.