Payment lifecycle and statuses
Every status a payment or batch can have, where approval happens, and how each bank's statuses map to Acme's.
Every payment moves through a set of statuses, from the moment you create it to the bank's final answer. This page explains:
- The single payment flow and its statuses.
- The batch payment flow and its statuses.
- Approval in your bank's portal.
- Acme maker-checker, an optional approval step at Acme.
- How each bank's own statuses map to Acme's.
Single payment flow
You create a single payment with Create a Payment (POST /v1/payments). There are two ways to follow its status:
- Webhooks. Acme sends an event to your endpoint when the payment completes or fails, and at each maker-checker step. See Webhooks and the payment events.
- Get a Payment. Fetch the payment with Get a Payment (
GET /v1/payments/{id}) at any time.
Not every status sends a webhook. For example, PROCESSING and SUBMITTED send none. The Webhook column in each status table shows which do.
The usual path:
PROCESSING → SUBMITTED → COMPLETED
Other paths:
- The bank rejects the payment:
PROCESSINGorSUBMITTED→FAILED. - Some banks give their final answer straight away, so the payment goes from
PROCESSINGtoCOMPLETEDorFAILEDwithoutSUBMITTED. - Some banks do not report that they accepted the payment, so it stays
PROCESSINGuntil their final answer. The bank tables show which.
Payment statuses
| Status | Where the payment is | What it means | Final? | Webhook |
|---|---|---|---|---|
PROCESSING | Acme or the bank | Acme is sending it to the bank, or the bank has it but has not yet reported a result. | No | None |
SUBMITTED | The bank | The bank accepted it and is processing it. Acme is waiting for the final answer. | No | None |
COMPLETED | The bank | The bank confirmed the payment. | Yes | payments.succeeded |
FAILED | The bank | The bank rejected or returned the payment. resultCode says why. | Yes | payments.failed |
If your organization uses Acme maker-checker, a payment can also be PENDING_APPROVAL, APPROVAL_REJECTED or APPROVAL_EXPIRED before it reaches PROCESSING.
COMPLETEDandFAILEDnever change. A payment that completed is never marked failed later, and the reverse.- If the bank does not answer, the payment usually stays
PROCESSINGorSUBMITTED. Acme checks with the bank, or Acme's team confirms the result with it. - If Acme marks a payment
FAILEDwithout a rejection from the bank, for example after an error or an answer Acme cannot read, the bank may still have made it. Contact Acme before you retry the payment. Each bank's table shows where this can happen. - A payment can stay
SUBMITTEDwithresultCodeREQUEST_TIMEOUTwhile Acme confirms the result. ThisresultCodedoes not mean the payment failed.
Batch payment flow
You create a batch payment with Create a Batch Payment (POST /v1/payment-batches). Acme sends the batch to the bank as one file. The batch and each payment in it have separate statuses.
You can follow these statuses in two ways:
- Webhooks. Acme sends a batch event when the file is sent or rejected. It also sends
payments.succeededorpayments.failedas the bank reports on the payments. One webhook can carry up to 100 payments underobjects, as described in Payments in a batch. Each payment includes itsidand thebatchIdof its batch. - Polling. Get a Batch Payment (
GET /v1/payment-batches/{id}) returns the batch status only. To poll a payment, call Get a Payment with the paymentid.
Record each payment ID
- The create response is the only response that lists the payments in a batch, each with its
id. - Get a Batch Payment and List Batch Payments do not return the payments, and List Payments cannot filter by batch.
- If you poll, store each payment
idfrom the create response. - If you use webhooks, match each payment event to its batch with
batchId.
| Batch status | What it means | Final? | Webhook |
|---|---|---|---|
PROCESSING | Acme is preparing the file, or waiting to send it. | No | None |
SUBMITTED | Acme sent the file to the bank. | No | payment-batches.submitted |
COMPLETED | Every payment in the batch is COMPLETED or FAILED. | Yes | None |
FAILED | The bank rejected the whole file. Every payment in it is FAILED. | Yes | payment-batches.rejected |
Payments in a batch:
PROCESSING: each payment starts here while Acme prepares the file. A200answer to the create request means Acme created the batch, not that the bank has made the payments. If a batch staysPROCESSINGfor more than an hour, contact Acme. Do not send the batch again, as the payments may be made twice.SUBMITTED: each payment moves here when Acme sends the file. Do not send aSUBMITTEDpayment again. Some banks hold the file for approval in their portal, and some send no further status after approval or after payment. The payment then staysSUBMITTEDin Acme, and you can confirm it in the bank's portal or on your bank statement. See each bank's section.COMPLETEDorFAILED: each payment moves here as the bank reports on it, and is included in apayments.succeededorpayments.failedwebhook. For a failed payment,underlyingErrorMessageholds the bank's reason when the bank provides one. If the bank rejects the whole file, the batch carries the reason.- A
COMPLETEDbatch can containFAILEDpayments. Check each payment's status, not only the batch status. - Batch payments do not go through Acme maker-checker.
Example: a batch of 10 payments
The ACK names and the ACK that is final differ by bank. This example uses ACK1 to ACK3. See Bank status mapping for each bank.
- You send 10 payments, 2 of them with an invalid bank code. Acme answers
400and creates nothing. - You correct the 2 payments and send the batch again. Acme answers
200. The batch and its 10 payments arePROCESSING, and the response lists each paymentid. - Acme sends the file to the bank. The batch and its payments move to
SUBMITTED, and Acme sendspayment-batches.submitted. - The bank accepts the file in ACK1. If the bank rejects the whole file instead, Acme sends
payment-batches.rejected, andpayments.failedfor every payment. - The bank checks each payment in ACK2 and rejects 2 other payments. Those payments move to
FAILEDand are reported inpayments.failed. - The bank accepts the remaining 8 payments in ACK3, its final answer. Those payments move to
COMPLETEDand are reported inpayments.succeeded. - No payment is waiting for the bank, so the batch moves to
COMPLETED. Acme sends no webhook for this.
For DBS, when the bank changes a payment's date (ACWC), Acme updates actualPaymentDate. When DBS reports a charge, Acme sets bankChargeAmount and bankChargeCurrency. Acknowledgements from other banks do not change these fields.
Approval at the bank
Your bank can ask for approval in its own portal. This is agreed between you and your bank. There are two set-ups:
- Straight-through (pre-authorised). The bank processes the payment as soon as it receives it. Nobody approves it in the bank's portal.
- Re-authorisation. The bank holds the payment until your approvers approve it in the bank's portal, for example DBS IDEAL, OCBC Velocity, HSBCnet, RHB Reflex or Maybank M2E.
While the bank holds the payment, Acme shows SUBMITTED, or PROCESSING for banks that do not report acceptance. When your approver rejects it in the portal, the payment moves to FAILED if the bank reports the rejection to Acme. Each bank table says how that bank handles approval.
Acme maker-checker
Most organizations do not use Acme maker-checker. If Acme has not set it up for you, your payments follow the single payment flow and you can skip this section.
Acme maker-checker is an optional approval step at Acme, before the payment goes to the bank. A payment made by a maker API key waits at Acme until a checker API key approves it. It is separate from approval at the bank, and you can use both.
How it works:
- Acme turns it on for your organization. The set-up names the maker API keys, the checker API keys, and the accounts it covers.
- If the set-up names no maker keys, every API key is a maker on the covered accounts.
- A payment created by a maker key on a covered account starts as
PENDING_APPROVAL. It is not sent to the bank. - A checker key approves it with Approve a Payment or rejects it with Reject a Payment.
- When the set-up names checker keys, only those keys can approve or reject.
- The checker key cannot be the key that made the payment.
- A payment prepared in the dashboard is approved in the dashboard, not with an API key.
- Approval sends the payment to the bank in the same call. The payment moves to
PROCESSINGand follows the single payment flow. review.expiresAton the payment is the approval deadline. The default is 7 days after the payment is created. A payment prepared in the dashboard has 24 hours.- Batch payments do not go through Acme maker-checker.
| Status | What it means | Final? | Webhook |
|---|---|---|---|
PENDING_APPROVAL | Waiting for a checker key to approve or reject it. | No | payments.pending-approval |
APPROVAL_REJECTED | A checker key rejected it. It was never sent to the bank. | Yes | payments.approval-rejected |
APPROVAL_EXPIRED | Nobody approved it before review.expiresAt. It was never sent to the bank. | Yes | payments.approval-expired |
PROCESSING | A checker key approved it, and Acme is sending it to the bank. | No | None (see payments.approved below) |
payments.approvedis sent once the checker approves. It carries the payment's status at that moment, which can already be pastPROCESSING.- A rejected or expired payment has no
resultCode. - See Maker-checker flow for the webhook payloads.
Bank status mapping
Each bank section below describes how the bank reports on a payment and how Acme maps each report to a payment status.
- Label: each flow is labelled API for single payments or Batch file for batch payments.
- Order: each flow lists the bank's answers in the order they arrive.
- Thick border: marks an answer that can complete the payment. A rejection can also arrive at other steps.
- Table: the table under each flow gives the Acme status for each answer.
ANZ Australia
Batch payments only, by file. See the ANZ Australia guide.
- File sent: payments are
SUBMITTED. - Status file (pain.002): final on
ACSPorRJCT.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| Status file | RJCT (file) | ANZ rejected the whole file. | FAILED | payments.failed for each payment. payment-batches.rejected when the file has no status for each payment. |
| Status file | RJCT | ANZ rejected the payment. | FAILED | payments.failed |
| Status file | ACSP | ANZ accepted the payment. Final. | COMPLETED | payments.succeeded |
| Status file | Any other code | Not final. | SUBMITTED | None |
Approval at the bank
- Set up with ANZ.
- Acme shows
SUBMITTEDuntil ANZ reports a final status.
Banco Azteca Mexico
Single payments only, by API. See the Banco Azteca Mexico guide.
- Submit: final. Banco Azteca answers with the result.
| Banco Azteca answer | Acme status | What it means |
|---|---|---|
| Success | COMPLETED | The transfer is done. |
| Error, no answer, or an answer Acme cannot read | FAILED | Banco Azteca rejected the payment, or did not answer. Banco Azteca may still have made the payment. Contact Acme before you retry the payment. |
- Submit: the payment stays
PROCESSING. - Status checks: every minute, then every 5 minutes, until final.
| Banco Azteca status | Acme status | What it means |
|---|---|---|
| Sent | PROCESSING | Banco Azteca has the payment. |
| Error, no answer, or an answer Acme cannot read, when Acme sends it | FAILED | Banco Azteca may still have made the payment. Contact Acme before you retry the payment. |
ENVIADA, EN PROCESO, RECIBIDA | PROCESSING | Not final. Acme checks again every minute, then every 5 minutes. |
LIQUIDADA, COMPLETADA, ACEPTADA | COMPLETED | The payment settled. |
RECHAZADA, CANCELADA, DEVUELTA, NO LIQUIDADA, NO ENCONTRADA | FAILED | Rejected, cancelled, returned, not settled or not found. |
| Any other status | PROCESSING | Not final. Acme checks until the 24-hour limit. |
- If Banco Azteca has no final status after 24 hours, Acme marks the payment
FAILED.
Approval at the bank
- Set up with Banco Azteca.
CIMB Singapore
Single payments by API and batch payments by file. See the CIMB API guide and the CIMB H2H guide.
- Submit answer: CIMB accepts or rejects.
- CIMB notification: final on a debit notification, or a TT notification
Processed,Executed with FailureorFailed.
| Payment type | CIMB answer | Acme status | What it means |
|---|---|---|---|
FAST | ACTC | SUBMITTED | CIMB accepted the payment. |
FAST | RJCT | FAILED | CIMB rejected the payment. |
TT | SUCCESS | SUBMITTED | CIMB accepted the payment. |
TT | Any other status | FAILED | CIMB rejected the payment. |
BKTR | 0 | SUBMITTED | CIMB accepted the payment. |
BKTR | 1 | FAILED | CIMB rejected the payment. |
| Any | Any other answer, or no status | PROCESSING | Not final. Contact Acme to confirm the result with CIMB. |
| Any | HTTP error, or an answer Acme cannot read | FAILED | CIMB may still have made the payment. Contact Acme before you retry the payment. |
| Any | No answer | PROCESSING | Not final. Contact Acme to confirm the result with CIMB. |
FAST, BKTR | Debit notification | COMPLETED | CIMB debited your account. |
TT | Remittance notification Processed | COMPLETED | CIMB sent the payment. |
TT | Remittance notification Executed with Failure or Failed | FAILED | The payment failed. |
- The final status comes from CIMB's notifications. Acme does not ask CIMB for it.
- File sent: payments are
SUBMITTED. - PSR-1: file checks. A payment
ACSCorRJCTwaits for a later PSR. - PSR-2 to PSR-10: final on
ACSCorRJCT.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| Any PSR | RJCT (file) | CIMB rejected the whole file. | FAILED | payments.failed for each payment. payment-batches.rejected when the file has no status for each payment. |
| Any PSR | RCVD, ACCP, ACSP, PDNG | Received, accepted or pending. Not final. | SUBMITTED | None |
| PSR-2 or later | ACSC | The payment settled. Final. | COMPLETED | payments.succeeded |
| PSR-2 or later | RJCT | CIMB rejected the payment. | FAILED | payments.failed |
ACSCorRJCTfor a payment in PSR-1 is not applied. Acme waits for a later report.
Approval at the bank
- Set up with CIMB.
Citibank (all countries)
Single payments by API for Singapore PAYNOW and Malaysia MY_DUITNOW. Batch payments by file in every Citi country. See the Citibank guides, for example Citibank Singapore.
- Submit answer: final on
ACSP,ACSCorRJCT. - Status checks: final on
ACSP,ACSCorRJCT.
| Citi status | Acme status | What it means |
|---|---|---|
ACTC, ACCP, PDNG | PROCESSING | Accepted or pending. Acme keeps checking. |
ACSP, ACSC | COMPLETED | The payment settled or is settling. |
RJCT | FAILED | Citi rejected the payment. |
| HTTP error, or no answer, at submit | PROCESSING | Not final. Acme keeps checking with Citi. |
| No record of the payment after repeated checks | FAILED | Citi did not receive the payment. |
| An answer Acme cannot match to the payment, after repeated checks | FAILED | Acme could not confirm the payment with Citi. |
| Any other code | PROCESSING | Not final. Acme keeps checking. |
- File sent: payments are
SUBMITTED. - FILE: file checks.
- TXN: final on
ACSPorRJCT.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| FILE | RJCT (file) | Citi rejected the whole file. | FAILED | payments.failed for each payment, and payment-batches.rejected |
| FILE | Any other code | Citi accepted the file. | SUBMITTED | None |
| TXN | RJCT | Citi rejected the payment. | FAILED | payments.failed |
| TXN | ACCP, ACWC | Accepted. Not final. | SUBMITTED | None |
| TXN | ACSP | Final acceptance from Citi. | COMPLETED | payments.succeeded |
| TXN | Any other code | Not applied. | SUBMITTED | None |
Approval at the bank
- Set up with Citi.
DBS Singapore
Single payments by API and batch payments by file. See the DBS API guide and the DBS H2H guide.
- Submit answer: final on
ACTC,ACWCorRJCT. - Status checks: final on
ACTC,ACWCorRJCT. Up to 3, 5 minutes apart.
| DBS status | Acme status | What it means |
|---|---|---|
ACTC, ACWC | COMPLETED | DBS accepted the payment. |
RJCT | FAILED | DBS rejected the payment. |
PDNG | SUBMITTED | Pending. Acme checks again, up to 3 times. |
RJCT with A005 or A009 | SUBMITTED | DBS planned downtime. Acme checks again, up to 3 times. |
| No answer | SUBMITTED | Acme checks again, up to 3 times. |
ACSP, ACCP, PART in the submit answer | FAILED | DBS does not send these here. Contact Acme before you retry the payment. |
- After the last check, the payment stays
SUBMITTEDand Acme's team confirms the result with DBS.
- Submit answer:
ACTC, DBS received the payment. - Status checks: only after
PDNGor planned downtime. Up to 3, 5 minutes apart. - ACK2:
ACCPorACWCis not final.RJCTis final. - ACK3: final.
| DBS status | Acme status | What it means |
|---|---|---|
ACTC in the first answer | SUBMITTED | DBS received the payment. The result comes later. |
RJCT in the first answer | FAILED | DBS rejected the payment. |
PDNG, or RJCT with A005 or A009 | SUBMITTED | Pending or planned downtime. Acme checks again, up to 3 times. |
ACWC, ACSP, ACCP, PART in the first answer | FAILED | DBS does not send these in the first answer. Contact Acme before you retry the payment. |
ACCP, ACWC in ACK2 | SUBMITTED | Accepted. Not final yet. |
ACSP, ACWC in ACK3 | COMPLETED | Final acceptance from DBS. |
RJCT in ACK2 or ACK3 | FAILED | DBS rejected the payment. |
- After the last check, the payment stays
SUBMITTEDand Acme's team confirms the result with DBS.
- File sent: payments are
SUBMITTED. - ACK1: file checks.
- ACK2: payment checks.
RJCTis final,ACCPorACWCis not. - ACK3: final. With approval in IDEAL, it comes after approval.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| ACK1 | ACTC (file) | DBS accepted the file. | SUBMITTED | None |
| ACK1 | RJCT (file) | DBS rejected the whole file. | FAILED | payments.failed for each payment, and payment-batches.rejected |
| ACK2 | ACCP, ACWC | Accepted. Not final. | SUBMITTED | None |
| ACK2 | RJCT | DBS rejected the payment. | FAILED | payments.failed |
| ACK2, ACK3 | PDNG | Pending. | SUBMITTED | None |
| ACK3 | ACCP, ACWC | Final acceptance from DBS. | COMPLETED | payments.succeeded |
| ACK3 | RJCT | DBS rejected the payment. | FAILED | payments.failed |
| ACK2, ACK3 | Any other code | Not applied. | SUBMITTED | None |
Approval at the bank
- Files are sent straight-through (STP) or for approval in DBS IDEAL. Acme sets this for your organization.
- With approval in IDEAL, DBS sends ACK2 before approval and ACK3 after it. Payments stay
SUBMITTEDuntil your approvers act. - If nobody approves the payments in IDEAL, they stay
SUBMITTED.
Deutsche Bank Singapore
Batch payments only, by file. See the Deutsche Bank Singapore guide.
- File sent: payments are
SUBMITTED. - Status file: final. It comes before approval in Deutsche Bank's portal.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| Status file | RJCT (file) | Deutsche Bank rejected the whole file. | FAILED | payments.failed for each payment. payment-batches.rejected when the file has no rejection for each payment. |
| Status file | RJCT | Deutsche Bank rejected the payment. | FAILED | payments.failed |
| Status file | ACCP | Deutsche Bank accepted the payment. Final. | COMPLETED | payments.succeeded |
| Status file | Any other code | Not applied. | SUBMITTED | None |
Approval at the bank
- Deutsche Bank sends one status file. It arrives before your approvers act in Deutsche Bank's web portal.
- Acme marks a payment
COMPLETEDwhen that file accepts it. Approval in the portal happens after that. - Deutsche Bank sends no later file for a payment that is not approved, rejected by the beneficiary bank, or returned. Check those in Deutsche Bank's portal.
HSBC Hong Kong, Malaysia, Singapore and Vietnam
Single payments by API in Hong Kong and Malaysia. Batch payments by file in Singapore, Malaysia, Hong Kong and Vietnam. See the HSBC guides for Singapore, Hong Kong (API), Hong Kong (H2H), Malaysia and Vietnam.
- Submit answer: final on
ACSC,RJCTor a refusal. - Status checks: final on
ACSCorRJCT.
| HSBC status | Acme status | What it means |
|---|---|---|
ACSC | COMPLETED | The payment settled. |
RJCT | FAILED | HSBC rejected the payment. |
HTTP 400, 401, 403, 405, 406 or 415, a maintenance answer (503 RJCT), or a 429 "API calls exceeded", at submit | FAILED | HSBC refused the request and did not process it. |
ACCP, ACSP, ACTC, ACWC, PART, PDNG | SUBMITTED | Not final. Acme keeps checking. |
| No answer, any other HTTP error, or any other code | SUBMITTED | Acme keeps checking for up to 1 day (HK_FPS), 7 days (HK_CHATS) or 10 days (TT). Then Acme's team confirms the result. |
| HSBC answers that it has no record of the payment, 3 times in a row over at least 10 minutes | FAILED | HSBC did not receive the payment. Acme applies this only when it holds HSBC's reference for the payment. Without it, Acme's team confirms the result with HSBC. |
- Submit answer: final on
ACCP,ACSP,ACSCorRJCT. - Status checks: final on
ACCP,ACSP,ACSCorRJCT.
| HSBC status | Acme status | What it means |
|---|---|---|
ACTC, ACWC, PART, PDNG | PROCESSING | Not final. Acme keeps checking. |
ACCP, ACSP, ACSC | COMPLETED | HSBC accepted the payment. |
RJCT | FAILED | HSBC rejected the payment. |
| Any other code, at a status check | PROCESSING | Acme keeps checking. |
| Any other code, at submit | PROCESSING | Not final. Acme's team confirms the result with HSBC. |
| HTTP error, no answer, or an answer Acme cannot read, at submit | FAILED | HSBC may still have made the payment. Contact Acme before you retry the payment. |
- File sent: payments are
SUBMITTED. - ACK1: file checks. Completes a payment only on
ACSC. - ACK2: payment checks. Completes a payment only on
ACSC. - Interim ACK2: only for files approved in HSBCnet, after the final approval. Completes a payment only on
ACSC. - ACK3: final for most types.
- ACK4: final for the types listed below.
The final ACK depends on the payment type:
- ACK4 is final for Singapore
FASTandPAYNOW, MalaysiaMY_DUITNOW, and every Hong Kong and Vietnam type. - ACK3 is final for every other type.
- Singapore
FASTandPAYNOWhave no ACK3.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| Any ACK | RJCT (file) | HSBC rejected the whole file. | FAILED | payments.failed for each payment. payment-batches.rejected when the file has no rejection for each payment. |
| Any ACK | RJCT | HSBC rejected the payment. | FAILED | payments.failed |
| Any ACK | ACSC | The payment settled. Final. | COMPLETED | payments.succeeded |
| ACK2, interim ACK2, or an ACK before the final one | ACCP, ACSP, ACWC | Accepted. Not final. | SUBMITTED | None |
| Final ACK (ACK3 or ACK4) | ACCP, ACSP, ACWC | Final acceptance from HSBC. | COMPLETED | payments.succeeded |
| Any ACK | Any other code | Not final. | SUBMITTED | None |
Approval at the bank
- Hong Kong API payments are always sent pre-authorised (straight-through).
- Malaysia API payments, and files in every country, carry an authorisation type that Acme sets for each account. Approval in HSBCnet follows what you agreed with HSBC.
- For files approved in HSBCnet, HSBC sends an interim ACK2 after the final approval. Payments stay
SUBMITTEDuntil the final ACK.
Maybank Singapore
Batch payments only, by file. See the Maybank Singapore guide.
- File sent: payments are
SUBMITTED. - ACK: file checks. Rejected lines fail.
- RTN: each payment's status. Final on
Successfulor a failure status.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| ACK | No line accepted | Maybank rejected the whole file. | FAILED | payments.failed for each payment, and payment-batches.rejected |
| ACK | Some lines rejected | Only the payments on those lines failed. | FAILED | payments.failed |
| ACK | Every line accepted | Maybank accepted the file. | SUBMITTED | None |
| RTN | Successfully Sent to Bank | Pending processing by Maybank. | SUBMITTED | None |
| RTN | New, Pending Verification, Pending Authorisation, Pending Releaser | Waiting for your approvers in Maybank M2E. | SUBMITTED | None |
| RTN | Returned | Returned in Maybank M2E. Not final. | SUBMITTED | None |
| RTN | Successful | The payment succeeded. | COMPLETED | payments.succeeded |
| RTN | Bank Rejected, Rejected, Stopped, Expired, Deleted | The payment failed or was stopped. | FAILED | payments.failed |
| RTN | Any other status | Not applied. | SUBMITTED | None |
Approval at the bank
- Payments wait in Maybank M2E for your approvers. The statuses
NewtoPending Releaserare steps in that workflow. - Payments stay
SUBMITTEDwhile they wait in that workflow.
OCBC Singapore
Single payments by API for PAYNOW. Batch payments by file. See the OCBC Singapore guide.
- Submit answer: final.
| OCBC answer | Acme status | What it means |
|---|---|---|
Success is true | COMPLETED | OCBC made the payment. |
Success is false | FAILED | OCBC rejected the payment. |
| No answer (timeout) | SUBMITTED | resultCode is REQUEST_TIMEOUT. Acme's team confirms the result with OCBC. |
| HTTP error, or an answer Acme cannot read | FAILED | OCBC may still have made the payment. Contact Acme before you retry the payment. |
- File sent: payments are
SUBMITTED. - ACK1 or NACK1: file checks. Completes a payment only on
ACSC. - ACK2 or NACK2: payment checks. Completes a payment only on
ACSC. - RET: final.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| Any file | RJCT (file) | OCBC rejected the whole file. | FAILED | payments.failed for each payment. payment-batches.rejected when the file has no rejection for each payment. |
| Any file | RJCT | OCBC rejected the payment. | FAILED | payments.failed |
| Any file | ACSC | The payment settled. Final. | COMPLETED | payments.succeeded |
| Any file before RET | ACCP, ACSP, ACWC | Accepted. Not final. | SUBMITTED | None |
| RET | ACCP, ACSP, ACWC | Final acceptance from OCBC. | COMPLETED | payments.succeeded |
| Any file | Any other code | Not final. | SUBMITTED | None |
- OCBC also sends NACK3 when your approvers reject a payment in Velocity. Acme does not read NACK3 yet.
Approval at the bank
- Files wait for your approvers in OCBC Velocity.
- OCBC sends no status file while a payment waits for approval. Payments stay
SUBMITTEDuntil then. - A payment your approvers reject in Velocity stays
SUBMITTED. Acme does not yet read OCBC's rejection file. Contact Acme to close the payment.
RHB Malaysia
Single payments only, by API through RHB Reflex. See the RHB Malaysia guide.
- Submit answer: final on
05,03or06, or when RHB refuses the request. - Status checks: every hour until final.
First answer
| RHB status | RHB meaning | Acme status |
|---|---|---|
01 | Successful | SUBMITTED |
02 | Successful with reason | SUBMITTED |
03 | Unsuccessful | FAILED |
04 | Pending pre-authorisation | SUBMITTED |
05 | Pre-authorisation posting successful | COMPLETED |
06 | Pre-authorisation unsuccessful | FAILED |
07 | Pre-authorisation timeout | SUBMITTED, with resultCode REQUEST_TIMEOUT |
| Error code from RHB Reflex | RHB rejected the request | FAILED |
| HTTP 4xx or 503 with no RHB code | RHB refused the request | FAILED |
| No answer, or another HTTP 5xx | Outcome not known | SUBMITTED, with resultCode REQUEST_TIMEOUT |
Later checks
Acme checks every hour. After a timeout, the first check is after 5 minutes.
| RHB status | RHB meaning | Acme status |
|---|---|---|
1, 11, 13, 18 | Pending, transmitting, pending status update, pending authoriser | SUBMITTED |
2, 3, 17 | Processed, successful, cycle completed | COMPLETED |
4, 7, 8, 10, 12, 19 | Unsuccessful, expired, aborted, stopped, rejected, rejected by authoriser | FAILED |
Approval at the bank
- Pre-authorisation (straight-through) is set for each account, on RHB's side and on Acme's.
- With pre-authorisation, RHB gives the final result in its first answer (
05or06). - Without it, the payment waits for your authorisers in RHB Reflex and stays
SUBMITTED. An authoriser rejection (19) fails the payment withresultCodeREJECTED_BY_APPROVER.
Standard Chartered
Single payments by API in Hong Kong, Singapore, the UK, India and the UAE. Batch payments by file in Singapore, the UK and India. See the Standard Chartered guides, for example Singapore API and Singapore H2H.
- Submit answer: final on
CompletedorRejected. - Notification or status checks: final on a completed or rejected code.
| Standard Chartered status | Acme status | What it means |
|---|---|---|
Completed in the first answer | COMPLETED | The payment is done. |
Pending in the first answer | PROCESSING | Not final. The result comes later. |
Rejected in the first answer | FAILED | Standard Chartered rejected the payment. |
| No answer (timeout) | PROCESSING | Acme confirms the result with Standard Chartered. |
| HTTP error, or an answer Acme cannot read | FAILED | For an HTTP 5xx or an unreadable answer, Standard Chartered may still have made the payment. Contact Acme before you retry the payment. |
2, 62 | PROCESSING | Pending. |
64 | COMPLETED | Processed and sent to the other bank. Not for Hong Kong FPS. |
64 for Hong Kong FPS | PROCESSING | Not final. Waits for 69. |
69 | COMPLETED | Completed. |
48 | FAILED | Returned. In Hong Kong, resultCode is RETURNED. Elsewhere it is OTHERS. |
10, 11, 12, 44, 46, 72, 75, 102 | FAILED | Rejected or stopped. |
- Standard Chartered reports later statuses by notification.
- For some payment types, Acme also checks the status with Standard Chartered.
- File sent: payments are
SUBMITTED. - ACK1: file checks.
- ACK2: report with only
ACCPorPDNGrows. Not final. - ACK3: report with any row other than
ACCPorPDNG. Final forACCP,ACSPandRJCTrows.PDNGrows wait.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| Any ACK | RJCT (file) | Standard Chartered rejected the whole file. | FAILED | payments.failed for each payment. payment-batches.rejected when the file has no status for each payment. |
| Any ACK | PDNG | Pending. | SUBMITTED | None |
| ACK2 | ACCP | Accepted. Not final. | SUBMITTED | None |
| ACK3 | ACCP, ACSP | Final acceptance. | COMPLETED | payments.succeeded |
| ACK3 | RJCT | Standard Chartered rejected the payment. | FAILED | payments.failed |
Approval at the bank
- Set up with Standard Chartered in Straight2Bank.
UOB Singapore and Malaysia
Single payments by API and batch payments by file. See the UOB Singapore guide and the UOB Malaysia guide.
- Submit answer: final on
000000or a rejection. - Status checks: debit notification, status enquiry, then transaction history search.
| UOB code | Acme status | What it means |
|---|---|---|
000000 | COMPLETED | UOB made the payment. |
| A code UOB lists as rejected, an HTTP 4xx, or a request never sent | FAILED | UOB rejected or never received the payment. |
| A pending or unknown code, or no answer | SUBMITTED | Acme checks with UOB for about 2 days. Then Acme's team confirms the result. |
| UOB has no record of the payment after repeated checks | FAILED | UOB did not receive the payment. |
| UOB credits the debit back | FAILED | The payment did not go through. |
- Submit answer: final on
000000or a rejection. - Status checks: status enquiry, with transaction history and debit notifications to confirm UOB has no record.
| UOB code | Acme status | What it means |
|---|---|---|
000000 | COMPLETED | UOB made the payment. |
U000, U002, U999, TM9998, TM9999, ER9998, ER9999, or no code | SUBMITTED | Not final. Acme checks with UOB. |
| No answer, or an HTTP 5xx | SUBMITTED | Acme checks with UOB for about 2 days. Then Acme's team confirms the result. |
| Any other code, an HTTP 4xx, or a request never sent | FAILED | UOB rejected or never received the payment. |
| UOB has no record of the payment after repeated checks | FAILED | UOB did not receive the payment. |
- File sent: payments are
SUBMITTED. - ACK1 to ACK4: each payment is final on its first
ACCPorRJCT.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| Any ACK | RJCT (file) | UOB rejected the whole file. | FAILED | payments.failed for each payment, and payment-batches.rejected |
| Any ACK | RJCT | UOB rejected the payment. | FAILED | payments.failed |
| Any ACK | ACCP | UOB accepted the payment. Final. | COMPLETED | payments.succeeded |
| Any ACK | Any other code | Not applied. | SUBMITTED | None |
- File sent: payments are
SUBMITTED. - ACK1: UOB received the file.
- ACK2: file checks.
- ACK3: accepted. Not final.
- O1 result file: final.
| ACK | Bank status | What it means | Acme payment status | Webhook |
|---|---|---|---|---|
| ACK1 | RCVD | UOB received the file. | SUBMITTED | None |
| ACK2, ACK3 | RJCT | UOB rejected the whole file. | FAILED | payments.failed for each payment, and payment-batches.rejected |
| ACK3 | ACTC, ACCP | Accepted. Not final. | SUBMITTED | None |
| O1 | Result 0 | The payment cleared. | COMPLETED | payments.succeeded |
| O1 | Result 1 | The payment did not clear. | FAILED | payments.failed |
Approval at the bank
- Files are sent straight-through or as interoperability files. Acme sets this for your organization.
- Approval rules in UOB Infinity are set up with UOB.
Zand UAE
Single payments only, by API. See the Zand UAE guide.
- Submit answer: final on
COMPLETED,PROCESSED,REJECTEDorREVERSED. - Zand notification: final.
| Zand status | Acme status | What it means |
|---|---|---|
INITIATED | PROCESSING | Zand is processing the payment. |
COMPLETED, PROCESSED | COMPLETED | The payment is done. |
REJECTED, REVERSED | FAILED | Zand rejected the payment, or reversed it before it completed. |
| HTTP error, no answer, or an answer Acme cannot read | FAILED | Zand may still have made the payment. Contact Acme before you retry the payment. |
- Acme does not check the status with Zand. If no notification comes, the payment stays
PROCESSING. Contact Acme to confirm the result.
Approval at the bank
- Set up with Zand.
ISO 20022 status codes
Many banks use ISO 20022 status codes:
| Code | Meaning |
|---|---|
RCVD | Received |
ACTC | Accepted after technical checks |
ACCP | Accepted after customer profile checks |
ACSP | Accepted, settlement in process |
ACSC | Accepted, settlement completed |
ACWC | Accepted with changes, for example a new date |
PDNG | Pending |
PART | Some payments in the file accepted |
RJCT | Rejected |
When a bank rejects a whole file (RJCT at file level), every payment in the batch usually moves to FAILED. Some banks also report each payment in a rejected file. The outcome can then differ by payment.
Batch file acknowledgements at a glance
For batch payments, each bank sends acknowledgement files (ACKs) for the file it receives. An acceptance is final only in the ACK this table names. A rejection can come earlier, except that CIMB applies a payment rejection only in PSR-2 or later, and Standard Chartered only in ACK3.
| Bank | ACK sequence | Final acceptance comes in |
|---|---|---|
| ANZ Australia | pain.002 status files | Any status file (ACSP) |
| CIMB Singapore | PSR-1 to PSR-10 | PSR-2 or later |
| Citibank | FILE → TXN | TXN (ACSP) |
| DBS Singapore | ACK1 → ACK2 → ACK3 | ACK3 |
| Deutsche Bank Singapore | One status file | The status file |
| HSBC | ACK1 → ACK2 → interim ACK2 (after approval in HSBCnet) → ACK3 and/or ACK4, by payment type | ACK3 or ACK4, by payment type |
| Maybank Singapore | ACK → RTN | RTN |
| OCBC Singapore | ACK1 or NACK1 → ACK2 or NACK2 → RET | RET |
| Standard Chartered | ACK1 → ACK2 → ACK3 | ACK3 |
| UOB Singapore and Malaysia | ACK1 → ACK2 → ACK3 → ACK4 | The first ACK with ACCP for the payment |
UOB Malaysia MY_DUITNOW and MY_IBFT | ACK1 → ACK2 → ACK3 → O1 | O1 |