Payment Returns, Reversals, and Recalls: pacs.004, pacs.007, and camt.056
Written by Ahmed at Analyst Engineering, a Senior Technical Business Analyst with 10+ years in banking and payments delivery.
Key takeaways
- ISO 20022 separates three ways money comes back: a return (pacs.004) initiated by the receiving side because the payment cannot be applied, a reversal (pacs.007) initiated by the sending side to unwind its own instruction, and a recall (camt.056) which is a request that the other side may refuse.
- The recall is the one that is not a payment message at all: camt.056 asks, camt.029 answers, and money only moves if the answer is yes, via a return.
- Every exception flow must preserve the original payment's identifiers, above all the UETR, or the return arrives as unmatched money and becomes a reconciliation break.
- Modeling all three as one generic 'failed payment' state is the classic analysis mistake: they have different initiators, directions, reason codes, and customer conversations.
Once a payment has left, there are three different ways to get the money back, and ISO 20022 keeps them strictly apart: the receiver sends it back (return), the sender unwinds it (reversal), or the sender asks nicely and waits for an answer (recall). Collapsing the three into one “failed payment” state is how ledgers, customer messages, and reconciliations all go wrong at once.
ISO 20022 models the after-settlement failure world, what operations teams call exceptions and investigations, with three distinct mechanisms. A return travels as a pacs.004: the receiving side cannot or will not apply the funds and sends them back, a new movement in the opposite direction. A reversal travels as a pacs.007: the sending side unwinds an instruction it now knows was wrong, a duplicate being the classic case. A recall starts as a camt.056, which is not a payment message at all but a cancellation request, answered by a camt.029, and only becomes moving money if the answer is yes. The PAIN vs pacs article warned against modeling returns and reversals as one generic failure; this is the full picture of why, and of what an analyst must specify for each.
Returns vs reversals vs recalls at a glance
| Dimension | Return (pacs.004) | Reversal (pacs.007) | Recall (camt.056 / camt.029) |
|---|---|---|---|
| Who initiates | Receiving side | Sending side | Sending side, as a request |
| Why | Funds cannot or will not be applied | Sender’s own error to unwind | Fraud, duplicate, technical error |
| Is money moving? | Yes, back to the debtor side | Yes, unwinding the original | Not yet: only if the answer is yes |
| Answer message | None needed: it is the action | None needed: it is the action | camt.029 resolution, accept or refuse |
| Typical reason codes | AC04, AC06, MS02/MS03, scheme set | Duplication and error codes per scheme | DUPL, TECH, FRAD, plus scheme set |
| Certainty of outcome | Certain: funds are coming back | Certain: sender is unwinding | Uncertain: consent may be refused |
| Time criticality | Scheme-defined return windows | Prompt, per scheme rules | Extreme for FRAD: odds decay hourly |
| MT-era ancestor | MT103 RETN conventions | Reversal conventions | MT192/292 with MT196/296 answers |
What makes each flow its own analysis problem?
Returns look simple, money comes back, and hide two hard requirements. The pacs.004 must reference the original payment, carrying its identifiers including the UETR, because a return that arrives without a clean link to its original is unmatched money: it lands in a suspense account, generates a reconciliation break, and consumes an investigator’s afternoon. And the return reason code drives a customer conversation: AC04 on a return means the beneficiary account closed after your customer sent the money, which is a different message than a rejection ever produces, and the reason-code-to-message mapping must cover the return set, not just the rejection set.
Reversals are the sender admitting error, and their analysis center is idempotency’s aftermath: the duplicate that a pacs.007 unwinds is exactly the double-processing that idempotency testing exists to prevent. Specifying reversals means specifying the ledger behavior, the original entry, the reversing entry, their linkage, and what the customer sees for a payment that existed and then un-existed, a state machine transition that many status models forget to include, and one that must be impossible from terminal states it should never leave.
Recalls are the interesting one, because the mechanism is a conversation, not a command. The camt.056 asks; the receiving bank investigates, often needing its customer’s consent since banks cannot simply claw settled funds off an account in most regimes; the camt.029 answers accepted or refused with a reason; and acceptance produces a pacs.004 to actually move the money. That makes the recall a multi-message, multi-day flow with an uncertain outcome, whose states, requested, pending, accepted, refused, expired, belong explicitly in the payment’s lifecycle model. FRAD recalls add brutal time pressure: fraud recovery odds decay by the hour, which turns the recall path’s latency into an operational requirement, not a nicety, and makes the recall queue something that gets monitored like a DLQ, never left to rot.
How does an analyst specify and test this properly?
Model the exception space as transitions in the payment state machine: settled-then-returned, settled-then-recall-requested, recall-accepted, recall-refused, reversed, each with its trigger message, its reason code set per the scheme’s rulebook, its ledger effect, and its customer-facing rendering. Then test it like the QA analyst the flow deserves: inject a return and assert the original is matched by UETR and the status lands correctly; run a recall through accept and refuse branches and assert the camt.029 handling on both; attempt the illegal transitions, a return against a payment that never settled, a second return of the same funds, and prove they are blocked. The exception flows are where production incidents concentrate precisely because they get a fraction of the happy path’s design attention; giving them equal rigor is what separates a payment platform that survives its first fraud recall from one that improvises it.
The takeaway
ISO 20022 keeps three comebacks apart: the return (pacs.004, receiver sends funds back), the reversal (pacs.007, sender unwinds), and the recall (camt.056 request, camt.029 answer, money only on yes). They differ in initiator, certainty, reason codes, ledger impact, and urgency, so they must be modeled as distinct lifecycle transitions with their identifiers preserved end to end. Design and test them with the happy path’s rigor, because the exception flows are where the money, and the incidents, actually are.
About the author
Analyst Engineering is written by Ahmed, a Senior Technical Business Analyst with 10+ years of banking and payments delivery experience: ISO 20022 and SWIFT messaging, payments API integration, Kafka event validation, and production support. Every article comes from real delivery work, and each one is reviewed and updated as tools and standards change.
Related articles
- PAIN vs pacs in ISO 20022: The Difference Every Payments Analyst Should Know PAIN vs pacs explained: why pain.001 is not pacs.008, how pain.002 and pacs.002 mirror it, where camt fits, and how ISO 20022 splits customer and bank.
- ISO 20022 Reason Codes: AC01 to RR04, the Rejection Codes That Matter The ISO 20022 reason codes analysts meet daily: account codes (AC01, AC04, AC06), amount codes (AM04, AM05), agent and regulatory codes, with the action each implies.
- Reconciliation Design: Proving Two Systems Agree How to design reconciliation between systems: matching keys, break detection, tolerance, timing, and exception handling. The control that proves the money is right.
- State Machines for Payments: Every Status, Every Transition How to model a payment as a state machine: define the states, the allowed transitions, the triggers, and the illegal moves. The tool that makes status behavior precise.
Newsletter
Subscribe
Practical, no-fluff playbooks for technical analysts who analyze, code, test, and support. New articles straight to your inbox.
No spam. Unsubscribe anytime.