Skip to main content

POST /v1/auth/password/reset

Consume a password reset token and set the new password. Revokes every active session for the user — a password reset is a "potentially compromised" signal.

::: tip Auth Required: none. The token IS the credential. :::

Request

POST /v1/auth/password/reset

HeaderRequiredNotes
Content-Type: application/jsonyes

Body

{
"token": "abc...32_byte_base64",
"new_password": "a-fresh-secret-with-at-least-12-chars"
}
FieldTypeRequiredNotes
tokenstringyesThe raw token from the reset email.
new_passwordstringyes12–256 chars.

Response

204 No Content

The user's password is updated, last_password_change is bumped, and every active session is revoked. The caller must now log in with the new password.

Error responses

StatusCodeWhen
400invalid_inputToken missing, or new_password fails the length check.
401authentication_requiredToken doesn't match, already consumed, or expired.
404not_foundUser the token belongs to no longer exists.
500internal_errorDB or hashing failure.

Notes

  • An audit entry (auth.password_reset.consumed) is recorded.
  • All session-cache entries for the revoked sessions are invalidated so the middleware sees the revocation immediately on the next request.
  • The reset is single-use; the row is marked consumed_at = now() on success.
  • The new_password is hashed with Argon2id before storage.