Skip to content

CustomerForgotPassword

POST /customer/auth/forgot-password

Public endpoint; Authorization is not required. Requests password recovery, not email delivery specifically. The server creates a reset token and emits an internal event; workflow chooses a delivery_route and publishes a delivery request to trusted modules. The module owns its templates, channel and provider.

Request

{"email":"[email protected]"}

Email is required, 3–255 characters. Brand is resolved from server-provided __hostname. Without hostname, brand may be supplied explicitly. Identity lookup is limited to that brand; ambiguous email matches do not produce a recovery event. Disabled customers do not receive recovery requests.

Response

HTTP 202:

{
  "success":true,
  "message":"If the customer exists, the recovery request has been accepted for processing"
}

The same response is returned for an unknown customer, missing recovery configuration or a throttled request. It contains neither token nor reset_url and does not confirm event publication, message queue acceptance or delivery. Invalid email input returns HTTP 400 with {"error":"INVALID_DATA"}.

brand.terminal_host/:language/sign/recovery/:hash

Without an explicit scheme, HTTPS is added to terminal_host; trailing slashes are removed. Language is customer preferred_language, then brand default_language, then en. The :hash path segment is the random recovery token, not the email hash or request_id. No separate customer_password_reset_url setting is required.

The terminal reads the token from the path and submits it to CustomerResetPassword. Opening the page does not consume it.

First-stage limitations

Token lifetime: 30 minutes. A new accepted request replaces the previous token. Requests for a found customer are limited to one per 60 seconds; requests with a server-provided __ip are additionally limited to 10 per minute. Limits are local to the server process. Reset state is in memory: restarting the server invalidates links. No delivery acknowledgement, event retries, replay or durable outbox is provided. An active workflow rule and an external subscriber are required for delivery.

See workflow and module contract.