Parent: Overview
Updated: 2026-08-27
VirtualAccountStatusUNDER_REVIEW / RESUBMIT / REVIEW_SUCCESS / CLOSED, etc.) — treat the live response and webhooks as source of truth.USED. It may also end as EXPIRED or REJECTED.| Path | Notes |
|---|---|
INIT → PROCESSING → SUCCESS → USED | Created successfully and consumed once |
INIT → PROCESSING → FAIL | Creation / provisioning failed |
SUCCESS → EXPIRED | Current VA expired before a successful collection |
SUCCESS → REJECTED | VA payment was rejected; funds were returned to the original payer |
SUCCESS after provisioning; does not move to USED.| Path | Notes |
|---|---|
INIT → PROCESSING → SUCCESS | Provisioned successfully; can keep collecting |
INIT → PROCESSING → FAIL | Provisioning failed |
| Status | Terminal? | Merchant action |
|---|---|---|
INIT | No | Wait |
PROCESSING | No | Wait |
SUCCESS | Business-dependent | Usable for collection (static) |
USED | Business-dependent | Dynamic account already used |
EXPIRED | Yes | Dynamic VA expired; create a new VA if collection is still needed |
REJECTED | Yes | Payment rejected; funds already returned to source — do not credit |
FAIL | Yes | Handle failure |
UNDER_REVIEW / RESUBMIT / REVIEW_SUCCESS / CLOSED | Business-dependent | Review / close branch — follow webhooks |
VirtualAccountRFIStatusrfiStatus on Sub VA / RFI query results (public name VirtualAccountRFIStatus).| Status | Meaning | Merchant action |
|---|---|---|
NONE | No remediation required | None |
AWAITING_SUBMISSION | Waiting for submission | Fetch template and submit-rfi |
SUBMITTED | Submitted, under review | Wait |
RESUBMIT_REQUIRED | Resubmission required | Submit again as instructed |
APPROVED | Approved | Continue business |
REJECTED | Rejected | Handle per business rules |
orderStatus; refund progress is on refundStatus and on the RE* child.businessType| Order | orderId prefix | businessType | originalOrderId | refundOrderId |
|---|---|---|---|---|
| Original pay-in / payout | VA* | PAY_IN / CASH_OUT | null | RE* child when a refund exists, else null |
| Refund child | RE* | PAYIN_REFUND / PAYOUT_REFUND | original VA* | null |
businessType, orderStatus, refundStatus, originalOrderId, refundOrderId. businessType, orderStatus, and refundStatus use uppercase enum names.PAY_IN / CASH_OUT)orderStatus stays SUCCESS after a successful credit/debit. It is not rewritten to REFUNDING / REFUNDED / REFUND_FAIL.orderStatus=SUCCESS and refundStatus copied from the RE* child (for example REFUNDING). With no refund, refundStatus is null.| Path | Notes |
|---|---|
INIT → PROCESSING → SUCCESS | Original pay-in / payout succeeded |
INIT → PROCESSING → FAIL | Original failed |
… → MANUAL_PROCESSING → SUCCESS/FAIL | Manual handling |
After SUCCESS | Refunds do not change this orderStatus |
PAYIN_REFUND / PAYOUT_REFUND)| Stage | orderStatus | refundStatus |
|---|---|---|
| Created / channel not terminal | PROCESSING | REFUNDING |
| Funds confirmed and ledger posted | REFUNDED | REFUNDED |
| Channel explicitly failed | FAIL | REFUND_FAILED |
RE* orderId.| Field | Values (this release) |
|---|---|
Original orderStatus | INIT | PROCESSING | MANUAL_PROCESSING | SUCCESS | FAIL |
Refund child orderStatus | PROCESSING | REFUNDED | FAIL |
refundStatus | REFUNDING | REFUNDED | REFUND_FAILED | null |
FAIL_OR_BLOCKED remains a query-only aggregate filter, not a transition state.orderStatus (SUCCESS / FAIL). Book a refund only from the RE* child reaching REFUNDED or FAIL. Do not infer refund success from timeout, missing callbacks, or the original order remaining SUCCESS.