1. Webhooks
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 · Currencies & limits
      • VA · Payout
      • VA · RFI
    • Wallet
      • Wallet · Withdraw
      • Wallet · Transfer
      • Wallet · Assets & limits
      • Wallet · Deposit whitelist
      • Wallet Overview
      • Wallet · Deposit
      • Wallet · Statuses
    • 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
      • 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
    • 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
      • 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
    • 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
    • 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
    • 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. Webhooks

Deposit Whitelist Notification

Designing
Webhook
POST

Deposit Whitelist Notification#

One webhook covering the whole deposit-whitelist lifecycle. Branch on eventType — the envelope and
data shape are identical across the three values; only two data fields are conditional.
Deposited crypto is gated on the payer source address. Until the address is whitelisted and the payer
details pass review, the deposit order is PROCESSING and the funds sit in the unavailable balance of the
receiving wallet
: not withdrawable, not convertible.
These events fire only for a deposit that actually goes through the whitelist flow. A deposit from a
source address that is already ACTIVE skips the flow and emits none of them — see below.
Guide: Wallet · Deposit whitelist

eventType routing#

eventTypeWhendata.whiteListStatusdata.creditStatusOrder statusWhat you do
DEPOSIT_WHITELIST_REQUIREDDeposit confirmed on chain and the source address is not yet whitelistedinitPENDINGPROCESSINGPOST /v1/wallet/deposit-whitelist/transactions/{transactionId}/submit
DEPOSIT_WHITELIST_FAILEDSubmitted payer details were rejected in reviewrejectedPENDINGPROCESSINGRead data.failMessage, fix it, submit again for the same transaction
DEPOSIT_WHITELIST_CREDITEDReview passed for this deposit; funds moved into the available balance of the receiving walletapprovedCREDITEDusually PROCESSING, can be SUCCESSBook the funds. Not a terminal event

Conditional data fields#

Everything else in data is always present.
FieldPresent when
failMessageeventType is DEPOSIT_WHITELIST_FAILED
creditTimeeventType is DEPOSIT_WHITELIST_CREDITED

Four things that are easy to get wrong#

An already whitelisted address produces no event on this page at all. These three events describe the
whitelist flow, and a deposit from a source address that is already ACTIVE does not enter it. You get
neither DEPOSIT_WHITELIST_REQUIRED nor DEPOSIT_WHITELIST_CREDITED — only the ordinary
DEPOSIT_ORDER_NOTIFICATION when the deposit completes. Do not make booking a repeat deposit conditional on
receiving anything here.
DEPOSIT_WHITELIST_FAILED is not a failed deposit. The review was rejected, nothing is refunded and
nothing is lost. The order stays PROCESSING, creditStatus stays PENDING, the funds stay in the
unavailable balance. Resubmission is the expected next step.
DEPOSIT_WHITELIST_CREDITED does not mean the deposit finished. It means the money became spendable in
the receiving wallet. The order is usually still PROCESSING — auto-collection to the main account may
follow. Completion is signalled separately by DEPOSIT_ORDER_NOTIFICATION with status SUCCESS.
Read creditStatus, not the order status, to decide whether funds are usable. status PROCESSING
with creditStatus CREDITED is normal and means the funds are available.

Delivery#

Configured exactly like the other Stable webhooks. Deduplicate on eventId — the same event may arrive
more than once, and DEPOSIT_WHITELIST_FAILED can legitimately arrive several times for one transaction
across resubmissions.
No DEPOSIT_ORDER_NOTIFICATION is emitted during on-chain confirmation; it arrives when the deposit is
fully complete and now carries whiteListStatus as well.
Not receiving any of these? Poll GET /v1/wallet/history?whiteListStatus=init (or rejected) for the work
queue, and GET /v1/wallet/transactions/{transactionId} for one transaction. The removed
GET /v1/wallet/deposit-whitelist/pending-list is no longer available.
Respond 200 promptly and process asynchronously.

Request

Authorization
API Key
Add parameter in header
API-KEY
Example:
API-KEY: ********************
API Key
Add parameter in header
API-SIGNATURE
Example:
API-SIGNATURE: ********************
API Key
Add parameter in header
API-TIMESTAMP
Example:
API-TIMESTAMP: ********************
or
Body Params application/json

Example
{
    "eventId": "evt_9f2c7b1e4a6d",
    "eventType": "DEPOSIT_WHITELIST_REQUIRED",
    "referenceId": "20573580428712136704",
    "status": "PROCESSING",
    "timestamp": 1757062800000,
    "data": {
        "transactionId": "20573580428712136704",
        "txHash": "0x9c1a4d2f6b8e0a7c3d5f1b9e2a4c6d8f0b2e4a6c8d0f2b4e6a8c0d2f4b6e8a01",
        "currency": "USDC",
        "network": "BSC",
        "fromAddress": "0x3a1F8C4e2b6C8c9D7fE2B8b5a1d3C9A0bE12F345",
        "memo": "",
        "amount": "100.00",
        "walletId": "123",
        "walletName": "Merchant Sub Wallet A",
        "status": "PROCESSING",
        "creditStatus": "PENDING",
        "whiteListStatus": "init",
        "failMessage": "Company address does not match the incorporation country",
        "creditTime": "2026-09-04T09:41:00Z"
    }
}

Request Code Samples

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://your-api-server.com' \
--header 'API-KEY: <api-key>' \
--header 'API-SIGNATURE: <api-key>' \
--header 'API-TIMESTAMP: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
    "eventId": "evt_9f2c7b1e4a6d",
    "eventType": "DEPOSIT_WHITELIST_REQUIRED",
    "referenceId": "20573580428712136704",
    "status": "PROCESSING",
    "timestamp": 1757062800000,
    "data": {
        "transactionId": "20573580428712136704",
        "txHash": "0x9c1a4d2f6b8e0a7c3d5f1b9e2a4c6d8f0b2e4a6c8d0f2b4e6a8c0d2f4b6e8a01",
        "currency": "USDC",
        "network": "BSC",
        "fromAddress": "0x3a1F8C4e2b6C8c9D7fE2B8b5a1d3C9A0bE12F345",
        "memo": "",
        "amount": "100.00",
        "walletId": "123",
        "walletName": "Merchant Sub Wallet A",
        "status": "PROCESSING",
        "creditStatus": "PENDING",
        "whiteListStatus": "init",
        "failMessage": "Company address does not match the incorporation country",
        "creditTime": "2026-09-04T09:41:00Z"
    }
}'

Responses

🟢200OK
application/json
Bodyapplication/json

Example
{
    "received": true
}
Previous
PaymentLink Notification
Next
inquiry supported currency
Built with