pacs.004 โ PaymentReturn
Overviewโ
pacs.004 is the interbank payment return message. It is sent by the Creditor Bank back to the Debtor Bank when a previously received pacs.008 credit transfer cannot be applied to the beneficiary's account. The message carries the original payment details and the reason why funds are being returned.
- Full name:
PaymentReturnV10 - Namespace:
urn:iso:std:iso:20022:tech:xsd:pacs.004.001.10 - Direction: Creditor Bank โ (Network) โ Debtor Bank
- Triggered by: Failed credit application after
pacs.008received
โ ๏ธ A
pacs.004means funds have already moved to the creditor bank and are now being sent back. This is different from apacs.002 RJCTwhich means funds were never applied in the first place.
pacs.004 in Contextโ
ORIGINAL PAYMENT:
Debtor Bank โโ[pacs.008]โโโโโโโโโโโโโโโโโโโโโโโโโโโบ Creditor Bank
โโโ[pacs.002 ACSP]โโโโโโโโโโโโโโโโโโโโโโ (accepted, settling)
RETURN (when credit fails):
Creditor Bank โโ[pacs.004]โโโโโโโโโโโโโโโโโโโโโโโโโบ Debtor Bank
(funds sent back)
Message Structureโ
pacs.004
โโโ GrpHdr (Group Header) โ 1..1
โ โโโ MsgId Unique return message ID
โ โโโ CreDtTm Timestamp
โ โโโ NbOfTxs Number of transactions being returned
โ โโโ TtlRtrdIntrBkSttlmAmt Total returned settlement amount
โ โโโ IntrBkSttlmDt Return settlement date
โ โโโ SttlmInf Settlement details for the return
โ
โโโ TxInf (Transaction Information) โ 1..n
โโโ RtrId Return transaction ID (new, unique)
โโโ OrgnlGrpInf References to original message
โ โโโ OrgnlMsgId pacs.008 MsgId
โ โโโ OrgnlMsgNmId "pacs.008.001.10"
โโโ OrgnlInstrId Original InstrId (from pacs.008)
โโโ OrgnlEndToEndId Original EndToEndId (preserved)
โโโ OrgnlTxId Original TxId (from pacs.008)
โโโ OrgnlUETR Original UETR (SWIFT payments)
โโโ RtrdIntrBkSttlmAmt Ccy="AUD" Amount being returned
โโโ IntrBkSttlmDt Settlement date for return
โโโ RtrdInstdAmt Ccy="AUD" Original instructed amount
โโโ ChrgBr Charge bearer for return
โโโ RtrChain Return payment chain info
โ โโโ Assgnr Who is returning (creditor bank)
โ โโโ Assgne Who receives return (debtor bank)
โโโ RtrRsnInf Return reason
โ โโโ Orgtr Who initiated the return
โ โโโ Rsn โ Cd Reason code (e.g., AC04)
โโโ OrgnlTxRef Key fields echoed from original
โ โโโ Dbtr Original debtor
โ โโโ DbtrAcct Original debtor account
โ โโโ Cdtr Original creditor
โ โโโ CdtrAcct Original creditor account
โโโ SplmtryData Optional supplementary data
Return Reason Codesโ
These are the ISO 20022 standard reason codes for pacs.004:
Account Issuesโ
| Code | Reason | Description |
|---|---|---|
AC01 | Incorrect Account Number | Account does not exist |
AC03 | Invalid Creditor Account Type | Account cannot receive this payment type |
AC04 | Closed Account Number | Account has been closed |
AC05 | Closed Debtor Account Number | Debtor account closed (less common in returns) |
AC06 | Blocked Account | Account is frozen/blocked |
AC13 | Invalid Debtor Account Type | Account type not appropriate |
Amount Issuesโ
| Code | Reason | Description |
|---|---|---|
AM09 | Wrong Amount | Amount is incorrect per agreement |
AM10 | Invalid Control Sum | Control sum does not match |
AM14 | Amount exceeds agreed maximum | Over limit |
Creditor-Initiated Returnsโ
| Code | Reason | Description |
|---|---|---|
CUST | Requested by Customer | Beneficiary requests return of funds |
DUPL | Duplicate Payment | Beneficiary received same payment twice |
FOCR | Following Cancellation Request | Response to a camt.056 recall request |
MD06 | Refusal by End Customer | Beneficiary refuses the credit |
MS02 | Not Specified Reason Customer Generated | Unspecified customer reason |
MS03 | Not Specified Reason Agent Generated | Unspecified bank reason |
Regulatory & Complianceโ
| Code | Reason | Description |
|---|---|---|
RR01 | Missing Debtor Account or ID | Regulatory โ missing info |
RR02 | Missing Debtor Name or Address | Regulatory โ missing info |
RR03 | Missing Creditor Name or Address | Regulatory โ missing info |
RR04 | Regulatory Reason | Sanction/compliance block |
Technicalโ
| Code | Reason | Description |
|---|---|---|
FF01 | Invalid File Format | Message format error |
NARR | Narrative | Free-text reason (use sparingly) |
pacs.004 Return Flowโ
Scenario: Creditor Account Closedโ
Day 1:
Debtor Bank โโ[pacs.008]โโโโโโโโโโโโโโโโโโโโโโโโโโโบ Creditor Bank
โโโ[pacs.002 ACSP]โโโโโโโโโโโโโโโโโโโโโโ
RBA settles ESA funds โโโโโโโโโโโโโโโโโโบ
Day 1โ5 (within return window):
Creditor Bank discovers account AC04 (closed)
Creditor Bank โโ[pacs.004 AC04]โโโโโโโโโโโโโโโโโโโบ Debtor Bank
Return settlement via same scheme
Debtor Bank:
โโโ Receives pacs.004
โโโ Credits customer account (return of debit)
โโโ Sends camt.054 (CRDT, RvslInd=false, narrative "Return of payment")
โโโ Sends pain.002 status update to customer (if applicable)
Return Windows (Maximum Time Allowed)โ
| Scheme | Return Window | Notes |
|---|---|---|
| NPP (AU) | 14 calendar days | Per NPP scheme rules |
| BECS/DE (AU) | 5 business days | Dishonour window |
| SWIFT | 10 business days (guideline) | No hard legal maximum |
| SEPA (EU) | D+5 business days | EC Payment Services Directive |
After the return window, the creditor bank can no longer force a return through the scheme. Manual bilateral recovery is needed.
pacs.004 vs pacs.002 RJCTโ
This is one of the most important distinctions in payments:
| pacs.002 RJCT | pacs.004 | |
|---|---|---|
| Timing | Before or at settlement | After settlement |
| Funds moved? | โ No โ payment blocked | โ Yes โ funds already at creditor bank |
| Who sends it | Clearing network or creditor bank | Creditor bank only |
| Trigger | Validation failure | Credit application failure |
| Debtor action | Release debit hold / reverse | Await return settlement |
| Customer impact | No funds left | Funds temporarily at other bank |
Receiving a pacs.004 โ Debtor Bank Processingโ
Receive pacs.004
โ
โผ
Extract OrgnlTxId
โ
โผ
Find original PaymentOrder by TxId
โ
โผ
Verify return amount = original amount
(or note partial return if different)
โ
โผ
Post CREDIT to debtor's account
(return of original debit)
โ
โผ
Update payment status โ RETURNED
โ
โผ
Record return reason code
โ
โผ
Generate camt.054 (CRDT) to customer
โ
โผ
If original payment was on behalf of a customer's
pain.001, generate pain.002 update (RJCT or RTRN)
โ
โผ
Close reconciliation record
Partial Returnsโ
In some cases (e.g., charges deducted), the return amount may be less than the original:
<RtrdIntrBkSttlmAmt Ccy="AUD">985.00</RtrdIntrBkSttlmAmt>
<!-- Original was 1000.00 โ 15.00 deducted as correspondent fee -->
<RtrdInstdAmt Ccy="AUD">1000.00</RtrdInstdAmt>
<!-- Original instructed amount preserved for reference -->
This is most common on SWIFT payments where intermediary banks have deducted charges, and ChrgBr = CRED.
Sample pacs.004 XMLโ
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.004.001.10">
<PmtRtr>
<GrpHdr>
<MsgId>RTN-20240616-CBA-001</MsgId>
<CreDtTm>2024-06-16T09:30:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<TtlRtrdIntrBkSttlmAmt Ccy="AUD">2500.00</TtlRtrdIntrBkSttlmAmt>
<IntrBkSttlmDt>2024-06-16</IntrBkSttlmDt>
<SttlmInf>
<SttlmMtd>CLRG</SttlmMtd>
</SttlmInf>
</GrpHdr>
<TxInf>
<RtrId>RTNID-20240616-001</RtrId>
<OrgnlGrpInf>
<OrgnlMsgId>PACS008-ANZ-20240615-001</OrgnlMsgId>
<OrgnlMsgNmId>pacs.008.001.10</OrgnlMsgNmId>
</OrgnlGrpInf>
<OrgnlTxId>TX-UUID-001</OrgnlTxId>
<OrgnlEndToEndId>E2E-CUST-REF-001</OrgnlEndToEndId>
<RtrdIntrBkSttlmAmt Ccy="AUD">2500.00</RtrdIntrBkSttlmAmt>
<RtrRsnInf>
<Rsn><Cd>AC04</Cd></Rsn>
</RtrRsnInf>
<OrgnlTxRef>
<Dbtr><Nm>Acme Corp</Nm></Dbtr>
<DbtrAcct><Id><Othr><Id>111222333</Id></Othr></Id></DbtrAcct>
<Cdtr><Nm>Jane Smith</Nm></Cdtr>
<CdtrAcct><Id><Othr><Id>999888777</Id></Othr></Id></CdtrAcct>
</OrgnlTxRef>
</TxInf>
</PmtRtr>
</Document>
Java Spring Notesโ
@Service
public class Pacs004ProcessingService {
@Transactional
public ReturnResult processReturn(PaymentReturnV10 pacs004) {
for (var txInf : pacs004.getTxInf()) {
// 1. Find original payment
PaymentOrder original = paymentRepository
.findByTxId(txInf.getOrgnlTxId())
.orElseThrow(() -> new PaymentNotFoundException(
txInf.getOrgnlTxId()));
// 2. Validate return amount
BigDecimal returnAmt = txInf.getRtrdIntrBkSttlmAmt().getValue();
BigDecimal origAmt = original.getSettlementAmount();
boolean isPartial = returnAmt.compareTo(origAmt) < 0;
// 3. Post credit to debtor account
String creditRef = ledgerService.postCredit(
original.getDebtorAccountId(),
returnAmt,
"RTN:" + txInf.getRtrRsnInf().get(0).getRsn().getCd().value()
);
// 4. Update original payment status
original.setStatus(PaymentStatus.RETURNED);
original.setReturnReasonCode(
txInf.getRtrRsnInf().get(0).getRsn().getCd().value());
original.setReturnDate(LocalDate.now());
original.setReturnRef(txInf.getRtrId());
if (isPartial) {
original.setReturnedAmount(returnAmt);
original.setShortfallAmount(origAmt.subtract(returnAmt));
}
paymentRepository.save(original);
// 5. Notify customer via camt.054
notificationService.sendReturnNotification(original, txInf);
// 6. Reconciliation
reconciliationService.matchReturn(original, pacs004);
}
return ReturnResult.success();
}
}
Related Conceptsโ
- pain.004 Clarification โ Why pain.004 doesn't exist (common confusion)
- pain.007 and pacs.007 โ Payment reversal/recall (debtor-initiated)
- camt.055 and camt.056 โ Cancellation request that triggers a return
- pacs.008 โ The original payment message being returned
- Payment Return โ Accounting treatment of return
- Inbound Payments โ When a creditor bank initiates a return
- Payment Exceptions โ Returns as exception handling
- Off-Us Transactions โ Most interbank returns occur in off-us flows