1. Use Case
BPN OpenAPI
  • Getting Started
    • Introduction to BPN
    • Architecture Overview
  • Onboarding & Prerequisites
    • Product Demo
    • Sandbox & Test Environment
    • Signature Authentication Mechanism
  • Use Case
    • Fiat Collection via Virtual Accounts & Local Collection Rails
    • Convert Stablecoins
    • Transfer
    • Wallet
    • Compliance (Travel Rule Information Submission)
    • RFI process
  • API Reference
    • KYB
      • Share KYB/KYC Info For Sub User
      • Get KYB Sub User Status
    • Account Management
      • Inquiry Master VA Balance
      • List Primary Virtual Accounts
      • Create Virtaul Account
      • Get Virtual Account Detail
      • List Virtual Account
      • Send Email Verify Code
      • Query bank info by account number
      • Payout via Virtual Account
      • Refund Virtual Account Order
      • Get Virtual Account Order Detail
      • List Virtual Account Orders
      • Submit Invoice
      • Get Invoice list Status
      • List Banks
      • Add Bank Account
      • List Bank Account
      • List RFI Sub Virtual Account
      • Get Sub Virtual Account RFI Template Info
      • Sub Virtual Account Submit RFI
    • Wallet
      • List Wallets
      • List Sub Account
      • Create Sub Account
      • Wallet Internal Transfer
      • Query Wallet Internal Transfer Detail
      • List Wallet Internal Transfer order
      • Get Asset Balance
      • Get Deposit Address
      • Add Deposit Sender
      • Add Withdraw Whitelist
      • Delete Withdraw Whiltelist
      • Request Withdraw
      • Query Transaction History
    • FX
      • Inquery FX Rate
    • BPN Transactions
      • Get Stablecoin Quote
      • Create Stable Order
      • Get Order (Single) Detail
      • List Orders(Batch)
    • Reconciliation
      • Get Reconciliation Order List By Page
    • Crypto Payment Link
      • Abnormal fund
        • Abnormal funds
        • Matchable Payment links
        • Link Order(Abnormal fund)
        • Submit to platform
      • Create Payment Link
      • List Payment links
      • Get Curreny Network Config
    • External Provider
      • FE: Create stablecoin collection sub-account link
      • Create stablecoin collection sub-account link
      • Get sub wallet account
      • List sub wallet accounts
      • Change sub wallet status
      • Query stablecoin collection order list
      • Query stablecoin collection order status
      • Get quote
      • Accept stablecoin collection order
      • Reject stablecoin collection order
      • Query USD balance
      • USD Payout (withdrawal)
      • Query USD Payout order status
      • Query USD Payout order list
    • Mock
      • Mock Virtual account Payin Order
      • Mock wallet deposit transaction
      • Mock Payin Order Refund
      • Mock Payout Order Update Status
    • Pay Session
      • Request Pay Session
  • Webhooks & Events
    • Resend Fail Webhook
      POST
    • Open Virtual Account Status
    • Virtual Account Payment Status
    • Virtual Account Invoice update
    • Transaction Status Notification
    • KYB Status Notification
    • Deposit Sender Detail Required
    • Abnormal Fund Notification
    • WALLET_TRANSFER_ORDER_UPDATED
    • Sub Virtual Account RFI Required
    • Sub Wallet Update
    • wallet address whitelist Copy
    • Crypto Deposit Order Notification
    • Collect Order Updated
    • Usd Payout Order Updated
    • onboard result
    • partner order status
    • PaymentLink Notification
  • Partner Flow
    • inquiry supported currency
    • KYC/KYB Sharing
    • inquiry onboard status
    • get price
    • Create order
    • order list
    • inquiry single order
    • get user deposit address
    • get payment instruction
    • sync fund notification
    • daily settlement records
  • Appendix
    • Enum
    • Virtual Account(VA) Support List & KYB requirement
  • Release Notes & Changelog
  1. Use Case

RFI process

Sub Virtual Account RFI — Integration Guide#

#DocumentMethod / EventPath
1Sub Virtual Account RFI RequiredWebhookSUB_VIRTUAL_ACCOUNT_RFI_REQUIRED
2Get Sub Virtual Account RFI Template InfoGET/v1/virtual-account/sub/rfi-template
3Sub Virtual Account Submit RFIPOST/v1/virtual-account/sub/submit-rfi

1. Overview#

When a Sub Virtual Account (Sub VA) requires additional compliance materials (RFI — Request for Information), the platform notifies the merchant via webhook, then the merchant:
1.
Receives Sub Virtual Account RFI Required
2.
Calls Get Sub Virtual Account RFI Template Info to load the question / file checklist
3.
Calls Sub Virtual Account Submit RFI to upload answers and documents
4.
Continues to receive the same webhook as review progresses — use data.rfiStatus for the latest outcome
rfi api.png

2. Step 1 — Receive webhook: Sub Virtual Account RFI Required#

Event type: SUB_VIRTUAL_ACCOUNT_RFI_REQUIRED
Full field reference: Sub Virtual Account RFI Required

Example payload#

{
    "eventId": "36190155-28a2-42f9-a55a-1359654b7384",
    "eventType": "SUB_VIRTUAL_ACCOUNT_RFI_REQUIRED",
    "referenceId": "538",
    "status": "SUCCESS",
    "timestamp": 1764235978954,
    "data": {
        "virtualAccountId": "3100",
        "externalAccountId": "",
        "accountName": "ALBrooks",
        "currency": "MXN",
        "status": "SUCCESS",
        "awaitingRfiTypeList": [
            "SUB_ACCOUNT_RFI_TIER_1"
        ],
        "rfiStatus": "AWAITING_SUBMISSION"
    }
}

Key fields for the RFI flow#

FieldSourceHow to use
data.virtualAccountIdWebhookPass as virtualAccountId to the template API, and as accountId when submitting RFI
data.awaitingRfiTypeListWebhookPass as bizTypeList to Get Sub Virtual Account RFI Template Info
data.rfiStatusWebhookCurrent RFI lifecycle status (AWAITING_SUBMISSION / SUBMITTED/ RESUBMIT_REQUIRED / APPROVED or REJECTED)

rfiStatus values#

Subsequent review outcomes are also delivered through this same webhook. Always read data.rfiStatus:
rfiStatusMeaningMerchant action
AWAITING_SUBMISSIONMaterials requiredFetch template → submit RFI
RESUBMIT_REQUIREDCompliance requested resubmissionFetch template / feedback → resubmit
SUBMITTEDMaterials received; under reviewWait for next webhook
APPROVEDReview approvedNo further RFI action
REJECTEDReview rejectedFollow compliance guidance
Note: When materials are still required, awaitingRfiTypeList lists the biz types (tiers) that need answers. Use that list as bizTypeList for the template API.

3. Step 2 — Get materials checklist: Get Sub Virtual Account RFI Template Info#

API: Get Sub Virtual Account RFI Template Info
Method / Path: GET /v1/virtual-account/sub/rfi-template

Query parameters (map from webhook)#

ParameterRequiredMap from webhook
bizTypeListYesdata.awaitingRfiTypeList (e.g. SUB_ACCOUNT_RFI_TIER_1)
virtualAccountIdRecommendeddata.virtualAccountId
currencyOptionaldata.currency

Example request#

What you get#

A list of KYB/RFI templates. Each item contains bizType and questions[]. For each question use:
Question fieldUse when submitting
idanswerList[].questionId
typeFILE → upload via base64Files / file; TEXT (etc.) → fill answer
requiredMust provide content when true
label / descriptionUI labels and hints

4. Step 3 — Submit materials: Sub Virtual Account Submit RFI#

API: Sub Virtual Account Submit RFI
Method / Path: POST /v1/virtual-account/sub/submit-rfi

Request mapping#

Submit fieldValue
accountIdWebhook data.virtualAccountId
answerList[].bizTypeSame tier as in awaitingRfiTypeList / template bizType
answerList[].questionIdTemplate question id
answerList[].answerText answer (for text questions); may be empty for file-only questions
answerList[].fileExisting file key(s), comma-separated (optional if using base64Files)
answerList[].base64FilesBase64-encoded file contents (PDF / JPEG / PNG, etc.)

Example request body#

{
    "accountId": "4059",
    "answerList": [
        {
            "bizType": "SUB_ACCOUNT_RFI_TIER_1",
            "questionId": "RFI_TIER1_Individual_Identity_Document",
            "answer": "",
            "file": "",
            "base64Files": [
                "JVBERi0xLjQKJcfs...",
                "iVBORw0KGgoAAAANSUhEUgAA..."
            ]
        },
        {
            "bizType": "SUB_ACCOUNT_RFI_TIER_1",
            "questionId": "RFI_TIER1_Individual_Address_Proof",
            "answer": "",
            "file": "",
            "base64Files": [
                "JVBERi0xLjQKJcfs...",
                "iVBORw0KGgoAAAANSUhEUgAA..."
            ]
        },
        {
            "bizType": "SUB_ACCOUNT_RFI_TIER_1",
            "questionId": "RFI_TIER1_Individual_Business_Proof",
            "answer": "",
            "file": "",
            "base64Files": [
                "JVBERi0xLjQKJcfs...",
                "iVBORw0KGgoAAAANSUhEUgAA..."
            ]
        },
        {
            "bizType": "SUB_ACCOUNT_RFI_TIER_1",
            "questionId": "RFI_TIER1_Individual_Supporting_Documents",
            "answer": "",
            "file": "",
            "base64Files": [
                "JVBERi0xLjQKJcfs...",
                "iVBORw0KGgoAAAANSUhEUgAA..."
            ]
        },
        {
            "bizType": "SUB_ACCOUNT_RFI_TIER_1",
            "questionId": "RFI_TIER1_Individual_Additional_Information",
            "answer": "",
            "file": ""
        }
    ]
}

Success response (data)#

true when the submission is accepted. After a successful submit, expect another Sub Virtual Account RFI Required webhook with an updated rfiStatus (typically SUBMITTED, then later APPROVED / REJECTED / RESUBMIT_REQUIRED).

5. End-to-end checklist#

Configure your Stable webhook URL to accept eventType = SUB_VIRTUAL_ACCOUNT_RFI_REQUIRED.
On receive: persist eventId for idempotency; read data.virtualAccountId, awaitingRfiTypeList, and rfiStatus.
Call GET /v1/virtual-account/sub/rfi-template with bizTypeList = awaitingRfiTypeList and virtualAccountId = virtualAccountId.
Build answerList from template questions (bizType + questionId + answer / base64Files).
Call POST /v1/virtual-account/sub/submit-rfi with accountId = virtualAccountId.
Treat later webhooks of the same event type as status updates; branch on data.rfiStatus.
Previous
Compliance (Travel Rule Information Submission)
Next
Share KYB/KYC Info For Sub User
Built with