`POST /account/forgot-password`. Unauthenticated. Always returns 202 — the response shape is identical whether the email matches a real user, matches a federated user, or matches nothing. Anti-enumeration is the whole point: callers learn nothing from the response except "we accepted your request".
/account/forgot-passwordWhen the email matches a non-federated user, we generate a fresh
setup token (the same machinery signup and invitation use) and
email the user a <slug>.<apex>/set-password#<token> link. Since
rh-j4af1x the user's row is not touched: this request proves
nothing about who sent it, and POST /account/passwords accepts
the token on the token row rather than on the user's status.
Federated users (provisioned_by.is_some()) never get a token —
their credentials live in their IdP, not in Cognito. Auditing
distinguishes every outcome (sent / skipped_federated /
skipped_unknown / …) so operators can spot enumeration attempts.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X POST "https://example.com/account/forgot-password" \ -H "Content-Type: application/json" \ -d '{ "email": "string", "slug": "string" }'`POST /users/{id}/password-resets` — admin-initiated password reset. POST
Targets a single user identified by `(auth.org_id, path id)`, kills their existing Cognito password with a random plaintext the admin never sees, and emails a fresh setup link so the user can pick a new one. Different from `POST /account/forgot-password` in two ways: 1. The admin is the actor; the target user might not know it happened until they read the email. We therefore use a distinct email copy (`SetupFlow::AdminPasswordReset`) that tells the user their old password is dead, not "you can ignore this and keep using your old one." 2. The endpoint is admin-only and not anti-enumeration: the admin can already enumerate their own org's users via `GET /users`, so opaque error responses would add nothing. Returns: - `200 { userId, sentTo, resetAt }` on success. - `400` if the target is a federated or app user (federated → "use your IdP"; service → "no password"). - `403` if the caller is not an admin. - `404` if the target user doesn't exist in the caller's org. - `500` if the org row, Cognito pool, or signing key are missing — these are operator-visible misconfigs, not user errors.
Account_set_password POST
Next Page