1. Payment Link
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
        POST
      • List Payment links
        POST
      • Get Curreny Network Config
        GET
      • Prepay Whitelist for One-Time Payment Link
        POST
      • Prepay Whitelist for Permanent Payment Link
        POST
    • 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 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. Payment Link

Prepay Whitelist for Permanent Payment Link

Developing
POST
/v1/stable/collect/payment-links/permanent/prepay-whitelist

Prepay whitelist for a Permanent payment link#

POST /v1/stable/collect/payment-links/permanent/prepay-whitelist
Register payer details for one Permanent payment-link session. The order's paymentLinkType must be permanent.
The hosted payment page must call create-permanent-prepay first. clientId is the session id that page sends; the response echoes it. currency, network, and amount must equal that call. orderId is the paymentId from POST /v1/stable/collect/create-payment-link. walletId must equal that link's recipientAccountId.

Why whitelist#

Crypto paid through this payment link is usable only after the payer details pass the deposit whitelist.
Register those details on the link now, before anyone pays. You then do not collect them again after the money arrives.

If you skip this call#

The on-chain payment is still received, but it stays gated:
The collection order remains PROCESSING, with whiteListStatus init.
The funds sit in the unavailable balance of the receiving wallet. They cannot be withdrawn or converted.
If the payer has paid and the source address is not whitelisted yet, COLLECT_ORDER_UPDATED is sent with orderStatus PROCESSING and whiteListStatus init. After the whitelist is approved and the funds are credited, COLLECT_ORDER_UPDATED is sent with orderStatus SUCCESS.

Submit payer details after the payment arrives#

Use this when whiteListStatus is init (never submitted) or rejected (resubmit).
1.
Take transactionId from COLLECT_ORDER_UPDATED. Pass that value as {transactionId} on the submit call.
2.
Call POST /v1/wallet/deposit-whitelist/transactions/{transactionId}/submit with the payer details. Do not send the source address, network, memo, or transaction hash. Those come from the on-chain payment.
3.
whiteListStatus becomes pending while the review runs.
4.
On rejected, read failMessage and submit again. The order stays PROCESSING and the funds stay unavailable.
5.
When the review passes, the funds move into the available balance of the receiving wallet. If the wallet auto-collects, the order can stay PROCESSING until that sweep finishes. COLLECT_ORDER_UPDATED with orderStatus SUCCESS is the completion signal.
Guide: Wallet · Deposit whitelist

Which call#

Link typeEndpointWhen
onetimePOST /v1/stable/collect/payment-links/onetime/prepay-whitelistAfter POST /v1/stable/collect/create-payment-link
permanentPOST /v1/stable/collect/payment-links/permanent/prepay-whitelistAfter the hosted payment page has called create-permanent-prepay
Use the endpoint that matches the link's paymentLinkType. A mismatch returns ODR00000041.
This call covers this payment link only. To reuse one payer for every deposit into a sub-wallet, use POST /v1/wallet/deposit-whitelist/wallets/{walletId}/profile.
travelRule uses the same payer fields as Address Book / submit:
correspondentTypeRequired inside travelRule
ENTITYfullName, countryCode, companyAddress
INDIVIDUALfirstName, lastName, birthday (yyyy-MM-dd), countryCode, residentialAddress
Do not send walletAddress, network, memo, symbol, or txHash inside travelRule. Do not send countryInfo.
Authentication is the same as the other Stable collect APIs.

Failures#

Business failure uses status 500.
codeWhen
ODR00000041paymentLinkType is not permanent; walletId is not the link's recipient account; clientId, currency, network, or amount is missing; the order is not owned by the caller
10000103A travelRule value is not accepted. An unrecognised countryCode returns this code.
amount is a decimal string. A JSON number is accepted. It must equal the amount on that create-permanent-prepay call.

Example#

{
  "orderId": "PAY2025101507677652572380042240",
  "walletId": 10086,
  "clientId": "client-session-uuid",
  "currency": "USDT",
  "network": "ETH",
  "amount": "100.00",
  "travelRule": {
    "walletLabel": "Payport Limited",
    "addressType": "STANDARD",
    "walletType": "VASP",
    "provider": "Binance",
    "correspondentType": "ENTITY",
    "fullName": "Payport Limited",
    "countryCode": "SG",
    "companyAddress": "Tampines Blk67, Singapore"
  }
}
Success data:
{
  "prepayId": 90001,
  "bizNo": "90001",
  "saved": true
}

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
Header Params

Body Params application/jsonRequired

Example
{
  "orderId": "PAY2025101507677652572380042240",
  "walletId": 10086,
  "clientId": "client-session-uuid",
  "currency": "USDT",
  "network": "ETH",
  "amount": "100.00",
  "travelRule": {
    "walletLabel": "Payport Limited",
    "addressType": "STANDARD",
    "walletType": "VASP",
    "provider": "Binance",
    "correspondentType": "ENTITY",
    "fullName": "Payport Limited",
    "countryCode": "SG",
    "companyAddress": "Tampines Blk67, Singapore"
  }
}

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 '/v1/stable/collect/payment-links/permanent/prepay-whitelist' \
--header 'Idempotency-Key: a3f1c2de-6f0b-4a1e-9e3b-2b7c5f0d1a44' \
--header 'API-KEY: <api-key>' \
--header 'API-SIGNATURE: <api-key>' \
--header 'API-TIMESTAMP: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
  "orderId": "PAY2025101507677652572380042240",
  "walletId": 10086,
  "clientId": "client-session-uuid",
  "currency": "USDT",
  "network": "ETH",
  "amount": "100.00",
  "travelRule": {
    "walletLabel": "Payport Limited",
    "addressType": "STANDARD",
    "walletType": "VASP",
    "provider": "Binance",
    "correspondentType": "ENTITY",
    "fullName": "Payport Limited",
    "countryCode": "SG",
    "companyAddress": "Tampines Blk67, Singapore"
  }
}'

Responses

🟢200Success
application/json
Bodyapplication/json

Example
{
    "status": 200,
    "msg": "OK",
    "code": null,
    "traceId": "a1b2c3d4e5f6",
    "data": {
        "prepayId": 90001,
        "bizNo": "90001",
        "saved": true
    }
}
Previous
Prepay Whitelist for One-Time Payment Link
Next
Convert field notes
Built with