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 |
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.
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.
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.
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.returned
The payin.returned
webhook will include the following indicators to let you know the details of the ACH return.
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 . |
Simulate an ACH return in sandbox
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 3 months ago