ACH Returns

The ACH Network supports the ability to return ACH payments for a number of reasons. Commonly, returns are initiated because the payment can't be completed due to reasons like insufficient funds, account closure, or inaccurate account details.

In most instances, the Receiving Depository Financial Institution (RDFI) has 2 business days to issue a return. For certain scenarios, such as unauthorized transactions on consumer accounts, an extended window of up to 60 calendar days may be allowed to initiate a return. Once a return is received by the Originating Depository Financial Institution (ODFI), Treasury Prime is notified and will update the ACH object accordingly.

Example ACH Return Flow

This example outlines a common flow of events around the return of an ACH debit that was originated using the Treasury Prime API.

  1. Customer originates an ACH Debit on the Treasury Prime platform.
  2. ACH is received by the RDFI, but the corresponding account does not have sufficient funds to cover the transaction.
  3. RDFI issues and ACH return with return code RO1 (Insufficient Funds).
  4. The ODFI (in this case, the Treasury Prime partner bank) notifies Treasury Prime of the return.
  5. Treasury Prime then changes the ACH status to returned, and updates the error field to include the return reason code.
    1. This can also be completed via the Update an ACH endpoint.
  6. The ach.update webhook fires to notify the customer that the ACH object has changed.

How to Identify ACH Returns

While hopefully rare, it is important to promptly identify ACH that you have originated through the API to inform the customer that their ACH payment has not been completed.

As mentioned above, when an ACH is returned by the RDFI, the status of the corresponding ACH object will always be updated to returned. Additionally, the error field will be populated with the return code corresponding to the reason for the return.

Once these fields are updated, the ach.update webhook will fire, notifying you of the change. You can then use this webhook to present a notification to the customer that the ACH they originated has not been completed and may require follow-up action.

Returned ACH payments can also be fetched in the API by filtering the /ach list endpoint by status, allowing you to build internal or customer-facing views of returned ACH payments.

Example Request to List Returned ACH Objects
curl -u $API_KEY_ID:$API_KEY_VALUE {% api-endpoint /%}/ach?status=returned

How to Return an ACH

If you have an Originated ACH transfer that needs to be returned, leverage the Update an ACH endpoint to make the return. This feature will need to be enabled for your organization, if it is not enabled please contact our Support Team at [email protected] and include the transaction id associated with the originated ACH, the reason the return is being requested, and any other relevant information about the request. Our team will aid you in the process of submitting the return request to the ODFI, and if approved, the ODFI will submit the return to the RDFI. A successful return will result in an additional transaction being posted to the user's account to reverse the original transaction.

Example Returned ACH

The below example demonstrates an ACH Debit which was returned from the RDFI with a return code of R01 (insufficient funds).

{
    "description": "ACH DEBIT RETURN [ach_11hqstvbf3w5es][ppd][standard] Target",
    "amount": "100.00",
    "service": "standard",
    "counterparty_id": "cp_11gsczk76tqj1p",
    "bank_id": "bank_treasuryprime",
    "account_id": "acct_11hq4m9aee67ye",
    "addenda": [],
    "org_id": "org_1evy4cx2km5",
    "batch_key": null,
    "effective_date": "2022-11-22",
    "updated_at": "2022-11-22T16:00:13Z",
    "status": "returned",
    "id": "ach_11hqstvbf3w5es",
    "error": "R01",
    "sec_code": "ppd",
    "scheduled_settlement": "2022-11-25T16:20:13Z",
    "direction": "debit",
    "created_at": "2022-11-22T15:31:55Z",
    "userdata": null
}

Transactions for Returned ACH Payments

An ACH return will result in the reversal of any funds movement that occurred in response to the initial ACH being created. For ACH debits that usually result in a deposit, a corresponding withdrawal will be made. The opposite occurs for ACH credits, with a deposit being made to counteract the initial withdrawal. These updates to the account balance will ultimately result in the account.update webhook firing.

Scenario 1: Returned ACH Debit Transactions

In the scenario shown below, an ACH debit is created in the amount of $20. This results in a $20 deposit being applied to the originating account, and an immediate hold being placed on those funds.

The RDFI then returns the ACH, at which point a $20 withdrawal is made to reverse the original deposit. Finally, a hold_release is posted to balance the account.

OrderTransaction TypeAmount
1deposit20
2hold-20
3withdrawal-20
4hold_release20
Scenario 2: Returned ACH Credit Transactions

In the scenario shown below, an ACH credit is created in the amount of $20. This results in a $20 withdrawal being made from the originating account.

The RDFI then returns the ACH, at which point a $20 deposit is made to the originating account to reverse the initial withdrawal.

OrderTransaction TypeAmount
1withdrawal20
2deposit-20

Requesting to Return an Incoming ACH

If you have received an incoming ACH transfer that needs to be returned for reasons such as “Customer Advises Not Authorized, Improper, or Ineligible” (reason code R10), leverage the update Incoming ACH endpoint to make the return. This feature will need to be enabled for your organization, if it is not enabled please contact our Support Team at [email protected] and include the transaction id associated with the incoming ACH, the reason the return is being requested, and any other relevant information about the request. Our team will aid you in the process of submitting the return request to the RDFI, and if approved, the RDFI will submit the return to the ODFI. A successful return will result in an additional transaction being posted to the user's account to reverse the original transaction.

ACH Return Codes

Below is the list of the most commonly encountered ACH return codes.

CodeReasonDescription
R01Insufficient fundsAvailable balances is not sufficient to cover the dollar amount of the debit entry.
R02Account closedA previously open account is now closed.
R03No account or unable to locate accountThe account number does not correspond to the individual identified in the entry or a valid account.
R04Invalid account number structureThe account number fails the check digit validation or may contain an incorrect number of digits.
R05Unauthorized debit to consumer account using a corporate SEC codeA ccd or ctx business debit entry was transmitted to a consumer account, and was not authorized by the recipient.
R06Returned per ODFI's requestThe ODFI has requested that the RDFI return the entry.
R07Authorization revoked by customerA receipient who previously authorized an entry has revoked authorization with the originator.
R08Payment stoppedThe recipient has placed a stop payment order on this debit Entry.
R09Uncollected fundsA sufficient balance exists to satisfy the dollar value of the transaction, but the available balance is below the dollar value of the debit Entry.
R10Customer advises Originator is Not Known to Receiver and/or Originator is Not Authorized by Receiver to Debit Receiver’s AccountThe RDFI has been notified by the recipient that the recipient does not know the identity of the originator, has no relationship with the originator, or has not authorized the originator to debit their account.
R11Customer Advises Entry Not in Accordance with the Terms of AuthorizationThe RDFI has been notified by the Receiver that the Originator and Receiver have a relationship and an authorization to debit exists, but there is an error or defect in the payment such that the entry does not conform to the terms of the authorization.
R12Branch sold to another DFIA financial institution received an Entry to an account that was sold to another financial institution maintained at a branch sold to another financial institution.
R13Invalid ACH routing numberEntry contains an invalid ACH routing number.
R14Representment payee deceased or unable to continue in that capacityRepresentative payee is deceased or unable to continue in that capacity. The beneficiary is not deceased.
R15Beneficiary of account holder deceasedEither the beneficiary or account holder is deceased.
R16Account Frozen/Entry Returned Per OFAC Instruction(1) Access to the account is restricted due to specific action taken by the RDFI or by legal action; or (2) OFAC has instructed the RDFI or Gateway to return the Entry.
R17File record edit criteria/Entry with invalid account number initiated under questionable circumstances(1) Field(s) cannot be processed by RDFI; or (2) the Entry contains an invalid DFI Account Number (account closed / no account / unable to locate account / invalid account number) and is believed by the RDFI to have been initiated under questionable circumstances.
R18Improper effective entry date(1) The Effective Entry Date for a credit Entry is more than two Banking Days after the processing date; or (2) the Effective Entry Date for a debit Entry is more than one Banking Day after the processing date.
R19Amount field errorImproper formatting of the amount field, or the allowed amounts of the SEC code used does not match the dollar value of the entry.
R20Non-transaction accountPolicies or regulations (such as Regulation D) prohibit or limit activity to the receiving account based on its type.
R21Invalid company identificationThe company ID information is not valid.
R22Invalid individual ID numberThe recipient has indicated to the RDFI that the number with which the Originator was identified is not correct.
R23Credit entry refused by receiverAny credit entry that is refused by the recipient may be returned by the RDFI.
R24Duplicate entryRDFI has received what appears to be a duplicate entry.
R25Addenda errorImproper formatting of the addenda record information.
R26Mandatory field errorErroneous data or missing data in a mandatory field.
R27Trace number errorOriginal entry trace number is not valid for return entry; or addenda trace numbers do not correspond with entry detail record.
R28Routing number check digit errorThe check digit for a routing number is not valid.
R29Corporate customer advises not authorizedRDFI has been notified by business account holder that a specific transaction is unauthorized.
R30RDFI not participant in check truncation programFinancial institution not participating in automated check safekeeping application.
R31Permissible return entryThe RDFI may return a CCD or CTX entry that the ODFI agrees to accept.
R32RDFI nonsettlementRDFI is not able to settle the entry.