Requests for Information (RFIs)
A request for information (RFI) is how Stables compliance asks for something it needs before a customer or a payment can go further. Each RFI belongs to one customer and lists the requirements to answer. You answer them through the API or a hosted link, and the RFI resolves once every requirement is met.
When you receive an RFI
type | What it is about | What is held |
|---|---|---|
verification | A verification level the customer is completing, for example a step-up requirement found during onboarding | The verification level named in kyc_level |
transaction | One payment: a transfer (transfer_id) or a deposit into a virtual account (virtual_account_id) | That payment |
manual | A request raised by Stables compliance, about the customer or one of their payments. message explains why | Nothing. Manual RFIs never hold a payment |
subject tells you whether the RFI is about the customer or one payment (transaction_reference_id). reasons lists why it was raised.
A transfer held by an RFI shows the compliance_hold status. Its compliance_hold object gives the rfi_id and the outstanding requirements.
Find out about RFIs
Subscribe to these webhooks:
| Event | When it fires |
|---|---|
rfi.created | An RFI was opened |
rfi.updated | An RFI changed |
rfi.resolved | An RFI was resolved |
transfer.action_required | A transfer needs action from you before it can continue |
You can also list them: List RFIs across all customers, or List Customer RFIs for one customer. Fetch one with Get RFI.
Answer each requirement
Every requirement has a type that tells you how to answer it:
Requirement type | How to answer it |
|---|---|
kyc_level | Create a verification link with the verification_type from the requirement's action, and send it to the customer. |
kyc_capability | The customer must hold required_capability. Use the suggested action when one is present, or submit the data through the API. See Step-up requirements for each capability. |
evidence | Fetch the form from action.form (Get Evidence Form), then send the answers and documents to action.submit (Submit Evidence). required_evidence is source_of_funds for the money behind a held payment, or ad_hoc for an item Stables compliance wrote, described by label, instructions and answer_type. |
manual_review | Nothing to submit. Stables compliance is reviewing. |
A requirement moves from pending to submitted when you answer it, then to satisfied once Stables approves it. Stables can also mark it waived.
If Stables sends something back, the requirement returns to pending with a rejection_reason. When resubmission is true, Stables is asking for data it already holds to be sent again. Submit it again to clear the requirement.
RFI statuses
| Status | Meaning |
|---|---|
open | Waiting for you to answer one or more requirements |
submitted | You have submitted information and Stables compliance is reviewing it |
satisfied | Every requirement is satisfied or waived. Anything the RFI held is released |
waived | Stables closed the RFI without needing the information |
rejected | Stables rejected the information. rejection_reason says why |
expired | The RFI passed its expires_at deadline before it was resolved |
A rejected RFI can be reopened for you to answer again. While it is open again, rejection_reason shows what to fix.
expires_at is the response deadline. Manual RFIs stay open past it and show as overdue.
Some RFIs carry a compliance fee, charged when the RFI resolves. Check billable and fee on the RFI.
Good practice
- Subscribe to the RFI webhooks rather than polling, and route new RFIs to whoever handles compliance in your team.
- Answer early: a held payment does not move until its RFI is satisfied.
- Collect from the customer in your product where you can, so they are not surprised by a request from Stables.
- Never answer on the customer's behalf for declarations such as the age-risk acknowledgement.