Get RFI

GET
/api/v1/rfis/{rfiId}

Get a request-for-information (RFI) by id

Authorization

headerX-Api-Key<token>

API key in format: sti_env_prefix_secret

Path Parameters

rfiId*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Response Body

Default Response

application/json
  1. response

Request-for-information: what a customer must complete for a held subject

rfi_id*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
type*string

RFI type: a held verification level, a held transfer / deposit, or a request raised by Stables compliance (manual; holds nothing)

Value in"verification""transaction""manual"
status*string

RFI status

Value in"open""submitted""satisfied""expired""waived""rejected"
customer_id*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
subject*string

What the RFI is about: the customer, or one payment (transaction_reference_id)

Value in"customer""payment"
kyc_level?string

The gated verification level (verification RFIs)

transaction_reference_id?string

The held deposit id (transaction RFIs), or the payment a manual RFI is about (nothing is held)

transaction_type?string
Value in"transfer""virtual_account"
transfer_id?string

The held transfer (transaction RFIs on a transfer)

virtual_account_id?string

The virtual account the held deposit arrived on (transaction RFIs on a deposit)

reasons*array<>
message?string

Why Stables compliance is asking (manual RFIs)

billable*boolean

Whether a compliance fee applies when this RFI resolves

fee?|

The compliance fee charged when this RFI resolves (present on billable RFIs; null when none applies)

requirements*array<|||>
rejection_reason?string

Why Stables rejected the information submitted. Present while the RFI is open again (resubmit to clear it) or when it was rejected for good (status rejected; it can't be resubmitted)

rejected_at?string
Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Formatdate-time
created_at*string
Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Formatdate-time
expires_at?string

Response deadline. Manual RFIs stay open past it (shown as overdue)

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Formatdate-time
resolved_at?string
Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Formatdate-time
Example Request
curl -X GET 'https://api.sandbox.stables.money/api/v1/rfis/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Example Response
{  "rfi_id": "67dff3e5-8fe4-4fc3-bd34-9ccc65996247",  "type": "verification",  "status": "open",  "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e",  "subject": "customer",  "kyc_level": "string",  "transaction_reference_id": "string",  "transaction_type": "transfer",  "transfer_id": "string",  "virtual_account_id": "string",  "reasons": [    {      "reason_code": "string",      "description": "string"    }  ],  "message": "string",  "billable": true,  "fee": {    "amount_minor": "string",    "currency": "string"  },  "requirements": [    {      "requirement_id": "6bcf6ec7-61c3-4af0-a310-59616a4dac61",      "type": "kyc_level",      "required_level": "string",      "status": "pending",      "action": {        "kind": "verification_link",        "verification_type": "string"      }    }  ],  "rejection_reason": "string",  "rejected_at": "2019-08-24T14:15:22Z",  "created_at": "2019-08-24T14:15:22Z",  "expires_at": "2019-08-24T14:15:22Z",  "resolved_at": "2019-08-24T14:15:22Z"}

Each RFI lists one or more requirements. Answer each one according to its type:

typeHow to answer it
evidenceFetch the form with Get Evidence Form, then send the answers and documents with Submit Evidence.
kyc_levelPass action.verification_type to Create Verification Link and send the customer the link. The requirement is satisfied when they complete it.
kyc_capabilitySame as kyc_level, using the suggested action when one is present. resubmission or rejection_reason means Stables wants the data sent again.
manual_reviewNothing to submit. Stables compliance is reviewing.

The RFI resolves once every requirement is satisfied or waived, and any payment it held is released.

For the full lifecycle, statuses and webhooks, see Requests for Information (RFIs).