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.
| Code | Reason | What it means |
|---|---|---|
R02 | Account Closed | The account was open at one point but has since been closed. |
R03 | No Account/Unable to Locate Account | The account number is well formed but does not match an open account or the name on the entry. |
R04 | Invalid Account Number Structure | The account number fails the receiving bank's format or check digit validation. |
R12 | Account Sold to Another DFI | The account has moved to a different financial institution. |
R13 | Invalid ACH Routing Number | The routing number is not a valid ACH routing number. |
R20 | Non-Transaction Account | The account type does not allow ACH transactions, such as some savings accounts. |
R28 | Routing Number Check Digit Error | The routing number fails its check digit validation. |
R34 | Limited Participation DFI | The receiving bank is restricted from taking part in ACH. |
R45 | Invalid Individual / Company Name | The name on the entry is not valid for the receiving account. |
Account holder and legal restrictions
Do not pay the account again until the payee has resolved the issue with their bank.
| Code | Reason | What it means |
|---|---|---|
R14 | Representative Payee Deceased or Unable to Continue in That Capacity | The representative payee on the account can no longer act for the beneficiary. |
R15 | Beneficiary or Account Holder Deceased | The beneficiary or account holder has died. |
R16 | Account Frozen/Entry Returned per OFAC Instruction | The account is frozen, or the entry was returned on a sanctions instruction. |
R23 | Credit Entry Refused by Receiver | The account holder refused the credit. |
Funds and authorization
These are most common on debits.
| Code | Reason | What it means |
|---|---|---|
R01 | Insufficient Funds | The available balance was not enough to cover the entry. |
R05 | Unauthorized Debit to Consumer Account Using Corporate SEC Code | A consumer account was debited using an entry type meant for business accounts. |
R07 | Authorization Revoked by Customer | The account holder revoked the authorization for this entry. |
R08 | Payment Stopped | The account holder placed a stop payment on this entry. |
R09 | Uncollected Funds | The ledger balance covers the entry, but the collected balance does not. |
R10 | Customer Advises Unauthorized, Improper, Ineligible, or Part of an Incomplete Transaction | The account holder says they did not authorize the entry, or that it was improper. |
R29 | Corporate Customer Advises Not Authorized | A business account holder says they did not authorize the entry. |
R31 | Permissible 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.
| Code | Reason | What it means |
|---|---|---|
R06 | Returned per ODFI's Request | The originating bank asked for the entry to be returned. |
R11 | Check Truncation Early Return | A check truncation entry was returned early. |
R17 | File Record Edit Criteria | A field in the entry could not be processed by the receiving bank. |
R18 | Improper Effective Entry Date | The entry's effective date was not valid. |
R19 | Amount Field Error | The amount was invalid, for example zero on an entry that requires an amount. |
R21 | Invalid Company Identification | The company identification on the entry is not valid. |
R22 | Invalid Individual ID Number | The individual identification number on the entry is not valid. |
R24 | Duplicate Entry | The receiving bank believes the entry duplicates one it already received. |
R25 | Addenda Error | The addenda record on the entry was invalid. |
R26 | Mandatory Field Error | A required field on the entry was missing or invalid. |
R27 | Trace Number Error | The entry's trace number was invalid. |
R30 | RDFI Not Participant in Check Truncation Program | The receiving bank does not take part in the check truncation program. |
R32 | RDFI Non-Settlement | The receiving bank could not settle the entry. |
R33 | Return of XCK Entry | A destroyed check entry was returned. |
R35 | Return of Improper Debit Entry | A debit was sent to an account or entry type that does not allow debits. |
R36 | Return of Improper Credit Entry | A credit was sent on an entry type that does not allow credits. |
R37 | Source Document Presented for Payment | The check behind the entry was also presented for payment. |
R38 | Stop Payment on Source Document | A stop payment was placed on the check behind the entry. |
R39 | Improper Source Document/Source Document Presented for Payment | The 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.