> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fluz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# 信息请求(RFI)

> 读取 Fluz 向您的客户发送的资料请求,并在您自己的界面中作答:问题、文件上传、银行关联以及提交审核。

## 概览

**信息请求(RFI,request for information)** 是 Fluz 在合规团队需要客户提供更多信息时发送给客户的一组问题——最常见于 KYB 审核期间(成立文件、地址证明、所有权结构图),有时也会在账户生命周期的后期出现。

借助 RFI API,您的平台可以在自己的界面中展示这些请求并收集答案,而无需将客户引导至 Fluz。通过以下四个操作,您可以:

1. 使用 [openRfis](https://docs.fluz.app/get-rfis) 列出客户所有未完成的 RFI,或使用 [rfi](https://docs.fluz.app/get-rfis) 读取单个 RFI,
2. 使用 [RFI 文件上传](https://docs.fluz.app/upload-rfi-document)端点上传问题所要求的文档,
3. 如有需要,使用 [completeRfiPlaidLink](https://docs.fluz.app/complete-rfi-plaid-link) 通过 Plaid 回答银行关联和地址类问题,以及
4. 使用 [submitRfi](https://docs.fluz.app/submit-rfi) 发送答案——可一次性提交,也可分批提交。

提交后,RFI 将变为 `IN_REVIEW`,由 Fluz 进行审核。审核结果会以新状态的形式体现在同一个 RFI 上。

> [!NOTE]
>
> **问题按 RFI 单独编写。** Fluz 会针对接收 RFI 的客户单独构建每个 RFI,因此不同 RFI 的问题、顺序以及哪些问题为必答都会有所不同。请渲染 API 返回的内容,而不要将表单硬编码。

***

## 要求

| 要求 | 如果缺失 |
| - | - |
| 您的应用程序拥有 `MANAGE_RFI` 范围,且客户的 OAuth 授权包含该范围 | `AUTH-0031` |
| 您使用 **Bearer 用户令牌**调用。所有 RFI 操作均不接受 Basic 认证(您的 API 密钥) | `AUTH-0002` |
| 令牌同时包含 `userId` 和 `accountId` | `AUTH-0008` |
| 令牌所属用户是该 RFI 的收件人(参见[谁可以回答 RFI](#who-can-answer-an-rfi)) | `G-0003`(`ACCESS_DENIED`) |
| 仅适用于 Plaid 答案:令牌还需包含 `MANAGE_PAYMENT` | `AUTH-0031` |

请在 Fluz 控制台中您应用程序的权限范围里选择 **`MANAGE_RFI`**。与其他范围一样,客户会在 OAuth 期间的授权同意页面上批准该范围。参见[应用程序范围](https://docs.fluz.app/fluz-dashboard/application-scopes.md)。

### 谁可以回答 RFI

RFI 会发送给某一个账户。令牌的 `accountId` 必须是该账户,且令牌所属用户必须是该账户的收件人:

| RFI 所属账户 | 收件人 |
| - | - |
| 个人账户 | 拥有该个人账户的用户 |
| 企业账户 | 企业的**申请人**——提交 `registerBusiness` 的用户 |

企业的其他所有者、授权用户和子用户无法通过 API 读取或回答企业的 RFI。请为申请人在该企业的 `accountId` 上生成令牌。

***

## 流程

**1. 查找未完成的 RFI**

使用客户的令牌调用 [openRfis](https://docs.fluz.app/get-rfis)。它会按时间由新到旧返回所有等待客户作答的 RFI 及其问题。如果列表为空,则无需任何操作。

**2. 渲染问题**

按 `ordinal` 顺序展示每个问题。使用 `questionType` 选择输入方式,使用 `options` 渲染选择类问题,并使用 `visibilityCondition` 隐藏不适用的问题。参见[问题类型](#question-types)。

**3. 上传文档**

对于客户附加的每个文件,使用 `rfiId` 和 `questionId` 调用[上传端点](https://docs.fluz.app/upload-rfi-document)。请保留其返回的 `fileId`。

**4. 关联银行(如提供)**

银行对账单和地址证明类问题可以通过 Plaid 银行关联来回答,而无需上传文件。打开 Plaid Link,然后将公共令牌传递给 [completeRfiPlaidLink](https://docs.fluz.app/complete-rfi-plaid-link)。

**5. 提交**

使用答案调用 [submitRfi](https://docs.fluz.app/submit-rfi)。当 `finalize: true`(默认值)时,RFI 将进入 `IN_REVIEW`。使用 `finalize: false` 可保存部分答案,稍后再继续。

**6. 跟踪结果**

使用 [rfi](https://docs.fluz.app/get-rfis) 再次读取该 RFI 以查看其状态。如果 Fluz 需要更多信息,同一个 RFI 会带着新问题回到 `PENDING_DOCUMENTS`,并再次出现在 `openRfis` 中。

```mermaid theme={null}
sequenceDiagram
    autonumber
    participant App as Your Application
    participant API as Fluz GraphQL API
    participant Files as Fluz File Upload (REST)
    participant Plaid as Plaid Link
    participant Fluz as Fluz Compliance

    Fluz->>API: RFI sent to the customer (PENDING_DOCUMENTS)
    App->>API: query openRfis
    API-->>App: RFIs with questions

    opt Question asks for documents
        App->>Files: POST /api/v1/file-upload/rfi-document
        Files-->>App: fileId
    end

    opt Customer links a bank instead
        App->>API: mutation createPlaidLinkToken
        App->>Plaid: Open Plaid Link
        Plaid-->>App: public_token
        App->>API: mutation completeRfiPlaidLink
        API-->>App: Bank linked, answer saved
    end

    App->>API: mutation submitRfi (finalize: true)
    API-->>App: status IN_REVIEW
    Fluz->>Fluz: Review
    App->>API: query rfi(rfiId)
    API-->>App: REQUIREMENTS_MET, REQUIREMENTS_NOT_MET, or PENDING_DOCUMENTS again
```

***

## RFI 状态生命周期

```mermaid theme={null}
stateDiagram-v2
    [*] --> PENDING_DOCUMENTS: Fluz sends the RFI
    PENDING_DOCUMENTS --> IN_REVIEW: submitRfi with finalize true
    PENDING_DOCUMENTS --> EXPIRED: Expiry date passes before submission
    IN_REVIEW --> PENDING_DOCUMENTS: Fluz asks for more
    IN_REVIEW --> REQUIREMENTS_MET: Review passed
    IN_REVIEW --> REQUIREMENTS_NOT_MET: Review did not pass
    PENDING_DOCUMENTS --> CLOSED: Closed by Fluz
    IN_REVIEW --> CLOSED: Closed by Fluz
```

| `RfiStatus` | 含义 | 您的应用应执行的操作 |
| - | - | - |
| `PENDING_DOCUMENTS` | 等待客户作答。这是唯一接受答案的状态 | 展示问题并收集答案 |
| `IN_REVIEW` | 答案已提交,正在审核 | 显示"审核中"状态。无需作答 |
| `REQUIREMENTS_MET` | 审核已完成,要求已满足 | 从您的界面中清除该请求 |
| `REQUIREMENTS_NOT_MET` | 审核已完成,要求未满足 | 显示中性提示信息,并引导客户联系支持团队 |
| `EXPIRED` | RFI 提交前已超过到期日期 | 引导客户联系支持团队。已过期的 RFI 无法作答 |
| `CLOSED` | 已被 Fluz 关闭,无审核结果 | 从您的界面中清除该请求 |

仅当 RFI 处于 `PENDING_DOCUMENTS` 状态时才会返回问题。在其他所有状态下,`questions` 均为空列表。

> [!NOTE]
>
> 存在未完成或审核中 RFI 的企业,在 [getBusiness](https://docs.fluz.app/get-business.md) 中显示为 `PENDING`。提交 RFI 并不意味着企业获得批准——请等待 `kybStatus` 发生变化。

***

## 问题类型

每个答案都作为 `RfiAnswerInput` 中的 `value` 发送。其格式取决于问题的 `questionType`。

| `questionType` | `value` | 规则 |
| - | - | - |
| `FREE_FORM_TEXT` | 字符串 | 最多 10,000 个字符。会去除首尾空格 |
| `SINGLE_LINE_TEXT` | 字符串 | 最多 10,000 个字符。会去除首尾空格 |
| `EMAIL` | 字符串 | 有效的电子邮件地址 |
| `PHONE_NUMBER` | 字符串 | 7–20 个字符,由数字、空格、`+`、`-`、`.`、`(` 和 `)` 组成,且至少包含一位数字 |
| `NUMBER` | 数字或数字字符串 | 例如 `1250` 或 `"1250.50"` |
| `DATE` | 字符串 | `YYYY-MM-DD`,必须是真实存在的日历日期 |
| `DROPDOWN` | 字符串 | 必须恰好是该问题 `options` 中的一项 |
| `SINGLE_CHECKBOX` | 字符串 | 必须恰好是该问题 `options` 中的一项 |
| `MULTIPLE_CHECKBOX` | 字符串列表 | 每项都是该问题 `options` 中的一项,不得重复 |
| `MULTI_UPLOAD` | `{ "fileId": "<uuid>" }` 列表 | 为该问题[上传](https://docs.fluz.app/upload-rfi-document)的 1–20 个文件 |
| `BANK_LINK_OR_STATEMENT` | `{ "fileId": "<uuid>" }` 列表 | 1–20 个 PDF 或图片文件,**或**通过 [completeRfiPlaidLink](https://docs.fluz.app/complete-rfi-plaid-link) 关联的银行 |
| `ADDRESS_VERIFICATION_OR_DOCUMENT` | `{ "fileId": "<uuid>" }` 列表 | 1–20 个 PDF 或图片文件,**或**由银行确认客户地址的银行关联 |
| `SECTION_BREAK` | — | 仅用于布局的标题。不可作答 |

### 必答与可选问题

`isOptional: false` 表示必须先回答该问题,RFI 才能最终提交。可选问题可以不回答。

### 条件问题

设置了 `visibilityCondition` 时,仅当该条件对**之前**问题的答案成立时,该问题才适用。请在您的界面中对其求值,以显示或隐藏该问题:

```json theme={null}
{
  "kind": "GROUP",
  "logic": "AND",
  "items": [
    { "kind": "PREDICATE", "questionId": "q_entity_type", "operator": "EQ", "value": "LLC" },
    { "kind": "PREDICATE", "questionId": "q_member_count", "operator": "GT", "value": "1" }
  ]
}
```

| 字段 | 值 |
| - | - |
| `kind` | `GROUP`(使用 `logic` 组合 `items`)或 `PREDICATE`(单个判断) |
| `logic` | `AND` 或 `OR` |
| `operator` | `EQ`、`NEQ`、`IN`、`NOT_IN`、`GT`、`GTE`、`LT`、`LTE` |
| `value` | 字符串;对于 `IN` 和 `NOT_IN` 则为字符串列表 |

* 条件仅针对文本和选择类答案进行判断。文件和银行关联类答案视为未回答。
* 不适用的问题不是必答题,您为其发送的任何答案都会被忽略。

***

## Webhooks

如需在不轮询的情况下获知 RFI 何时到达,请订阅 RFI webhook 事件。参见 [Webhooks](https://docs.fluz.app/fluz-dashboard/webhooks.md#rfi-events)。

***

## 相关页面

> [card] [读取 RFI](https://docs.fluz.app/get-rfis)
>
> `openRfis` 和 `rfi`:问题、已保存的答案和状态。

> [card] [上传 RFI 文档](https://docs.fluz.app/upload-rfi-document)
>
> 返回您需要提交的 `fileId` 的 REST 端点。

> [card] [提交 RFI](https://docs.fluz.app/submit-rfi)
>
> 保存答案、最终提交并处理验证错误。

> [card] [通过银行关联作答](https://docs.fluz.app/complete-rfi-plaid-link)
>
> 使用 Plaid 代替银行对账单或地址证明。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.