{"title":"ACH Direct Debit chargebacks","category":"default","creationDate":1779533780,"content":"<p>ACH refers to chargebacks as <em>returns<\/em>. It is not possible to defend ACH returns. You have the following options:<\/p>\n<ul>\n<li>To reduce the risk of chargebacks, you can <a href=\"#reduce-the-chargeback-risk\">use an external account validation service<\/a>.<\/li>\n<li>In case of a Notification of Change, you can prevent future returns by <a href=\"#notification-of-change\">asking the customer to update their account details<\/a>.<\/li>\n<li>In some cases you can <a href=\"#ach-retry\">retry the payment<\/a>.<\/li>\n<\/ul>\n<h2>Causes of ACH chargebacks<\/h2>\n<p>Because the ACH network is unable to provide real-time authorizations, an authorised payment can be reversed due to insufficient funds. Such chargebacks usually happen three to five days after the date of the direct debit payment. Additionally, consumers can dispute direct debit payments up to two years after the settlement date, claiming they did not authorize the payment or withdrew their authorization. Businesses can do this up to one year after settlement.<\/p>\n<p>This is different from credit card transactions, where a customer can initiate a chargeback by claiming that a product or service was not what they expected.<\/p>\n<h2>Reduce the chargeback risk<\/h2>\n<p>To reduce the risk of ACH returns, we recommend using an external service to <a href=\"\/payment-methods\/ach-direct-debit#account-validation\">validate the customer's account details<\/a> on their first transaction. External services that we support:<\/p>\n<ul>\n<li><a href=\"\/payment-methods\/ach-direct-debit\/verification-with-giact\/\">giact gVERIFY<\/a><\/li>\n<\/ul>\n<h2>Refunding disputed payments<\/h2>\n<p>Adyen delays refunds for three days after a payment has settled. This delay helps prevent a scenario where, after a payment has settled, you issue a refund and a customer initiates a chargeback at around the same time. If you try to issue a refund but a customer inititates a chargeback within those three days, the refund request is canceled automatically and you will receive a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/CHARGEBACK\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CHARGEBACK<\/a> webhook.<\/p>\n<h2 id=\"ach-return-flow\">ACH return flow<\/h2>\n<p>After an ACH Direct Debit payment is authorized, captured, and settled, the ACH return flow is as follows:<\/p>\n<ol>\n<li>Optional: <a href=\"#notification-of-change\">Notification of Change<\/a><\/li>\n<li>Optional: <a href=\"#request-for-permission-to-return\">Request for Permission to Return<\/a><\/li>\n<li>Optional: <a href=\"#information-supplied\">Information Supplied<\/a><\/li>\n<li><a href=\"#notification-of-chargeback\">Notification of Chargeback<\/a><\/li>\n<li><a href=\"#chargeback\">Chargeback<\/a><\/li>\n<li><a href=\"#ach-retry\">Retry<\/a><\/li>\n<\/ol>\n<p><img alt=\"\" src=\"\/user\/pages\/docs\/10.risk-management\/21.chargeback-guidelines\/ach-chargebacks\/ACH-return-flow.png\" \/><\/p>\n<h2 id=\"notification-of-change\">Optional: Notification of Change<\/h2>\n<p>If bank account details have changed, Adyen receives a Notice of Change. This happens, for example, if the customer's bank has been taken over by another bank. Usually there is a grace period when payments using the old account details are still accepted. But when the grace period ends, payments using the old account details are returned. If you subscribed to  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/DIRECT_DEBIT_NOTICE_OF_CHANGE_NOTIFICATION\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">DIRECT_DEBIT_NOTICE_OF_CHANGE_NOTIFICATION<\/a> webhooks, Adyen then sends an <strong>ach.notificationOfChange<\/strong> webhook event with the details. <\/p>\n<p>When banks inform us that account details have changed, we update the account details saved in our system as much as possible. If you make <a href=\"\/online-payments\/tokenization\/\">recurring payments<\/a>, the existing <code>shopperReference<\/code> is updated with the new account details in many cases. However, you should still inspect the Direct Debit Notice of Change Notification webhook to see if details are missing and you need ask the customer to update their account details in your system.<\/p>\n<p>The following example illustrates the content of a Direct Debit Notice of Change Notification webhook with an <strong>ach.notificationOfChange<\/strong> event.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Direct Debit Notice of Change Notification'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"type\\\": \\\"ach.notificationOfChange\\\",\\n    \\\"version\\\": \\\"1\\\",\\n    \\\"createdAt\\\": \\\"2023-08-16T18:22:45-03:00\\\",\\n    \\\"environment\\\": \\\"live\\\",\\n    \\\"data\\\": {\\n        \\\"pspReference\\\": \\\"XB7XNCQ8HXSKGK82\\\",\\n        \\\"shopperReference\\\": \\\"YOUR_SHOPPER_REFERENCE\\\",\\n        \\\"notificationOfChange\\\": {\\n            \\\"reasonCode\\\": \\\"C07\\\",\\n            \\\"newBankAccountNumber\\\": \\\"012345678901\\\",\\n            \\\"newBranchCode\\\": \\\"012003456\\\",\\n            \\\"newBankAccountType\\\": \\\"Savings\\\"\\n        }\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"request-for-permission-to-return\">Optional: Request for Permission to Return<\/h2>\n<p>To verify the account holder, the issuing bank has asked for supporting documents. Adyen contacts you to provide those documents.<br \/>\nAt this point, funds are not yet deducted from your account.<\/p>\n<h2 id=\"information-supplied\">Optional: Information Supplied<\/h2>\n<p>Adyen has received your supporting documents and has shared them with the issuing bank.<br \/>\nAt this point, funds are not yet deducted from your account.<\/p>\n<h2>Notification of Chargeback<\/h2>\n<p>The issuing bank or the customer has initiated an ACH return. You receive a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/NOTIFICATION_OF_CHARGEBACK\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">NOTIFICATION_OF_CHARGEBACK<\/a> webhook with the details. You cannot defend the return, but it may be allowed to <a href=\"#ach-retry\">retry<\/a> the payment.<\/p>\n<h2>Chargeback<\/h2>\n<p>Your account is debited for the ACH return. You receive a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/CHARGEBACK\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CHARGEBACK<\/a> webhook. You cannot defend the return, but it may be allowed to <a href=\"#ach-retry\">retry<\/a> the payment.<\/p>\n<h2 id=\"ach-retry\">Decide if you can retry the payment<\/h2>\n<p>To indicate the reason of the return, ACH provides a reason code that we return in the <strong>NOTIFICATION_OF_CHARGEBACK<\/strong> and <strong>CHARGEBACK<\/strong> webhooks, and in your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a> &gt; <strong>Revenue &amp; risk<\/strong> &gt; <strong>Disputes<\/strong>. Depending on the reason code, you can retry the transaction or take some other action.<\/p>\n<p>However, some transactions cannot possibly succeed, for example because the customer's account has been closed. If you repeatedly retry transactions that will never succeed, the <a href=\"https:\/\/www.nacha.org\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">National Automated Clearinghouse Association<\/a> (Nacha) imposes fines, and we have to block you from sending any new ACH Direct Debit transactions.<\/p>\n<p>Use the following table with the most common ACH return reason codes to determine if it is allowed to retry a returned ACH Direct Debit payment.<\/p>\n<div class=\"sticky-table-container\">\n    \n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Reason code<\/th>\n<th style=\"text-align: left;\">Reason<\/th>\n<th style=\"text-align: left;\">Description \/ Resolution<\/th>\n<th style=\"text-align: center;\">Retry?<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">R01<\/td>\n<td style=\"text-align: left;\">Insufficient funds<\/td>\n<td style=\"text-align: left;\">You can retry the transaction up to two times within 30 days of the original authorization date.<\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/> <strong>max&nbsp;2x<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R02<\/td>\n<td style=\"text-align: left;\">Account closed<\/td>\n<td style=\"text-align: left;\">Retrying the transaction is not allowed. Initiate a new transaction using an <a href=\"#reduce-the-chargeback-risk\">external validation service<\/a>.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R03<\/td>\n<td style=\"text-align: left;\">No Account\/Unable to locate account<\/td>\n<td style=\"text-align: left;\">The provided account information is incorrect. Retrying the transaction is not allowed. Initiate a new transaction using an <a href=\"#reduce-the-chargeback-risk\">external validation service<\/a>.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R04<\/td>\n<td style=\"text-align: left;\">Invalid account number<\/td>\n<td style=\"text-align: left;\">The provided account number is incorrect. Retrying the transaction is not allowed. Initiate a new transaction using an <a href=\"#reduce-the-chargeback-risk\">external validation service<\/a>.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R05<\/td>\n<td style=\"text-align: left;\">Unauthorized debit to consumer account<\/td>\n<td style=\"text-align: left;\">A corporate transaction was charged to a consumer account and was disputed by the customer. Suspend any recurring payments and resolve the issue with the customer. If you are going to debit the same account for a new transaction, make sure the customer's bank stops blocking transactions from your company to this account.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R06<\/td>\n<td style=\"text-align: left;\">Returned per ODFIs request<\/td>\n<td style=\"text-align: left;\">Your bank asked the customer's bank to reverse the transaction. Retrying the transaction is not allowed. Contact your bank.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R07<\/td>\n<td style=\"text-align: left;\">Authorization revoked by customer<\/td>\n<td style=\"text-align: left;\">The customer informed their bank they revoked authorization for the transaction. Suspend any recurring transactions and resolve the issue with the customer. If you are going to debit the same account for a new transaction, make sure the customer's bank stops blocking transactions from your company to this account.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R08<\/td>\n<td style=\"text-align: left;\">Payment stopped or stop payment on item<\/td>\n<td style=\"text-align: left;\">The customer instructed their bank to not honor a payment they previously authorized. Resolve the issue with the customer. When initiating a new transaction (using an <a href=\"#reduce-the-chargeback-risk\">external validation service<\/a>), get new proof of authorization from the customer. If you are going to debit the same account, make sure the customer's bank stops blocking transactions from your company to this account.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R09<\/td>\n<td style=\"text-align: left;\">Uncollected funds<\/td>\n<td style=\"text-align: left;\">Insufficient funds. You can retry the transaction up to two times within 30 days of the original authorization date.<\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/> <strong>max&nbsp;2x<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R10<\/td>\n<td style=\"text-align: left;\">Customer Advises Originator is Not Known to Receiver and\/or Originator is Not Authorized by Receiver to Debit Receiver\u2019s Account<\/td>\n<td style=\"text-align: left;\">The customer disputed the transaction. Retrying the transaction is not allowed. Resolve the issue with the customer. If you are going to debit the same account for a new transaction, make sure the customer's bank stops blocking transactions from your company to this account.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R11<\/td>\n<td style=\"text-align: left;\">Customer Advises Entry Not in Accordance with the Terms of the Authorization<\/td>\n<td style=\"text-align: left;\">The customer informed their bank that the payment is not in accordance with the authorization terms. Suspend any recurring transactions and resolve the issue with the customer. You can retry the transaction within 60 days of the original settlement date.<\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R12<\/td>\n<td style=\"text-align: left;\">Branch sold to another DFI<\/td>\n<td style=\"text-align: left;\">The customer's account has migrated to another financial institution. Ask the customer to update their account details in your system.<\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R13<\/td>\n<td style=\"text-align: left;\">Invalid ACH routing number<\/td>\n<td style=\"text-align: left;\">The provided routing number does not belong to any bank in the ACH network. Ask the customer for the correct routing number, or contact your bank if you are sure the number is correct.<\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R15<\/td>\n<td style=\"text-align: left;\">Beneficiary or account holder deceased<\/td>\n<td style=\"text-align: left;\">Contact the bank of the deceased account holder or account beneficiary.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R16<\/td>\n<td style=\"text-align: left;\">Account frozen<\/td>\n<td style=\"text-align: left;\">Contact your customer to obtain a different form of payment. The bank account cannot be used while it is frozen. This return code should be a red flag for your business. If you see this code, do your due diligence around verifying the identity of your customer.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R17<\/td>\n<td style=\"text-align: left;\">File record edit criteria<\/td>\n<td style=\"text-align: left;\">The customer's bank had a technical problem with processing the ACH transaction.<\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R20<\/td>\n<td style=\"text-align: left;\">Non-transaction account<\/td>\n<td style=\"text-align: left;\">The provided bank account cannot be used for ACH payments. Ask the customer for permission to charge a different, ACH-enabled bank account.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R29<\/td>\n<td style=\"text-align: left;\">Corporate customer advises not authorized<\/td>\n<td style=\"text-align: left;\">The company you tried to charge has disputed the transaction. Retrying the transaction is not allowed. Resolve the issue with the other company. If you are going to debit the same account for a new transaction, make sure the other company's bank stops blocking transactions from your company to this account. It is possible the issue is resolved if the other company adds the <a href=\"\/payment-methods\/ach-direct-debit#ach-company-id-for-b2b-payments\">Adyen ACH Company ID<\/a> for payments to the allowlist of their business account.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R31<\/td>\n<td style=\"text-align: left;\">Permissible return entry<\/td>\n<td style=\"text-align: left;\">The business account holder or their bank has asked to reverse the transaction. Contact your bank for more information. Contact the customer to resolve the issue.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">R51<\/td>\n<td style=\"text-align: left;\">Item is ineligible, notice not provided, signature not genuine<\/td>\n<td style=\"text-align: left;\">To determine what to do, you need to find out the underlying reason why the payment was returned. Contact Adyen if you need help.<\/td>\n<td style=\"text-align: center;\"><img title=\"-x-\" alt=\"-x-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/x.png\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n<\/div>\n\n<h2>Test a chargeback scenario<\/h2>\n<p>You can try out the ACH return flow by sending an ACH Direct Debit test payment. The <code>ownerName<\/code> in the test payment indicates the chargeback scenario that you want to test.<\/p>\n<p>Note that in the test environment the return flow goes directly to the Chargeback stage. The optional stages and the Notification of Chargeback stage are skipped.<\/p>\n<p>To test a chargeback:<\/p>\n<ol>\n<li>\n<p>Send an ACH Direct Debit payment request using the following account details.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>ownerName<\/code><\/td>\n<td style=\"text-align: left;\"><strong>chargeback:<a href=\"#ach-retry\">REASON_CODE<\/a><\/strong>. For example, <strong>chargeback:R01<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>bankAccountNumber<\/code><\/td>\n<td style=\"text-align: left;\">Any correctly formatted account number. For example, <strong>1234567890<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>bankLocationId<\/code><\/td>\n<td style=\"text-align: left;\">The routing number. Use <strong>011000138<\/strong> or <strong>121000358<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billingAddress<\/code><\/td>\n<td style=\"text-align: left;\">The account owner's address. Use any correctly formatted US address.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Testing return reason code R01'\" :id=\"'1194239097'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v72\\\/payments \\\\\\n-H 'x-API-key: YOUR_X_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n   \\&quot;merchantAccount\\&quot;:\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n   \\&quot;amount\\&quot;:{\\n      \\&quot;currency\\&quot;:\\&quot;USD\\&quot;,\\n      \\&quot;value\\&quot;:\\&quot;1000\\&quot;\\n   },\\n   \\&quot;reference\\&quot;:\\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n   \\&quot;{hint:state.data.paymentMethod from onSubmit}paymentMethod{\\\/hint}\\&quot;:{\\n      \\&quot;type\\&quot;:\\&quot;ach\\&quot;,\\n      \\&quot;bankAccountNumber\\&quot;:\\&quot;1234567890\\&quot;,\\n      \\&quot;bankAccountType\\&quot;:\\&quot;checking\\&quot;,\\n      \\&quot;bankLocationId\\&quot;:\\&quot;121000358\\&quot;,\\n      \\&quot;ownerName\\&quot;:\\&quot;chargeback:R01\\&quot;\\n   },\\n   \\&quot;billingAddress\\&quot;:{\\n      \\&quot;houseNumberOrName\\&quot;:\\&quot;50\\&quot;,\\n      \\&quot;street\\&quot;:\\&quot;Test Street\\&quot;,\\n      \\&quot;city\\&quot;:\\&quot;Amsterdam\\&quot;,\\n      \\&quot;stateOrProvince\\&quot;:\\&quot;NY\\&quot;,\\n      \\&quot;postalCode\\&quot;:\\&quot;12010\\&quot;,\\n      \\&quot;country\\&quot;:\\&quot;US\\&quot;\\n   }\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v25.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.checkout.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.model.RequestOptions;\\nimport com.adyen.service.checkout.*;\\n\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Request objects\\nAmount amount = new Amount()\\n\\t.currency(\\&quot;USD\\&quot;)\\n\\t.value(1000L);\\n\\nAchDetails achDetails = new AchDetails()\\n\\t.bankAccountType(AchDetails.BankAccountTypeEnum.CHECKING)\\n\\t.ownerName(\\&quot;chargeback:R01\\&quot;)\\n\\t.bankAccountNumber(\\&quot;1234567890\\&quot;)\\n\\t.type(AchDetails.TypeEnum.ACH)\\n\\t.bankLocationId(\\&quot;121000358\\&quot;);\\n\\nBillingAddress billingAddress = new BillingAddress()\\n\\t.country(\\&quot;US\\&quot;)\\n\\t.stateOrProvince(\\&quot;NY\\&quot;)\\n\\t.city(\\&quot;Amsterdam\\&quot;)\\n\\t.houseNumberOrName(\\&quot;50\\&quot;)\\n\\t.street(\\&quot;Test Street\\&quot;)\\n\\t.postalCode(\\&quot;12010\\&quot;);\\n\\nPaymentRequest paymentRequest = new PaymentRequest()\\n\\t.reference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n\\t.amount(amount)\\n\\t.merchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n\\t.paymentMethod(new CheckoutPaymentMethod(achDetails))\\n\\t.billingAddress(billingAddress);\\n\\n\\\/\\\/ Make the request\\nPaymentsApi service = new PaymentsApi(client);\\nPaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey(\\&quot;UUID\\&quot;));&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen PHP API Library v17.4.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\Checkout\\\\Amount;\\nuse Adyen\\\\Model\\\\Checkout\\\\CheckoutPaymentMethod;\\nuse Adyen\\\\Model\\\\Checkout\\\\BillingAddress;\\nuse Adyen\\\\Model\\\\Checkout\\\\PaymentRequest;\\nuse Adyen\\\\Service\\\\Checkout\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Request objects\\n$amount = new Amount();\\n$amount\\n\\t-&gt;setCurrency(\\&quot;USD\\&quot;)\\n\\t-&gt;setValue(1000);\\n\\n$checkoutPaymentMethod = new CheckoutPaymentMethod();\\n$checkoutPaymentMethod\\n\\t-&gt;setBankAccountType(\\&quot;checking\\&quot;)\\n\\t-&gt;setOwnerName(\\&quot;chargeback:R01\\&quot;)\\n\\t-&gt;setBankAccountNumber(\\&quot;1234567890\\&quot;)\\n\\t-&gt;setType(\\&quot;ach\\&quot;)\\n\\t-&gt;setBankLocationId(\\&quot;121000358\\&quot;);\\n\\n$billingAddress = new BillingAddress();\\n$billingAddress\\n\\t-&gt;setCountry(\\&quot;US\\&quot;)\\n\\t-&gt;setStateOrProvince(\\&quot;NY\\&quot;)\\n\\t-&gt;setCity(\\&quot;Amsterdam\\&quot;)\\n\\t-&gt;setHouseNumberOrName(\\&quot;50\\&quot;)\\n\\t-&gt;setStreet(\\&quot;Test Street\\&quot;)\\n\\t-&gt;setPostalCode(\\&quot;12010\\&quot;);\\n\\n$paymentRequest = new PaymentRequest();\\n$paymentRequest\\n\\t-&gt;setReference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n\\t-&gt;setAmount($amount)\\n\\t-&gt;setMerchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n\\t-&gt;setPaymentMethod($checkoutPaymentMethod)\\n\\t-&gt;setBillingAddress($billingAddress);\\n\\n$requestOptions['idempotencyKey'] = 'UUID';\\n\\n\\\/\\\/ Make the request\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;payments($paymentRequest, $requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v14.3.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Checkout;\\nusing Adyen.Service.Checkout;\\n\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Fill in your request objects\\nAmount amount = new Amount\\n{\\n\\tCurrency = \\&quot;USD\\&quot;,\\n\\tValue = 1000\\n};\\n\\nAchDetails achDetails = new AchDetails\\n{\\n\\tBankAccountType = AchDetails.BankAccountTypeEnum.Checking,\\n\\tOwnerName = \\&quot;chargeback:R01\\&quot;,\\n\\tBankAccountNumber = \\&quot;1234567890\\&quot;,\\n\\tType = AchDetails.TypeEnum.Ach,\\n\\tBankLocationId = \\&quot;121000358\\&quot;\\n};\\n\\nBillingAddress billingAddress = new BillingAddress\\n{\\n\\tCountry = \\&quot;US\\&quot;,\\n\\tStateOrProvince = \\&quot;NY\\&quot;,\\n\\tCity = \\&quot;Amsterdam\\&quot;,\\n\\tHouseNumberOrName = \\&quot;50\\&quot;,\\n\\tStreet = \\&quot;Test Street\\&quot;,\\n\\tPostalCode = \\&quot;12010\\&quot;\\n};\\n\\nPaymentRequest paymentRequest = new PaymentRequest\\n{\\n\\tReference = \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n\\tAmount = amount,\\n\\tMerchantAccount = \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n\\tPaymentMethod = new CheckoutPaymentMethod(achDetails),\\n\\tBillingAddress = billingAddress\\n};\\n\\n\\\/\\\/ Make the request\\nvar service = new PaymentsService(client);\\nvar response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = \\&quot;UUID\\&quot;});&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v16.1.0\\n\\\/\\\/ Require the parts of the module you want to use\\nconst { Client, CheckoutAPI } = require('@adyen\\\/api-library');\\n\\n\\\/\\\/ Initialize the client object\\nconst client = new Client({apiKey: \\&quot;YOUR_X_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object\\nconst paymentRequest = {\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  amount: {\\n    currency: \\&quot;USD\\&quot;,\\n    value: \\&quot;1000\\&quot;\\n  },\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  paymentMethod: {\\n    type: \\&quot;ach\\&quot;,\\n    bankAccountNumber: \\&quot;1234567890\\&quot;,\\n    bankAccountType: \\&quot;checking\\&quot;,\\n    bankLocationId: \\&quot;121000358\\&quot;,\\n    ownerName: \\&quot;chargeback:R01\\&quot;\\n  },\\n  billingAddress: {\\n    houseNumberOrName: \\&quot;50\\&quot;,\\n    street: \\&quot;Test Street\\&quot;,\\n    city: \\&quot;Amsterdam\\&quot;,\\n    stateOrProvince: \\&quot;NY\\&quot;,\\n    postalCode: \\&quot;12010\\&quot;,\\n    country: \\&quot;US\\&quot;\\n  }\\n}\\n\\n\\\/\\\/ Make the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v9.2.0\\nimport (\\n\\t\\&quot;context\\&quot;\\n\\t\\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/common\\&quot;\\n\\t\\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/adyen\\&quot;\\n\\t\\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/checkout\\&quot;\\n)\\n\\nclient := adyen.NewClient(&amp;common.Config{\\n    ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Fill in your request objects\\namount := checkout.Amount{\\n\\tCurrency: \\&quot;USD\\&quot;,\\n\\tValue: 1000,\\n}\\n\\nachDetails := checkout.AchDetails{\\n\\tBankAccountType: common.PtrString(\\&quot;checking\\&quot;),\\n\\tOwnerName: common.PtrString(\\&quot;chargeback:R01\\&quot;),\\n\\tBankAccountNumber: common.PtrString(\\&quot;1234567890\\&quot;),\\n\\tType: common.PtrString(\\&quot;ach\\&quot;),\\n\\tBankLocationId: common.PtrString(\\&quot;121000358\\&quot;),\\n}\\n\\nbillingAddress := checkout.BillingAddress{\\n\\tCountry: \\&quot;US\\&quot;,\\n\\tStateOrProvince: common.PtrString(\\&quot;NY\\&quot;),\\n\\tCity: \\&quot;Amsterdam\\&quot;,\\n\\tHouseNumberOrName: \\&quot;50\\&quot;,\\n\\tStreet: \\&quot;Test Street\\&quot;,\\n\\tPostalCode: \\&quot;12010\\&quot;,\\n}\\n\\npaymentRequest := checkout.PaymentRequest{\\n\\tReference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n\\tAmount: amount,\\n\\tMerchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n\\tPaymentMethod: checkout.AchDetailsAsCheckoutPaymentMethod(&amp;achDetails),\\n\\tBillingAddress: &amp;billingAddress,\\n}\\n\\n\\\/\\\/ Make the request\\nservice := client.Checkout()\\nreq := service.PaymentsApi.PaymentsInput().IdempotencyKey(\\&quot;UUID\\&quot;).PaymentRequest(paymentRequest)\\nres, httpRes, err := service.PaymentsApi.Payments(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v12.0.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;YOUR_X_API_KEY\\&quot;\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\njson_request = {\\n  \\&quot;merchantAccount\\&quot;: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;amount\\&quot;: {\\n    \\&quot;currency\\&quot;: \\&quot;USD\\&quot;,\\n    \\&quot;value\\&quot;: \\&quot;1000\\&quot;\\n  },\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;paymentMethod\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;ach\\&quot;,\\n    \\&quot;bankAccountNumber\\&quot;: \\&quot;1234567890\\&quot;,\\n    \\&quot;bankAccountType\\&quot;: \\&quot;checking\\&quot;,\\n    \\&quot;bankLocationId\\&quot;: \\&quot;121000358\\&quot;,\\n    \\&quot;ownerName\\&quot;: \\&quot;chargeback:R01\\&quot;\\n  },\\n  \\&quot;billingAddress\\&quot;: {\\n    \\&quot;houseNumberOrName\\&quot;: \\&quot;50\\&quot;,\\n    \\&quot;street\\&quot;: \\&quot;Test Street\\&quot;,\\n    \\&quot;city\\&quot;: \\&quot;Amsterdam\\&quot;,\\n    \\&quot;stateOrProvince\\&quot;: \\&quot;NY\\&quot;,\\n    \\&quot;postalCode\\&quot;: \\&quot;12010\\&quot;,\\n    \\&quot;country\\&quot;: \\&quot;US\\&quot;\\n  }\\n}\\n\\nresult = adyen.checkout.payments_api.payments(request=json_request, idempotency_key=\\&quot;UUID\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v9.1.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'YOUR_X_API_KEY'\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\nrequest_body = {\\n  :merchantAccount =&gt; 'YOUR_MERCHANT_ACCOUNT',\\n  :amount =&gt; {\\n    :currency =&gt; 'USD',\\n    :value =&gt; '1000'\\n  },\\n  :reference =&gt; 'YOUR_ORDER_NUMBER',\\n  :paymentMethod =&gt; {\\n    :type =&gt; 'ach',\\n    :bankAccountNumber =&gt; '1234567890',\\n    :bankAccountType =&gt; 'checking',\\n    :bankLocationId =&gt; '121000358',\\n    :ownerName =&gt; 'chargeback:R01'\\n  },\\n  :billingAddress =&gt; {\\n    :houseNumberOrName =&gt; '50',\\n    :street =&gt; 'Test Street',\\n    :city =&gt; 'Amsterdam',\\n    :stateOrProvince =&gt; 'NY',\\n    :postalCode =&gt; '12010',\\n    :country =&gt; 'US'\\n  }\\n}\\n\\nresult = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' =&gt; 'UUID' })&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v16.2.0\\n\\\/\\\/ Require the parts of the module you want to use\\nimport { Client, CheckoutAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\n\\\/\\\/ Initialize the client object\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request objects\\nconst amount: Types.checkout.Amount = {\\n\\tcurrency: \\&quot;USD\\&quot;,\\n\\tvalue: 1000\\n};\\n\\nconst achDetails: Types.checkout.AchDetails = {\\n\\tbankAccountType: Types.checkout.AchDetails.BankAccountTypeEnum.Checking,\\n\\townerName: \\&quot;chargeback:R01\\&quot;,\\n\\tbankAccountNumber: \\&quot;1234567890\\&quot;,\\n\\ttype: Types.checkout.AchDetails.TypeEnum.Ach,\\n\\tbankLocationId: \\&quot;121000358\\&quot;\\n};\\n\\nconst billingAddress: Types.checkout.BillingAddress = {\\n\\tcountry: \\&quot;US\\&quot;,\\n\\tstateOrProvince: \\&quot;NY\\&quot;,\\n\\tcity: \\&quot;Amsterdam\\&quot;,\\n\\thouseNumberOrName: \\&quot;50\\&quot;,\\n\\tstreet: \\&quot;Test Street\\&quot;,\\n\\tpostalCode: \\&quot;12010\\&quot;\\n};\\n\\nconst paymentRequest: Types.checkout.PaymentRequest = {\\n\\treference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n\\tamount: amount,\\n\\tmerchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n\\tpaymentMethod: achDetails,\\n\\tbillingAddress: billingAddress\\n};\\n\\n\\\/\\\/ Make the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Note that the request succeeds with <code>resultCode<\/code>: <strong>Authorised<\/strong>.<br \/>\nThe <a href=\"#ach-return-flow\">ACH return flow<\/a> starts after the test payment is captured and settled.<\/p>\n<\/li>\n<li>\n<p>Wait for the <strong>CHARGEBACK<\/strong> webhook and check your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a> &gt; <strong>Revenue &amp; risk<\/strong> &gt; <strong>Disputes<\/strong>.<br \/>\nThe webhook and your Customer Area show a chargeback with the return reason code that you specified in the payment request.<\/p>\n<\/li>\n<\/ol>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/payment-methods\/ach-direct-debit\"\n                        target=\"_self\"\n                        >\n                    ACH Direct Debit\n                <\/a><\/li><li><a href=\"\/payment-methods\/ach-direct-debit\/verification-with-giact\"\n                        target=\"_self\"\n                        >\n                    Account validation with giact\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/risk-management\/chargeback-guidelines\/ach-chargebacks","articleFields":{"description":"Learn about ACH returns and when you can retry an ACH Direct Debit payment.","type":"page"},"algolia":{"url":"https:\/\/docs.adyen.com\/risk-management\/chargeback-guidelines\/ach-chargebacks","title":"ACH Direct Debit chargebacks","content":"ACH refers to chargebacks as returns. It is not possible to defend ACH returns. You have the following options:\n\nTo reduce the risk of chargebacks, you can use an external account validation service.\nIn case of a Notification of Change, you can prevent future returns by asking the customer to update their account details.\nIn some cases you can retry the payment.\n\nCauses of ACH chargebacks\nBecause the ACH network is unable to provide real-time authorizations, an authorised payment can be reversed due to insufficient funds. Such chargebacks usually happen three to five days after the date of the direct debit payment. Additionally, consumers can dispute direct debit payments up to two years after the settlement date, claiming they did not authorize the payment or withdrew their authorization. Businesses can do this up to one year after settlement.\nThis is different from credit card transactions, where a customer can initiate a chargeback by claiming that a product or service was not what they expected.\nReduce the chargeback risk\nTo reduce the risk of ACH returns, we recommend using an external service to validate the customer's account details on their first transaction. External services that we support:\n\ngiact gVERIFY\n\nRefunding disputed payments\nAdyen delays refunds for three days after a payment has settled. This delay helps prevent a scenario where, after a payment has settled, you issue a refund and a customer initiates a chargeback at around the same time. If you try to issue a refund but a customer inititates a chargeback within those three days, the refund request is canceled automatically and you will receive a  CHARGEBACK webhook.\nACH return flow\nAfter an ACH Direct Debit payment is authorized, captured, and settled, the ACH return flow is as follows:\n\nOptional: Notification of Change\nOptional: Request for Permission to Return\nOptional: Information Supplied\nNotification of Chargeback\nChargeback\nRetry\n\n\nOptional: Notification of Change\nIf bank account details have changed, Adyen receives a Notice of Change. This happens, for example, if the customer's bank has been taken over by another bank. Usually there is a grace period when payments using the old account details are still accepted. But when the grace period ends, payments using the old account details are returned. If you subscribed to  DIRECT_DEBIT_NOTICE_OF_CHANGE_NOTIFICATION webhooks, Adyen then sends an ach.notificationOfChange webhook event with the details. \nWhen banks inform us that account details have changed, we update the account details saved in our system as much as possible. If you make recurring payments, the existing shopperReference is updated with the new account details in many cases. However, you should still inspect the Direct Debit Notice of Change Notification webhook to see if details are missing and you need ask the customer to update their account details in your system.\nThe following example illustrates the content of a Direct Debit Notice of Change Notification webhook with an ach.notificationOfChange event.\n\n    \n\nOptional: Request for Permission to Return\nTo verify the account holder, the issuing bank has asked for supporting documents. Adyen contacts you to provide those documents.\nAt this point, funds are not yet deducted from your account.\nOptional: Information Supplied\nAdyen has received your supporting documents and has shared them with the issuing bank.\nAt this point, funds are not yet deducted from your account.\nNotification of Chargeback\nThe issuing bank or the customer has initiated an ACH return. You receive a  NOTIFICATION_OF_CHARGEBACK webhook with the details. You cannot defend the return, but it may be allowed to retry the payment.\nChargeback\nYour account is debited for the ACH return. You receive a  CHARGEBACK webhook. You cannot defend the return, but it may be allowed to retry the payment.\nDecide if you can retry the payment\nTo indicate the reason of the return, ACH provides a reason code that we return in the NOTIFICATION_OF_CHARGEBACK and CHARGEBACK webhooks, and in your Customer Area &gt; Revenue &amp; risk &gt; Disputes. Depending on the reason code, you can retry the transaction or take some other action.\nHowever, some transactions cannot possibly succeed, for example because the customer's account has been closed. If you repeatedly retry transactions that will never succeed, the National Automated Clearinghouse Association (Nacha) imposes fines, and we have to block you from sending any new ACH Direct Debit transactions.\nUse the following table with the most common ACH return reason codes to determine if it is allowed to retry a returned ACH Direct Debit payment.\n\n    \n\n\n\nReason code\nReason\nDescription \/ Resolution\nRetry?\n\n\n\n\nR01\nInsufficient funds\nYou can retry the transaction up to two times within 30 days of the original authorization date.\n max&nbsp;2x\n\n\nR02\nAccount closed\nRetrying the transaction is not allowed. Initiate a new transaction using an external validation service.\n\n\n\nR03\nNo Account\/Unable to locate account\nThe provided account information is incorrect. Retrying the transaction is not allowed. Initiate a new transaction using an external validation service.\n\n\n\nR04\nInvalid account number\nThe provided account number is incorrect. Retrying the transaction is not allowed. Initiate a new transaction using an external validation service.\n\n\n\nR05\nUnauthorized debit to consumer account\nA corporate transaction was charged to a consumer account and was disputed by the customer. Suspend any recurring payments and resolve the issue with the customer. If you are going to debit the same account for a new transaction, make sure the customer's bank stops blocking transactions from your company to this account.\n\n\n\nR06\nReturned per ODFIs request\nYour bank asked the customer's bank to reverse the transaction. Retrying the transaction is not allowed. Contact your bank.\n\n\n\nR07\nAuthorization revoked by customer\nThe customer informed their bank they revoked authorization for the transaction. Suspend any recurring transactions and resolve the issue with the customer. If you are going to debit the same account for a new transaction, make sure the customer's bank stops blocking transactions from your company to this account.\n\n\n\nR08\nPayment stopped or stop payment on item\nThe customer instructed their bank to not honor a payment they previously authorized. Resolve the issue with the customer. When initiating a new transaction (using an external validation service), get new proof of authorization from the customer. If you are going to debit the same account, make sure the customer's bank stops blocking transactions from your company to this account.\n\n\n\nR09\nUncollected funds\nInsufficient funds. You can retry the transaction up to two times within 30 days of the original authorization date.\n max&nbsp;2x\n\n\nR10\nCustomer Advises Originator is Not Known to Receiver and\/or Originator is Not Authorized by Receiver to Debit Receiver\u2019s Account\nThe customer disputed the transaction. Retrying the transaction is not allowed. Resolve the issue with the customer. If you are going to debit the same account for a new transaction, make sure the customer's bank stops blocking transactions from your company to this account.\n\n\n\nR11\nCustomer Advises Entry Not in Accordance with the Terms of the Authorization\nThe customer informed their bank that the payment is not in accordance with the authorization terms. Suspend any recurring transactions and resolve the issue with the customer. You can retry the transaction within 60 days of the original settlement date.\n\n\n\nR12\nBranch sold to another DFI\nThe customer's account has migrated to another financial institution. Ask the customer to update their account details in your system.\n\n\n\nR13\nInvalid ACH routing number\nThe provided routing number does not belong to any bank in the ACH network. Ask the customer for the correct routing number, or contact your bank if you are sure the number is correct.\n\n\n\nR15\nBeneficiary or account holder deceased\nContact the bank of the deceased account holder or account beneficiary.\n\n\n\nR16\nAccount frozen\nContact your customer to obtain a different form of payment. The bank account cannot be used while it is frozen. This return code should be a red flag for your business. If you see this code, do your due diligence around verifying the identity of your customer.\n\n\n\nR17\nFile record edit criteria\nThe customer's bank had a technical problem with processing the ACH transaction.\n\n\n\nR20\nNon-transaction account\nThe provided bank account cannot be used for ACH payments. Ask the customer for permission to charge a different, ACH-enabled bank account.\n\n\n\nR29\nCorporate customer advises not authorized\nThe company you tried to charge has disputed the transaction. Retrying the transaction is not allowed. Resolve the issue with the other company. If you are going to debit the same account for a new transaction, make sure the other company's bank stops blocking transactions from your company to this account. It is possible the issue is resolved if the other company adds the Adyen ACH Company ID for payments to the allowlist of their business account.\n\n\n\nR31\nPermissible return entry\nThe business account holder or their bank has asked to reverse the transaction. Contact your bank for more information. Contact the customer to resolve the issue.\n\n\n\nR51\nItem is ineligible, notice not provided, signature not genuine\nTo determine what to do, you need to find out the underlying reason why the payment was returned. Contact Adyen if you need help.\n\n\n\n\n\n\n\nTest a chargeback scenario\nYou can try out the ACH return flow by sending an ACH Direct Debit test payment. The ownerName in the test payment indicates the chargeback scenario that you want to test.\nNote that in the test environment the return flow goes directly to the Chargeback stage. The optional stages and the Notification of Chargeback stage are skipped.\nTo test a chargeback:\n\n\nSend an ACH Direct Debit payment request using the following account details.\n\n\n\nParameter\nDescription\n\n\n\n\nownerName\nchargeback:REASON_CODE. For example, chargeback:R01\n\n\nbankAccountNumber\nAny correctly formatted account number. For example, 1234567890\n\n\nbankLocationId\nThe routing number. Use 011000138 or 121000358\n\n\nbillingAddress\nThe account owner's address. Use any correctly formatted US address.\n\n\n\n\n\n\n\n\nNote that the request succeeds with resultCode: Authorised.\nThe ACH return flow starts after the test payment is captured and settled.\n\n\nWait for the CHARGEBACK webhook and check your Customer Area &gt; Revenue &amp; risk &gt; Disputes.\nThe webhook and your Customer Area show a chargeback with the return reason code that you specified in the payment request.\n\n\nSee also\n\n\n                    ACH Direct Debit\n                \n                    Account validation with giact\n                \n","type":"page","locale":"en","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Risk management","lvl2":"Chargeback guidelines","lvl3":"ACH Direct Debit chargebacks"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/risk-management","lvl2":"https:\/\/docs.adyen.com\/risk-management\/chargeback-guidelines","lvl3":"\/risk-management\/chargeback-guidelines\/ach-chargebacks"},"levels":4,"category":"Risk Management","category_color":"green","tags":["Direct","Debit","chargebacks"]},"articleFiles":{"ACH-return-flow.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/10.risk-management\/21.chargeback-guidelines\/ach-chargebacks\/ACH-return-flow.png\" \/>","1194239097.js":"<p alt=\"\">1194239097.js<\/p>"}}
