What advances it
You do not drive these transitions. What you control is the data: submit it complete, and fix it with an update when something is wrong.
Branch on
status. It is the sub-client’s lifecycle, and the field the table above describes. verification_status reports the result of the identity check itself — useful to display, not the one to gate a flow on.What announces it
Where an RFI interrupts it
A request for information is raised when something more is needed. It is not a failure — it is the check asking rather than declining.
The item is the unit: an RFI can have several, each answered separately, and one returned item does not undo the others. Answering one sends you nothing back.
A document rejected on its own does not move
status. When a check cannot finish until something is resupplied, verification_status reads needs_action and status stays where it was. Read verification_status to know that something is waiting on you — see User values.rfi.* along with everything else. A URL with a filter receives it only if the filter names these events. Webhooks overview has the subscription rules.
Design for this from the start. An RFI is answered by your customer, not by your engineers, so the fields it names have to reach whoever can supply them.
What to build
- Listen for
user.status_changedand treat it as the source of truth for where a sub-client is. - Capture
data.reasons[]fromuser.verification.failedon arrival. You cannot go back for it. - Surface
missing_fieldsfrom the sub-client to whoever can act on it. - Have a path for an RFI before you have one.
Account opening
Turning an approved sub-client into an account that can receive money.