1. Get started
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
    • 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
      • 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
      • Create deposit Travel Rule link
      • Create deposit Travel Rule detail link
    • Mock
      • Mock Virtual account Payin Order
      • Mock wallet deposit transaction
      • 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
      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 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
    • Get Stablecoin Quote
    • Create Stable Order
    • Get Order (Single) Detail
    • List Orders(Batch)
    • Submit hash
  • 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. Get started

Idempotency

Idempotency (platform contract)#

BPN does not standardize an Idempotency-Key header across the platform. Except for the Wallet
deposit-whitelist APIs listed below, merchants must use the business fields in this table. Treat it as a
stable contract.

Key map#

ProductKeyEndpointRequired?
ConvertmerchantOrderIdPOST /v1/stable/order/submit-orderStrongly required for integration
Wallet WithdrawrequestIdPOST /v1/wallet/withdrawYes (fund safety)
Wallet TransferrequestIdPOST /v1/wallet/transferRecommended
Wallet deposit whitelistIdempotency-Key header (plus requestId in the body)deposit-whitelist addresses / disable / submitYes on every write
VA PayoutrequestId (exact VO name)POST /v1/virtual-account/order/payoutRequired
Payment LinkrequestIdPOST /v1/stable/collect/create-payment-linkOptional
Collect v2 (non-core)requestIdaccept / reject / usd-payoutPer API
Partner (separate OAS)request_id / partner_order_id/api/v1/*Do not mix with merchant APIs

Retry rules (hard)#

1.
Timeout / unknown outcome: retry with the same idempotency key (exponential backoff).
2.
Clear validation failure: fix params, then use a new key.
3.
In-flight processing: do not change the key; poll detail or wait for webhook.
4.
Terminal success / fail: do not retry the same key expecting a different outcome.

Payment Link#

Use requestId to identify a Payment Link create request. When the outcome is unknown, retry with the same
requestId. A duplicate returns ODR00000040 rather than the original create result. Query
POST /v1/stable/collect/payment-links with the same requestId to recover the Payment Link.

Type conventions#

TypeRule
AmountsDecimal string (e.g. "100.50"), never JSON float
TimestampsEpoch milliseconds integer
requestIdUUID recommended
Retry matrix: Errors catalogue.

Wallet deposit-whitelist specifics#

These are the only merchant APIs today that accept an Idempotency-Key request header. Reuse the same key when
retrying after a timeout — a duplicate key returns the first result instead of registering a second address or
submitting a second review. 10000105 means the platform recognised a duplicate; read the outcome of the first
request rather than retrying with a new key.
10000104 is not a timeout. Poll GET /v1/wallet/transaction/detail
instead of editing the payer details and resubmitting straight away.
Guide: Wallet · Deposit whitelist.
Previous
Response envelope
Next
Virtual Account Overview
Built with