Fini handles password reset and account-access requests by triggering your existing reset flow through an Action, or by pointing the customer to your self-serve reset page, and it never asks for, accepts, or sets a password or MFA code in the conversation. Your identity system stays the only place where a user is verified and a credential changes; Fini’s job is to recognize the request, start the right flow for that account, and explain the next step clearly. That split is the whole design. A reset link sent to the email address already on file is safe to trigger from a chat, because only the owner of that inbox can use it. Changing the email on file, removing MFA, or unlocking an account on someone’s word is not, so those go to your team.

What Fini handles and what it hands to your team

To confirm (internal, remove before publish): https://www.usefini.com/industries/finance says Fini handles “KYC-grade identity verification and MFA resets” end to end. Is there a supported MFA-reset pattern beyond calling the customer’s own recovery Action (for example, a documented verification sequence) that docs should describe here, or should MFA resets stay a human handoff as written?

How it works in Fini

Design your reset endpoint for chat

Your Send 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_requests when 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.
How this runs: SSO users are caught first, so the agent never sends a reset email to an account whose password your system doesn’t own. Customers who already requested several resets get the self-serve link instead of another email. When 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.
If the reset flow asks the customer to go to their inbox and the conversation goes quiet, a Reply node can send one follow-up after a delay with Follow up after inactivity. See Rulebook → Inactivity follow-ups.

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.
Guardrails check what the agent sends; they don’t remove what a customer types. If a customer pastes a password into the conversation, it is part of the transcript. Your Main Guidelines instruction should tell the agent to advise the customer to change it. See Data handling for how conversation data is stored.

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.
Add the rule to a Test Suite set with the Safety & boundaries and Tool use correctness judges, including a scenario where the customer volunteers a password. Run it with Simulate rule execution, or point the Action at a test identity environment: Test Suite runs don’t dry-run your Actions, and Execute live actions calls your real APIs.

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.