What Fini handles and what it hands to your team
How it works in Fini
Design your reset endpoint for chat
YourSend Password Reset endpoint should behave the same way your public “forgot password” form does:
- Send only to the address on file. The Action passes a login email; your system sends the link to that account’s registered email, never to an address supplied in the conversation that differs from it.
- Return the same response whether or not the account exists. The Reply then uses neutral wording (“if an account exists for that email, a reset link is on its way”), so the conversation can’t be used to discover which emails have accounts.
- Rate-limit on your side too. The tree checks
recent_reset_requestswhen it can identify the account, but your endpoint should enforce its own limit.
Example behavior tree
Example to adapt. Tag values, field names, and Action names below are placeholders; replace them with the ones in your workspace.
auth_method or recent_reset_requests isn’t populated (the requester couldn’t be identified yet), those Checks fail and their branches are skipped. The reset branch needs a login email; if the Read can’t find one, the branch fails and the next branch asks for it. Tree variables don’t carry over between messages, so on the customer’s next message the rule runs again from the root with the email now in the conversation.
If Send Password Reset fails, the reset branch fails too and the Fallback moves on to the ask-for-email branch, whose intent Check passes, so the customer is asked for the email again. To hand off instead, wrap the Tool and its Reply in a Fallback whose second child is a Reply saying a teammate will follow up.
Guardrails and escalation
1
Tell the agent never to handle credentials
In Main Guidelines → Guardrails, add a subsection: never ask for a password, one-time code, MFA code, recovery code, or security answer; if the customer shares one, don’t repeat it and tell them to change it. See Prompts → Main Guidelines.
2
Check every reply for it
On Guardrails, add a Custom rule with an evaluation instruction such as “Fail if the reply asks the customer to share a password, one-time code, MFA code, recovery code, or security answer, or repeats one back.” Add pass and fail examples to calibrate it. Add a URL allowlist with your app and identity domains so the agent can only link to real reset pages.
3
Escalate the high-risk requests
In the Planning Prompt, add Escalation Topics for lost MFA devices, requests to change the login email or phone, and any report that someone else has access to the account. The Planning Prompt guidance lists identity issues and account-takeover signals as high-risk operations for exactly this reason.
4
Route escalations to the right queue
For widget conversations, a Business Rule creates the ticket in your helpdesk. For native tickets, map
mfa_issue and account_takeover to your identity or trust team with Agent groups. See Fini for escalation and human handoff for the full handoff setup.What you need
What to measure
- Intent rule breakdown in Analytics: the reset rule’s AI Resolve Rate, Escalated Rate, and Volume.
- Conversation status. Reset conversations often end with the customer leaving to check their inbox. Compare Resolved by AI with Waiting for Customer for this intent; a large waiting share inflates deflection rate without telling you whether customers got back in.
- Escalation reasons. The Customer requested human (after attempt) reason on reset conversations usually means the email didn’t arrive or the Reply wording was unclear.
- Guardrail activity. Hits on the credential custom rule over 7d and 30d. Any hit is worth opening in Inbox.
Related
End-to-end: cancellation flow
The closest walkthrough: intent, identify, one API call, confirm. Password resets share this shape.
Intent Rules
Fallback trees, Read nodes, and inactivity follow-ups.
Guardrails
Custom rules and the URL allowlist.
Prompts
Escalation Topics and Main Guidelines.
Widget
Identify logged-in users with a signed JWT when the request comes from inside your app.

