Reference

Why payouts fail, by rail: a reference

ACH return codes, SEPA reason codes, wire rejections and push-to-card declines — what each means, which are retryable, and how long you wait to find out.

A blueprint schematic of five payment rails drawn as parallel mint lines labelled ACH, SEPA, Faster Payments, wire and push to card, each carrying a violet return marker with its failure code, and a dimension line noting that failure notice takes minutes to days.

A failed payout has two costs: the money not arriving, and the time before anyone knows. The second varies enormously by rail, and it is what determines how you should handle failures.

The rails, compared

RailTypical notification of failureReason detailRetryable failures
ACHDaysCoded (R-codes)Some
SEPADaysCoded (ISO 20022)Some
Faster PaymentsNear-immediate for rejectionModerateSome
Wire / SWIFTVariable, can be daysPoor — free textRarely
Push to cardNear-immediateModerateSome
Internal transferImmediateFullDepends

The pattern: the faster the rail, the faster you learn it failed. ACH and SEPA are the ones that let a payment look successful for days and then unwind.

ACH return codes

The most common returns. Codes are set by the receiving institution.

CodeMeaningRetry
R01Insufficient funds⏳ After a delay
R02Account closed❌ Permanent
R03No account / unable to locate❌ New details needed
R04Invalid account number❌ New details needed
R05Unauthorised debit to consumer account❌ Authorisation problem
R06Returned at originator’s request—
R07Authorisation revoked❌ Stop
R08Payment stopped❌ Stop
R09Uncollected funds⏳ Balance present but not available
R10Customer advises not authorised❌ Dispute
R16Account frozen❌ Do not retry
R20Non-transaction account❌ Wrong account type
R29Corporate customer advises not authorised❌ Authorisation problem

The distinction that matters: R01 and R09 describe a balance at a moment. Everything else describes the account itself, and no retry changes an account.

The timing trap. Administrative returns are typically raised within a couple of business days, but not all return types are, and unauthorised-return windows are much longer. A payment can be marked settled, reconciled, and closed — and then returned.

SEPA reason codes

ISO 20022 codes, used across SEPA credit transfers and direct debits.

CodeMeaningRetry
AC01Incorrect account number❌ New details
AC04Closed account❌ New details
AC06Blocked account❌ Stop
AG01Transaction forbidden❌ Stop
AG02Invalid bank operation code❌ Fix the instruction
AM04Insufficient funds⏳ After a delay
AM05Duplicate❌ Investigate before resending
BE04Missing creditor address⚠️ Fix and resend
MD07Debtor deceased❌ Stop
MS02Refused by customer❌ Stop
MS03Reason not specified⚠️ Contact the bank
RC01Bank identifier incorrect⚠️ Fix and resend
RR01–RR04Missing regulatory information⚠️ Fix and resend

BE04 and RR01–RR04 are the ones worth designing for. They mean the payment was well-formed but incomplete, and they are increasingly common as structured data requirements tighten. They are fixable and they are not the recipient’s fault.

Faster Payments and Confirmation of Payee

Rejections are quick, which is the main advantage.

The failure type unique to this rail is the name mismatch: the account details are valid but the name does not match what the receiving bank holds. It arrives as a warning before sending rather than as a return afterwards, which is better — but only if something surfaces it to a person who can act.

A partial match is the ambiguous case. A Smith against Alan Smith is probably fine; A Smith against Smith Building Ltd is probably a personal account being paid for a company invoice, which is worth a question.

Wire and SWIFT

The worst rail for diagnosing a failure, because rejection reasons arrive as free text from whichever institution in the chain refused.

Common causes:

  • Invalid or wrong BIC — the identifier does not route.
  • Missing intermediary details for a corridor requiring one.
  • Sanctions screening at a correspondent bank, which may hold rather than reject, with no notification.
  • Incomplete originator information, increasingly enforced.

A wire that has not arrived and has not been returned is the hardest case in payments. It is somewhere in a chain, and tracing it means asking your bank to trace it. Budget days.

Push to card

Near-immediate, which makes it the easiest to handle.

  • Issuer decline — the receiving issuer refused; often reason-coded but not always usefully.
  • Non-participating card — the card does not support receiving pushes.
  • Card expired or closed — permanent for that card.

Fallback matters more than retry here. A push-to-card failure usually means this card cannot receive, so the recovery is another method rather than another attempt.

Handling: five rules

  1. Store the reason code, not “failed”. Every retry decision, every report and every support answer depends on it. A boolean loses all of it.
  2. Retry only condition-based codes, on a delay. R01, R09, AM04. Nothing else.
  3. Never retry account-based codes. They will not succeed, and repeated attempts against blocked or frozen accounts attract compliance attention.
  4. Treat late returns as normal, not exceptional. If a payable can be closed before the return window has passed, design for reopening it.
  5. Route fixable rejections to a person. BE04, RC01, RR01–RR04 mean the instruction was incomplete. A human fixes those in a minute; an automated retry sends the same broken instruction again.

What this costs when it is not handled

The failure itself is minor. The state divergence is not.

A payment that failed and was recorded as sent leaves a supplier unpaid, a payable closed, and a bank balance that will not agree. Nobody discovers it from the payment system — it surfaces weeks later as a supplier chasing, or as a reconciliation difference nobody can explain.

At ten payments a run this is rare. At two hundred it happens every cycle, which is why batch payment runs need a confirmation step that compares what settled against what was sent.

Where Fynex fits

Fynex keeps the payment attached to what it was meant to settle, so a failure is visible as a specific unpaid invoice rather than as a difference discovered later.

A return arriving four days after a run reopens the invoice it was paying, at the point the return arrives. Retries follow the reason code rather than a fixed schedule. Fixable rejections surface as exceptions with the field that needs correcting, instead of as a generic failure in a log.

Related: Payment decline codes · How to pay many suppliers at once · Faster Payments vs BACS vs CHAPS · Payouts

FAQ

Frequently asked questions

Longer than most systems assume, and this is the operational problem rather than the failure itself. Administrative returns such as a closed account or an invalid account number are typically raised within a couple of business days, but some return types can arrive considerably later, and unauthorised-debit returns have a much longer window. The practical consequence is that money can appear to have been sent successfully, the payable can be marked settled, and a return can arrive after your books have moved on.
R01 is insufficient funds — the receiving account did not have the balance to cover the entry. It is a soft failure in the sense that the account exists and is open, so a retry after a delay can succeed. It is distinct from R02, account closed, and R03, no account or unable to locate account, which are permanent for that account and should never be retried. Treating all returns the same way is the most common handling error, since it retries the permanent ones and gives up on the recoverable ones.
AC04 means the account is closed. The account number was valid and identifiable, but the account no longer exists, so the payment cannot be delivered and is returned. It is permanent for that account and retrying achieves nothing — the recipient has to supply new details. It differs from AC01, incorrect account number, where the identifier itself is wrong, and from AC06, blocked account, where the account exists and is prevented from receiving.
Only where the reason code indicates a condition that can change. Insufficient funds, a temporarily unavailable institution and some technical rejections are worth an automatic retry after a delay. A closed account, an invalid identifier, a blocked account or a sanctions-related rejection will never succeed on retry, and automated retries against them generate cost, noise and sometimes compliance attention. The reason code is the input to that decision, which means it has to be stored rather than summarised as failed.
Book a demo