
Getting Started
Understand the complete transaction lifecycle for Money In products (Virtual Account, E-Wallet, QRIS, Payment Link), including what happens when a payment fails and how disputes are resolved.
This page explains the complete transaction lifecycle for Money In products on SingaPay — how payments are received, what happens when they fail, and how disputes are resolved.
Applies to: Virtual Account, E-Wallet (Money In), QRIS, and Payment Link
All Money In products on SingaPay follow a callback-based (notification-based) model. SingaPay does not process the payment directly — instead, it relies on vendor banks or payment service providers (PJP) to confirm whether a customer’s payment was successful.
Step-by-step:
open (or unpaid).success and a webhook notification is sent to the merchant.Important: Money In products do not have a “failed” status in the traditional sense.
Unlike Money Out, Money In transactions do not transition to a failed status. Here’s what actually happens:
| Scenario | What Happens | Final Status |
|---|---|---|
| Customer pays successfully | Vendor confirms payment → SingaPay verifies → transaction marked as success | success |
| Customer doesn’t pay | No callback received → transaction remains open/unpaid until it expires | expired |
| Customer payment fails at bank | Bank rejects the payment on their end → no callback sent to SingaPay → transaction stays open/unpaid | expired |
| Vendor confirms success but delayed | SingaPay receives late callback → verifies with vendor → processes manually to success | success |
A Money In transaction will never show “failed”. It will either be confirmed as
success(if the bank/vendor confirms the payment), or remainopen/unpaiduntil it expires. There is no intermediate “failed” state because SingaPay waits for positive confirmation from the vendor — if no confirmation arrives, the transaction simply expires after its designated time window.
┌──────────┐
│ OPEN / │──── Customer pays & vendor confirms ────▶ ┌─────────┐
│ UNPAID │ │ SUCCESS │
│ │ └─────────┘
│ │
│ │──── No payment / time runs out ──────────▶ ┌─────────┐
│ │ │ EXPIRED │
└──────────┘ └─────────┘
There is no direct path from
open/unpaidtofailedfor Money In products.
If a customer claims they have paid but the transaction still shows open/unpaid or expired, follow this dispute resolution procedure:
Steps:
reff_no), payment amount, payment timestamp, and any proof of payment from the customer (e.g., screenshot from their banking/e-wallet app).success and notify the merchant.What to provide when contacting SingaPay support: Transaction reference number (
reff_no), account ID, payment amount, approximate payment time, and customer’s proof of payment if available.
Transactions don’t have a “failed” status on SingaPay’s side. If a customer reports their payment failed, it likely means their bank or e-wallet app rejected the payment on their end before it reached SingaPay. In this case, no callback is sent to SingaPay and the transaction remains open/unpaid until expiry. Advise the customer to check their bank statement and try again, or contact SingaPay support if the funds were deducted.
Each product has its own expiration time. Once expired, the transaction cannot be paid anymore. You can also set custom expiration times when creating certain payment types (e.g., E-Wallet checkout). After a transaction expires, if the customer still wants to pay, a new transaction must be created.
This can happen if there is a delay or issue with the vendor callback. Contact SingaPay support immediately with the transaction reference number and proof of deduction from the customer. SingaPay will verify directly with the vendor bank and process the transaction manually if confirmed.
| Aspect | Money In | Money Out |
|---|---|---|
| Products | VA, E-Wallet (Money In), QRIS, Payment Link | Disbursement, E-Wallet (Money Out) |
| Who initiates? | Customer pays into SingaPay | SingaPay sends money out |
| Initial status | open / unpaid | pending |
| Has “failed” status? | No — unpaid transactions expire | Yes — bank can reject transfers |
| Typical resolution time | Depends on customer (minutes to hours) | 1–2 seconds (normal), up to ~15 min (uncommon) |
| If no response from vendor | Transaction stays open → eventually expired | Transaction stays pending → resolved by SingaPay team |
| Confirmation model | Callback-based (waiting for vendor notification) | Real-time response from bank |
| If something goes wrong | Contact SingaPay support with transaction details | Contact SingaPay support — do not retry without guidance |