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

2026-09-21 Virtual Account independent refund orders

Overview#

Effective after 2026-09-21. Merchants should not treat this contract as live before that date.
This release documents independent refund child orders for Pay-in and Payout. The original VA* order stays SUCCESS. Refund lifecycle lives on an RE* child.
Affected resources:
Get VA Order Detail — GET /v1/virtual-account/order/detail
List VA Orders — GET /v1/virtual-account/order/list
Refund VA Order — POST /v1/virtual-account/order/refund
Virtual Account Payment Status webhook
Get Reconciliation Order List By Page
Guides:
VA · Statuses
VA · Payin
VA · Payout
Virtual Account Overview

Field contract#

JSON is camelCase. Amounts are decimal strings. currency is a separate ISO 4217 field. Keep the existing BPN OpenAPI envelope (status / message / data / traceId).
FieldOriginal VA*Refund child RE*
orderIdVA*RE*
businessTypePAY_IN / CASH_OUTPAYIN_REFUND / PAYOUT_REFUND
orderStatusstays SUCCESS after successPROCESSING / REFUNDED / FAIL
refundStatuscopied from the child, or nullREFUNDING / REFUNDED / REFUND_FAILED
originalOrderIdnulloriginal VA*
refundOrderIdRE* child or nullnull
businessType / orderStatus in older examples are deprecated aliases. Prefer businessType / orderStatus / refundStatus. All three use uppercase enum values.

Refund child states#

StageorderStatusrefundStatus
Created / channel not terminalPROCESSINGREFUNDING
Funds confirmed and ledger postedREFUNDEDREFUNDED
Channel explicitly failedFAILREFUND_FAILED

Webhook#

Stop treating original-order orderStatus=REFUNDED as the refund terminal event. Subscribe to VIRTUAL_ACCOUNT_ORDER_UPDATED on the RE* child. Timeout or missing callback must not be inferred as success.

Example · RE* processing#

{
  "eventId": "evt_PAYIN_REFUND_10001",
  "eventType": "VIRTUAL_ACCOUNT_ORDER_UPDATED",
  "referenceId": "RE20260826170000000001",
  "status": "PROCESSING",
  "timestamp": 1787304000000,
  "data": {
    "orderId": "RE20260826170000000001",
    "businessType": "PAYIN_REFUND",
    "refundStatus": "REFUNDING",
    "originalOrderId": "VA20260826160000000001",
    "refundOrderId": null,
    "amount": "100.00",
    "currency": "BRL",
    "orderStatus": "PROCESSING"
  }
}

Example · original VA while refund is in flight#

{
  "orderId": "VA20260826160000000001",
  "businessType": "PAY_IN",
  "refundStatus": "REFUNDING",
  "originalOrderId": null,
  "refundOrderId": "RE20260826170000000001",
  "amount": "100.00",
  "currency": "BRL",
  "orderStatus": "SUCCESS"
}

List filter#

GET /v1/virtual-account/order/list?refundStatus=REFUNDING returns refund child orders only, not original VA* rows.

Dynamic Virtual Account statuses (unchanged)#

StatusMeaning
EXPIREDThe current VA has expired.
REJECTEDThe VA payment was rejected and funds were returned to the original payer.
See VA · Statuses · Account VirtualAccountStatus.
Previous
Error codes catalogue
Built with