When accepting ACH Direct Debit payments, Nacha requires you to validate that the shopper's bank account details are correct, if it is a consumer account. To make this validation easier for you, we have partnered with giact gVERIFY.
When you use giact gVERIFY, you can validate account details in real time. This reduces the chance that transactions are reversed because it turns out, for example, that the routing number is incorrect or the account has been closed.
Account validation with giact gVERIFY is supported for the following online payments integrations:
- API-only integration.
You can't use validation with giact if you use Web Drop-in or Web Components.
Account validation with giact gVERIFY works only in the live environment.
For cost reasons, we recommend using giact validation only on the shopper's initial transaction, and when the shopper changes their account.
How it works
The shopper selects ACH Direct Debit on your payment form.
You gather the required details from the shopper:
- Bank account number
- Bank routing number
- Account owner's name
- Account owner's address
You send a zero-value authorization request with the details that the shopper provided.
We send the details to giact gVERIFY and return the outcome in the zero-value authorization response.
Based on the the zero-value authorization response, you decide on your next step: make a payment request for the actual amount, or ask the shopper to provide correct details or use a different payment method.
Before you begin
- Get in touch with your Adyen contact and sign the contract addendum that specifies the terms and conditions for the use of account validation through giact.
- Ask our Support Team to enable giact verification and zero-value authorization for your Adyen account.
- Make sure that you have set up your back end implementation.
- Add ACH Direct Debit in your Customer Area.
Validate using zero-value authorization
After you have gathered the shopper's account details, verify those details as follows:
From your server, make a /payments request, specifying:
paymentMethod.bankAccountNumber: the bank account number.
paymentMethod.bankLocationId: the bank routing number of the account.
paymentMethod.ownerName: the name on the bank account.
billingAddress(Optional): the account owner's address information.
In the zero-value authorization response, check the following parameters:
additionalData.bankVerificationResultRaw: the details of the validation as reported by giact. See the table with validation result values.
additionalData.bankVerificationResult: indicates if the account passed the validation. Possible values: Passed or Failed.
Based on the response, determine your next step.
- If the account passed validation, make a payment request for the actual amount with the same account details that you provided in the zero-value request.
- If the account didn't pass validation, ask the shopper for the correct account details or for a different payment method.
Validation result values
In the zero-value authorization response, the
additionalData.bankVerificationResultRaw parameter can include the following information.
|1111||Account Verified - The checking account was found to be an open and valid account.|
|2222||AMEX Cheque - The checking account was found to be an open and valid American Express account.|
|3333||Non-Participant Provider - This account was reported with acceptable, positive data found in recent or current transactions.|
|5555||Savings Account Verified - The savings account was found to be an open and valid account.|
|7777||Account Verified - The checking account was found to be open and have a positive history.|
|8888||Savings Account Verified - The savings account was found to be open and have a positive history.|
|9999||This account was reported with acceptable, positive data found in recent transactions. Positive history exists for multiple transactions.|
|GN01||Negative information was found.|
|GN05||The routing number supplied is reported as not assigned to a financial institution.|
|GP01||The value for Details will vary depending on the Value for CheckReject reason in the Private Bad Checks List.|
|GS01||The routing number supplied did not match the format of a valid routing number.|
|GS02||The account number supplied did not match the format of a valid account number.|
|GS03||The check number supplied did not match the format of a valid check number.|
|GS04||The amount supplied did not match the format of a valid amount.|
|ND00||No positive or negative information has been reported on the account. This could be a small or regional bank that does not report.|
|ND01||No positive or negative information has been reported on the account. This routing number can only be valid for US Government financial institutions. Please verify this item with its issuing authority.|
|RT00||The routing number appears to be accurate however no positive or negative information has been reported on the account. Please contact customer to ensure that the correct account information was entered.|
|RT01||This account should be returned based on the risk factor being reported.|
|RT02||This account should be returned based on the risk factor being reported.|
|RT03||Current negative data exists on this account. Accept transaction with risk. (Example: Checking or Savings account in NSF status, recent returns, or outstanding items)|
|RT04||This is a Non Demand Deposit Account (post no debits), Credit Card Cheque, Line of Credit, Home Equity, or a Brokerage check.|
|RT05||Current negative data exists on this account. Accept transaction with risk. (Example: Checking or Savings account in NSF status, recent returns, or outstanding items)|
Test and go live
giact gVERIFY is only available in the live environment.
- To test a successful validation, make a zero-value authorization request with a valid bank account and routing number. The account will not be charged because the payment amount is USD 0.00.
- To test a failed validation, make a zero-value authorization request with an invalid bank account and routing number.