Skip to main content

ACH Return Codes

When the receiving bank sends back an ACH payment, the CounterpartyPayoutReturned webhook carries the bank's return code in returnCode and its reason in returnReason. The payout amount is available on the counterparty balance again.

returnCode and returnReason are null when a payout ends without a bank return, for example when it fails or is cancelled before it is sent. Read status to tell these cases apart.

Some codes apply only to debits or to specific entry types. They are listed so you can handle every code you might receive.

Account and routing problems​

These usually mean the payee's bank details need to change. Confirm the details with the payee before paying the same account again.

CodeReasonWhat it means
R02Account ClosedThe account was open at one point but has since been closed.
R03No Account/Unable to Locate AccountThe account number is well formed but does not match an open account or the name on the entry.
R04Invalid Account Number StructureThe account number fails the receiving bank's format or check digit validation.
R12Account Sold to Another DFIThe account has moved to a different financial institution.
R13Invalid ACH Routing NumberThe routing number is not a valid ACH routing number.
R20Non-Transaction AccountThe account type does not allow ACH transactions, such as some savings accounts.
R28Routing Number Check Digit ErrorThe routing number fails its check digit validation.
R34Limited Participation DFIThe receiving bank is restricted from taking part in ACH.
R45Invalid Individual / Company NameThe name on the entry is not valid for the receiving account.

Do not pay the account again until the payee has resolved the issue with their bank.

CodeReasonWhat it means
R14Representative Payee Deceased or Unable to Continue in That CapacityThe representative payee on the account can no longer act for the beneficiary.
R15Beneficiary or Account Holder DeceasedThe beneficiary or account holder has died.
R16Account Frozen/Entry Returned per OFAC InstructionThe account is frozen, or the entry was returned on a sanctions instruction.
R23Credit Entry Refused by ReceiverThe account holder refused the credit.

Funds and authorization​

These are most common on debits.

CodeReasonWhat it means
R01Insufficient FundsThe available balance was not enough to cover the entry.
R05Unauthorized Debit to Consumer Account Using Corporate SEC CodeA consumer account was debited using an entry type meant for business accounts.
R07Authorization Revoked by CustomerThe account holder revoked the authorization for this entry.
R08Payment StoppedThe account holder placed a stop payment on this entry.
R09Uncollected FundsThe ledger balance covers the entry, but the collected balance does not.
R10Customer Advises Unauthorized, Improper, Ineligible, or Part of an Incomplete TransactionThe account holder says they did not authorize the entry, or that it was improper.
R29Corporate Customer Advises Not AuthorizedA business account holder says they did not authorize the entry.
R31Permissible Return Entry (CCD and CTX Only)The originating bank agreed to accept a late return of a business entry.

Entry and processing errors​

These point to a problem with how the entry was built or processed, not with the payee's account.

CodeReasonWhat it means
R06Returned per ODFI's RequestThe originating bank asked for the entry to be returned.
R11Check Truncation Early ReturnA check truncation entry was returned early.
R17File Record Edit CriteriaA field in the entry could not be processed by the receiving bank.
R18Improper Effective Entry DateThe entry's effective date was not valid.
R19Amount Field ErrorThe amount was invalid, for example zero on an entry that requires an amount.
R21Invalid Company IdentificationThe company identification on the entry is not valid.
R22Invalid Individual ID NumberThe individual identification number on the entry is not valid.
R24Duplicate EntryThe receiving bank believes the entry duplicates one it already received.
R25Addenda ErrorThe addenda record on the entry was invalid.
R26Mandatory Field ErrorA required field on the entry was missing or invalid.
R27Trace Number ErrorThe entry's trace number was invalid.
R30RDFI Not Participant in Check Truncation ProgramThe receiving bank does not take part in the check truncation program.
R32RDFI Non-SettlementThe receiving bank could not settle the entry.
R33Return of XCK EntryA destroyed check entry was returned.
R35Return of Improper Debit EntryA debit was sent to an account or entry type that does not allow debits.
R36Return of Improper Credit EntryA credit was sent on an entry type that does not allow credits.
R37Source Document Presented for PaymentThe check behind the entry was also presented for payment.
R38Stop Payment on Source DocumentA stop payment was placed on the check behind the entry.
R39Improper Source Document/Source Document Presented for PaymentThe check behind the entry was improper, or was also presented for payment.

Testing return codes in sandbox​

In sandbox, a payout to a counterparty whose externalBankAccount.accountNumber is 100XX is returned with code RXX. For example, 10001 returns R01 and 10003 returns R03. See the Sandbox guide for the full steps.