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.
Requirements
Requirement | Description | |
---|---|---|
Integration type | Make sure that you have an existing API-only integration. | |
Limitations | Account validation with giact gVERIFY:
For cost reasons, we recommend using giact validation only on the shopper's initial transaction, and when the shopper changes their account. |
. |
Setup steps | Before you begin:
|
How it works
-
The shopper selects ACH Direct Debit on your payment form.
-
You collect the required details from the shopper:
- Bank account number
- ACH routing number
Alert your shoppers that some banks have different routing numbers for different transfers. Shoppers should not provide their wire transfer routing number.
- Bank account type: checking or savings.
The account type is not verified by giact. But you need to specify it when you make a payment request for the actual amount. This avoids unnecessary chargebacks due to account type mismatches.
- 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.
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.type
: achpaymentMethod.bankAccountNumber
: the bank account number.paymentMethod.bankAccountType
: the type of bank account. Allowed values: checking, savings.paymentMethod.bankLocationId
: the ACH routing number of the account.paymentMethod.ownerName
: the name on the bank account.billingAddress
(Optional): the account owner's address information.amount.currency
: USDamount.value
: 0
-
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.
Code | Description |
---|---|
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.
Testing:
- 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.