> ## 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 傳送給您客戶的文件請求,並在您自己的 UI 中回覆:問題、檔案上傳、銀行連結及提交審核。

## 概覽

**資訊請求 (RFI)** 是當合規團隊需要客戶提供更多資料時,Fluz 傳送給客戶的一組問題,最常出現在 KYB 審核期間(公司設立文件、地址證明、股權結構圖),有時也會在帳戶使用一段時間後出現。

RFI API 讓您的平台能在自己的 UI 中顯示這些請求並收集答覆,而不必將客戶導向 Fluz。透過四個操作,您可以:

1. 使用 [openRfis](https://docs.fluz.app/get-rfis) 列出客戶尚未處理的 RFI,或讀取單一 RFI [rfi](https://docs.fluz.app/get-rfis),
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 individually 撰寫。** Fluz 會針對收件客戶建立每筆 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 後,將 public token 傳給 [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` | 審核完成,且符合要求 | 從您的 UI 中清除該請求 |
| `REQUIREMENTS_NOT_MET` | 審核完成,但不符合要求 | 顯示中性訊息,並引導客戶聯絡支援團隊 |
| `EXPIRED` | RFI 在提交前已超過到期日 | 引導客戶聯絡支援團隊。已過期的 RFI 無法回覆 |
| `CLOSED` | 由 Fluz 關閉,且沒有審核結果 | 從您的 UI 中清除該請求 |

只有在 RFI 為 `PENDING_DOCUMENTS` 時才會回傳問題。在其他所有狀態下,`questions` 都是空清單。

> [!NOTE]
>
> 具有未處理或審核中 RFI 的企業,在 [getBusiness](https://docs.fluz.app/get-business.md) 中會顯示為 `PENDING`。提交 RFI 並不會核准該企業,請等待 `kybStatus` 變更。

***

## 問題類型

每個答覆都以 `value` 的形式放在 `RfiAnswerInput` 中傳送。其格式取決於問題的 `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` 時,只有在**先前**問題的答覆符合該條件時,該問題才適用。請在您的 UI 中評估該條件,以顯示或隱藏問題:

```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.