1. External Provider
BPN OpenAPI
  • Get started
    • Introduction to BPN
    • Introduction to API
    • Architecture Overview
    • Authentication
    • Environments
    • Response envelope
    • Idempotency
  • Guides
    • Virtual Account
      • Virtual Account Overview
      • VA · Payin
      • VA · Statuses
      • VA · Payout
      • VA · RFI
      • VA · Currencies & limits
      • VA Opening
        • VND VA Opening
        • BRL VA Opening
    • Wallet
      • Wallet · Transfer
      • Wallet · Assets & limits
      • Wallet · Deposit whitelist
      • Wallet · PaymentLink
      • Wallet Overview
      • Wallet · Deposit
      • Wallet · Statuses
      • Wallet · Withdraw
    • Convert
      • Convert Overview
      • Convert · Quote & submit
      • Convert · Business types
      • Convert · Pairs & limits
      • Convert · Statuses
  • API Reference
    • Virtual Account
      • Virtual Account field notes
      • Inquiry Master VA Balance
      • List Primary Virtual Accounts
      • Create Virtual Account
      • Get Virtual Account Detail
      • List Virtual Account
      • List Virtual Account Orders
      • Get Virtual Account Order Detail
      • Refund Virtual Account Order
      • List RFI Sub Virtual Account
      • Get Sub Virtual Account RFI Template Info
      • Sub Virtual Account Submit RFI
      • Add Bank Account
      • List Bank Account
      • List Banks
      • Payout via Virtual Account
      • Send Email Verify Code
    • Wallet
      • Wallet field notes
      • Deposit Whitelist
        • Get Deposit Whitelist Options
        • Register Deposit Source Address
        • List Deposit Source Addresses
        • Get Deposit Source Address
        • Disable Deposit Source Address
        • Submit Payer Details for a Received Deposit
        • Save Sub-wallet Payer Profile
        • Update Sub-wallet Payer Profile
        • Get Sub-wallet Payer Profile
        • Get Deposit Whitelist Case
      • Get Asset Balance
      • Get Deposit Address
      • Add Deposit Sender
      • Add Withdraw Whitelist
      • Delete Withdraw Whiltelist
      • Request Withdraw
      • Query Wallet Internal Transfer Detail
      • List Wallet Internal Transfer order
      • Wallet Internal Transfer
      • Create Sub Account
      • Query Transaction History
      • List Wallets
      • List Sub Account
      • Get Transaction Detail
      • List Wallet Transactions
      • Get Wallet Transaction Detail
    • 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
      • Prepay Whitelist for One-Time Payment Link
      • Prepay Whitelist for Permanent Payment Link
    • Convert
      • Convert field notes
      • Inquery FX Rate
      • Get Stablecoin Quote
      • Create Stable Order
      • Get Order (Single) Detail
      • List Orders(Batch)
    • KYB
      • Share KYB/KYC Info For Sub User
      • Get KYB Sub User Status
    • Reconciliation
      • Get Reconciliation Order List By Page
    • External Provider
      • FE: Create stablecoin collection sub-account link
      • FE: Deposit Travel Rule
      • External Provider · Deposit whitelist
      • Create stablecoin collection sub-account link
        POST
      • Get sub wallet account
        GET
      • List sub wallet accounts
        GET
      • Change sub wallet status
        POST
      • Query stablecoin collection order list
        GET
      • Query stablecoin collection order status
        GET
      • Get quote
        GET
      • Accept stablecoin collection order
        POST
      • Reject stablecoin collection order
        POST
      • Query USD balance
        GET
      • USD Payout (withdrawal)
        POST
      • Query USD Payout order status
        GET
      • Query USD Payout order list
        GET
      • Create deposit Travel Rule link
        POST
      • Create deposit Travel Rule detail link
        POST
    • Mock
      • Mock Virtual account Payin Order
      • Mock wallet deposit transaction
      • Mock Payment Link deposit
      • Mock Payin Order Refund
      • Mock Payout Order Update Status
    • Pay Session
      • Request Pay Session
    • Files
      • Request File Upload URL
  • Webhooks
    • Webhooks Overview
    • KYB notifications
    • Event catalogue
    • Resend Fail Webhook
    • 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 Update
    • Crypto Deposit Order Notification
    • Collect Order Updated
    • Usd Payout Order Updated
    • onboard result
    • partner order status
    • PaymentLink Notification
    • Deposit Whitelist Notification
  • Partner Flow
    • Share KYB/KYC and open account directly
    • Get KYB/KYC submit + open account status
    • List Banks
    • Check Account
    • Add Account
    • Get Stablecoin Quote
    • Create Stable Order
    • Get Order (Single) Detail
    • List Orders(Batch)
    • Submit hash
    • Order Status Notification (STABLE_ORDER_UPDATED)
  • Appendix
    • Enums quick reference
    • Enum
    • Virtual Account(VA) Support List & KYB requirement
  • Release Notes & Changelog
  • Errors
    • Error codes catalogue
  • Change Log
    • 2026-09-21 Virtual Account independent refund orders
    • Wallet deposit source-address whitelist
  1. External Provider

FE: Deposit Travel Rule

1. Embedding#

Load the page URL returned by the server inside an iframe. There are two hosted pages; use the redirectUrl from the matching issue API — do not assemble the URL on the client except when swapping the host for QA.
PageURLIssued by
Pending list/{lng}/deposit-travel-rule?token={token}POST /v1/wallet/deposit-whitelist/travel-rule-link
Single deposit detail/{lng}/deposit-travel-rule-detail?token={token}&id={id}POST /v1/wallet/deposit-whitelist/transactions/{transactionId}/travel-rule-detail-link
id is the deposit transactionId (the same value used when opening Submit from the list page, and the title ID #). The detail page has no pending list: it opens the Submit form for that transaction.
iframe markup is the same for both pages:

1.1 iframe permissions: allow (do not use allow-same-origin)#

The page may be embedded cross-origin. The parent page only needs:
AttributeDescription
allow="clipboard-write"Allows clipboard write inside the iframe (e.g. copy Transaction ID); otherwise the browser may block copy.
Do not set allow-same-origin in sandbox: otherwise the iframe would be treated as same-origin with the embedder, allowing our page to access the embedder’s document and creating a security risk. Without sandbox, the iframe loads under our domain normally; cookies, storage, and canvas export/download work; the parent only needs to grant clipboard via allow="clipboard-write".

2. Close event: postMessage contract#

When the user clicks the close button inside the hosted page, the iframe sends a postMessage to the parent window so the parent can hide the iframe, close a modal, or run other logic.

2.1 Message payload#

FieldTypeDescription
typestringAlways 'DEPOSIT_TRAVEL_RULE_CLOSED'; use this to identify the close event.
sourcestringAlways 'deposit-travel-rule'; identifies the sending page.
Example:
{
  "type": "DEPOSIT_TRAVEL_RULE_CLOSED",
  "source": "deposit-travel-rule"
}

2.2 When the message is sent#

Sent only when the page is inside an iframe (i.e. window.parent !== window).
Sent to window.parent; targetOrigin is determined by env or default.
On the detail page, Cancel and a successful submit also emit this event (there is no list to return to).
Open item (§0.3): whether to also emit DEPOSIT_TRAVEL_RULE_SUBMITTED after successful submit (transactionId, whiteListStatus) is not decided. Not documented until product confirms.

3. Parent page: how to listen#

3.1 Plain JavaScript#

3.2 Validate origin (recommended)#

Validate event.origin and only accept messages from trusted origins:

4. URL parameter: darkMode (optional)#

The hosted page accepts a URL query parameter darkMode to override the user’s local/persisted theme so the parent and embed can match.
ParameterValuesEffect
darkModetrue / 1 / yesForce dark
darkModefalse / 0 / noForce light
If omitted or invalid, the current theme is unchanged (local or system preference).
When setting the iframe src, the parent can append this parameter to the server-returned URL, e.g.:
https://example.com/en/deposit-travel-rule?token=xxx&darkMode=true
https://example.com/en/deposit-travel-rule-detail?token=xxx&id=796283603784611840&darkMode=true

5. Set dark mode via postMessage (overrides URL)#

The parent can send a postMessage to the iframe to switch dark/light mode at runtime. This overrides the URL darkMode parameter (e.g. load with URL light, then switch to dark via postMessage).

5.1 Message format (parent → iframe)#

FieldTypeDescription
typestringMust be 'DEPOSIT_TRAVEL_RULE_SET_DARK_MODE'.
darkModebooleantrue = dark, false = light.

5.2 How to send#

Get the iframe’s contentWindow and call postMessage with the hosted page’s origin as the second argument (use window.location.origin when same-origin):
The message is only handled when the hosted page is inside an iframe; the theme set by postMessage overrides the current URL darkMode parameter.

Previous
FE: Create stablecoin collection sub-account link
Next
External Provider · Deposit whitelist
Built with