Understanding ACH returns
Understand ACH returns in the Rainforest ecosystem
An ACH return is a type of payment and is the movement of funds from a merchant.
An ACH return is initiated when an ACH payin is rejected. It is the ACH payment equivalent of a card decline or chargeback. Administrative returns, where the ACH return is due to incorrect information or insufficient funds, are processed within 2-3 days. Disputes, similar to card chargebacks, can be processed up to 90 days after the payin is initiated.
Return codes
An ACH payin can be returned for a variety reasons, the most common include insufficient funds, incorrect account information, or if the customer asks their bank to place a stop payment on the transfer. A return code is provided with the ACH return to provide an explanation of why the ACH return was created.
Most common return codes
CODE | DESCRIPTION |
---|---|
R01 | Insufficient Funds |
R02 | Account Closed |
R03 | No Bank Account/Unable to Locate Account |
R04 | Invalid Account Number |
R05 | Unauthorized Debit to Consumer Account Using Corporate SEC Code |
R06 | Returned per ODFI's Request |
R07 | Customer Revoked Authorization |
R08 | Payment Stopped |
R09 | Uncollected Funds |
R10 | Originator not known and/or not authorized to Debit Receiver’s Account |
Money movement
When an ACH return is created, the ACH payin could be in the status of Processing or Succeeded depending on if it has not or has been deposited to the merchant.
Processing ACH payin
ACH payin and ACH return in the same deposit
When the payin is in a Processing
status and is within the T+X deposit time frame and not currently available for a deposit, the payin will move to Returned
when the ACH return is created. This means the merchant will never receive the funds for the payin, but will be billed for the fees associated to the ACH payin and the ACH return in the next deposit.

When a payin moves to Returned
, the payin resource will include the following fields in the payin.returned
webhook and the get payin endpoint.
Field | Type | Description |
---|---|---|
has_ach_return | boolean | Boolean indicating that the payin has an ACH return. |
ach_return | object | The ACH return details including the ach_return_id and return_code . |
Example
In the example below, the merchant's billing profile is configured with a $0.30 ACH payin fee, $5.00 ACH return fee, and $0.20 deposit fee. The $100 ACH payin was returned before it was deposited to the merchant. The $100 between the payin and the ACH return net to $0 in the deposit and only the processing fees of $0.30 for the ACH payin and $5 for the ACH return was owed by the merchant and deducted from the merchant's next deposit.

Succeeded ACH payin
ACH payin and ACH return in separate deposits
When the payin has already been funded in a previous deposit, the payin stays in Succeeded
and the ACH return will be deducted from the merchant's next deposit along with any return fees.
Example
In the example below, the merchant's billing profile is configured with a $0.30 ACH payin fee, $5.00 ACH return fee, and $0.20 deposit fee. The $100 ACH payin was deposited in deposit dep_***FeNvi2
. The payin was later returned and the $100 + $5 return fee was owed by the merchant and deducted from the merchant's next deposit.

Sandbox simulation
You can simulate an ACH return on a payin in sandbox. The payin must be in the status of Processing
or Succeeded
in order to initiate a return. Once an ACH return has been created, you can simulate a merchant deposit to see how the return and fees will be deducted from a deposit.
Updated 5 days ago