← Operations

ACH return codes explained (R01, R02, R03…)

Why a payment came back — and why 'insufficient funds' and 'account closed' should be different branches in your code.

When an ACH payment can't complete, it comes back with a return code — a short reason. Treating every return as one generic "failed" throws away the information you need to respond correctly.

Common codes

  • R01 — Insufficient funds. The account existed but lacked the money. Often worth a retry later.
  • R02 — Account closed. Don't retry; get new details.
  • R03 — No account / unable to locate. The account number is wrong.
  • R04 — Invalid account number. A structural problem with the number.
  • R10 / R11 — Customer advises not authorized / originator not authorized. Stop; these count toward unauthorized-return limits.

Why the distinction matters

"Insufficient funds" might warrant a retry; "not authorized" must not be retried and affects your NACHA standing. Different codes, different actions.

On DigitalTreasury

Returns arrive as inbound events, are matched to their payment order, reverse the ledger hold, and land in a typed status carrying the code — so your webhook can branch on the reason instead of guessing.

Related
Request access → See the platform →