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

typeWhat it is aboutWhat is held
verificationA verification level the customer is completing, for example a step-up requirement found during onboardingThe verification level named in kyc_level
transactionOne payment: a transfer (transfer_id) or a deposit into a virtual account (virtual_account_id)That payment
manualA request raised by Stables compliance, about the customer or one of their payments. message explains whyNothing. 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:

EventWhen it fires
rfi.createdAn RFI was opened
rfi.updatedAn RFI changed
rfi.resolvedAn RFI was resolved
transfer.action_requiredA 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 typeHow to answer it
kyc_levelCreate a verification link with the verification_type from the requirement's action, and send it to the customer.
kyc_capabilityThe 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.
evidenceFetch 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_reviewNothing 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

StatusMeaning
openWaiting for you to answer one or more requirements
submittedYou have submitted information and Stables compliance is reviewing it
satisfiedEvery requirement is satisfied or waived. Anything the RFI held is released
waivedStables closed the RFI without needing the information
rejectedStables rejected the information. rejection_reason says why
expiredThe 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.

On this page