Understanding ACH returns
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 |
Refunds on ACH payins
In order to prevent a refund from being initiated on an ACH payin that ultimately will result in an ACH return, Rainforest does not allow refunds on ACH payins for T+4 from processing time, where T equals the first banking day after processing and 4 equals the number of banking days until the payin is eligible for a refund. For example, an ACH payin processed on Monday would be eligible for a refund on Friday. This allows for the ACH return to be processed prior to the payin being available for a deposit for most of the common return reasons.
Money movement
When an ACH return is created, the ACH payin could be in the status of Succeeded
or Processing
depending on if it has been deposited to the merchant or not.
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.
![$100 payin is deposited in Deposit #1. The payin is later returned, and the $100 + $10 return fee is now owed by the merchant. $110 will be deducted from the merchant's next deposit.](https://files.readme.io/aa0e45d-ACH_return_flow_1.png)
$100 payin is deposited in Deposit #1. The payin is later returned, and the $100 + $10 return fee is now owed by the merchant. $110 will be deducted from the merchant's next deposit.
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 Succeeded
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. See the Listen to webhooks section on how to know if this payment flow occurs.
![$100 payin is returned before deposited. The merchant will be deducted the processing fees of $1.30 for the ACH payin and $10 for the ACH return.](https://files.readme.io/ce25604-ACH_return_flow_2.png)
$100 payin is returned before deposited. The merchant will be deducted the processing fees of $1.30 for the ACH payin and $10 for the ACH return.
Listen to webhooks
Listen to the ACH return webhooks to know when an ACH return has been created and receive more details.
ACH payin and ACH return in separate deposits
If the ACH payin has already been funded in a previous deposit, the only webhook received will be ach_return.created
.
ACH payin and ACH return in the same deposit
If the ACH payin was in Processing
status and has not been funded in a previous deposit, then two webhooks will fire:
ach_return.created
payin.succeeded
The payin.succeeded
webhook will include the following indicators to let you know the payin was moved to Succeeded
because of the ACH return.
has_ach_return
booleanach_return
object that includes the associated ACH return ID and other details regarding the return
Simulate an ACH return
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 about 1 month ago