Skip to content

ACH return codes: the complete list, in plain language

ACH return codes tell you why an entry came back. This is the complete list of the standard codes, what each one means in plain language, and what to do next, because different returns need different responses and blindly retrying can create more problems.

What are ACH return codes?

When a bank cannot post an ACH entry, or its customer rejects it, the bank sends the entry back through the network with a standardized reason attached. That reason is the return code: an R followed by two digits, with a fixed meaning that every bank on the network shares. Nacha, the body that governs the ACH network, maintains the list.

The code matters because it tells you two things at once: what went wrong, and what you are allowed to do about it. Some returns invite a corrected retry. Some forbid any retry until the recipient acts. A few are signals to stop entirely and escalate.

If you already have a code in hand and just need the answer, the ACH return code lookup tool gives the meaning and next step in one search. The table below is the same material in full.

Complete ACH return code list

CodeNameWhat it meansNext step
R01Insufficient fundsThe available balance could not cover the debit entry.Retry later, within your bank’s rules
R02Account closedA previously open account has been closed.Get new account details
R03No account / unable to locate accountThe account number passes format checks but does not match an open account.Verify details with the recipient
R04Invalid account number structureThe account number fails the receiving bank’s format checks.Correct the account number
R05Unauthorized debit, corporate code on consumer accountA business-coded debit hit a consumer account without authorization.Stop and obtain proper authorization
R06Returned per ODFI’s requestThe originating bank asked the receiving bank to send the entry back.Coordinate with your bank
R07Authorization revoked by customerThe consumer revoked the authorization behind the debit.Stop debits until reauthorized
R08Payment stoppedThe receiver placed a stop payment on the entry.Contact the recipient before retrying
R09Uncollected fundsThe balance exists on paper but the funds have not cleared yet.Retry after funds clear
R10Customer advises not authorizedThe consumer says they did not authorize the debit or do not know the originator.Stop and treat as a dispute
R11Entry not in accordance with authorizationAn authorization exists, but the entry differs from its terms, such as amount or date.Fix the error, then reinitiate if allowed
R12Account sold to another DFIThe account was transferred to a different bank.Get the new bank details
R13Invalid ACH routing numberThe entry carries a routing number that is not valid.Correct the routing number
R14Representative payee deceased or unable to continueThe person receiving payments on the beneficiary’s behalf has died or can no longer act.Confirm who should be paid now
R15Beneficiary or account holder deceasedThe beneficiary or the account holder is deceased.Stop payments and escalate
R16Account frozen / OFAC instructionFunds are unavailable due to legal action, or OFAC has instructed the return.Do not retry; escalate to compliance
R17File record edit criteria / questionable entryA field fails the receiving bank’s checks, or the bank is flagging the entry as questionable.Verify details; treat as a fraud signal
R20Non-transaction accountThe account does not accept ACH entries, or transaction limits apply.Get a transaction account instead
R21Invalid company identificationThe company identification in the entry is not valid.Correct the company ID
R22Invalid individual ID numberThe individual ID does not match the receiver’s records.Correct the ID number
R23Credit entry refused by receiverThe account holder declined the incoming payment, for example a wrong amount or an account in dispute.Contact the recipient, then resend
R24Duplicate entryThe receiving bank got what looks like a duplicate of an earlier entry.Confirm what has already been paid
R29Corporate customer advises not authorizedA business receiver says the debit was not authorized.Stop and obtain authorization
R31Permissible return entryA corporate entry is being returned late, with the originating bank’s agreement.Coordinate with your bank
R33Return of XCK entryA destroyed-check entry is being returned.Collect by other means

Codes in the R80s exist too, but they apply to international (IAT) entries. A domestic payout program rarely sees them. If one shows up, it usually traces to a gateway handling a cross-border leg, and your bank or processor is the right first call.

Most common ACH return codes

R01: insufficient funds. The available balance was not sufficient for the entry. The account itself may be perfectly valid; the issue is funds availability. For a payout program sending credits, the relevant return profile differs from a debit collection program, so interpret the code in the context of the entry type and your bank or processor rules.

R02: account closed. The account has been closed. Sending the same instruction to the same account again will not solve it. The only fix is a new destination from the recipient.

R03: no account or unable to locate account.The receiving institution could not locate the account using the information provided. The number looked plausible but matched nothing. The next step is to verify the recipient’s account details, not to retry as-is.

R04: invalid account number structure. The account number itself is malformed, often a typo or a digit dropped during entry. The destination should be corrected before another attempt.

R23: credit entry refused by receiver. This is the return unique to sending money out. The credit reached the account, but the account holder refused it: the amount was wrong, the payment was unexpected, or the account is in dispute. A refused credit is a conversation, not a technical fix. Contact the recipient, resolve the reason, and only then resend.

R24: duplicate entry. The receiving bank believes it already got this entry. This is one reason payout systems need duplicate protection with idempotency keysbefore they submit payments. The right question is not “Can we retry?” It is “Do we know whether this obligation has already been paid?”

ACH returns vs reversals

A return moves from the receiving bank back to you: the other side could not or would not accept the entry, and the code explains why. A reversal moves the other direction. It is a new entry you originate to pull back a payment you sent in error, such as a duplicate, a wrong amount, or a wrong account.

Reversals are narrow. Nacha permits them only for specific error cases, within a short window measured in banking days, and the money is not guaranteed to come back: if the account is empty or closed, the reversal itself can return. Treat reversals as a correction of your own mistake, and returns as information about the destination.

ACH return codes vs Notification of Change codes

Not every correction arrives as a return. When the receiving bank can post the entry but spots stale details, it lets the payment settle and sends a Notification of Change instead: a message saying “this went through, but fix these details before you send the next one.” NOCs carry C-codes rather than R-codes.

The distinction matters for operations. A return means the money came back and the obligation is still open. A NOC means the money arrived and your job is data hygiene: update the stored account details so future entries carry the corrected information.

Notification of Change C-codes

CodeWhat to correct
C01Incorrect account number
C02Incorrect routing number
C03Incorrect routing number and account number
C05Incorrect transaction code
C06Incorrect account number and transaction code
C07Incorrect routing number, account number, and transaction code
C09Incorrect individual ID number

C02 is the one payout teams see most, usually after a bank merger: the payment settled, but the routing number you have on file is out of date, and the NOC carries the corrected routing number to use from now on. Apply the correction promptly; continuing to send entries with the old details after a NOC is a rules problem, not just an operational one.

What to do after an ACH return

The code is only useful if it becomes an action someone can take. Instead of showing this:

R03

show this:

Payout returned

Reason
Account could not be located

Action
Ask the recipient to update bank information

Retry
Only after the destination is corrected

That mapping is mechanical: every code in the table above pairs with a next step, so a payout API should hand your team the action, not just the raw code. A returned payout is one kind of failed payout, and the broader playbook for handling failed payouts, retries, fallback rails, and recipient communication, applies from the moment the return lands.

Two habits prevent most of the damage. First, never retry automatically on codes that require new information (R02, R03, R04) or that forbid retries outright (R16, and unauthorized claims like R10 and R29). Second, when the fix is a new destination, collect it through a secure flow rather than email, because a return is exactly the moment fraudsters like to impersonate recipients.

How returns affect payout reconciliation

A return does not erase the payment attempt. It adds a second event that has to land in your books against the same obligation:

Obligation
$750 owed

Attempt 1
ACH
Returned R03

Attempt 2
RTP
Completed

Result
Obligation satisfied

Finance can now explain why two attempts exist without treating them as two separate amounts owed. That structure, one obligation with many attempts, is the core of payout reconciliation: returns become ledger entries that offset the original attempt, and the obligation stays open until an attempt actually completes.

See returns handled automatically. We’ll show a returned payment update the ledger and queue its next action.

Book a demo

Payout infrastructure for sports, music & entertainment.

hello@trydiscofi.com
Skyward Labs, Inc. © 2026