Bank Account Verification
In order to ensure the highest possible payment success rates and to meet industry obligations, Check verifies bank accounts for correctness and ownership. The correctness check (also known as ‘validation’ in our API), ensures that the bank account provided is a real one. The ownership check (also known as ‘verification’ in our API), ensures that the entity providing the bank account information owns that bank account.
While validations are required for all bank accounts, verifications are only required for bank accounts that Check wants to pull funds from (or debit). This means that:
- Company bank accounts are both validated and verified
- Employee and Contractor bank accounts are only validated
How validations and verifications work
There are two ways a Company, Employee, or Contractor can connect their bank accounts to Check:
- by using Plaid — this is called a plaid_bank_account
- by providing routing and account numbers — this is called a raw_bank_account
Plaid bank accounts
New changes to company Plaid bank accounts
All company Plaid bank accounts will no longer be immediately verified upon linking. It will have status
disabled_recoverable
with reasonverification_pending
until the ownership can be verified either from the Plaid identity information or through bank account verification documents.
Plaid bank accounts can be created using Check Onboard, or by sending Check a Plaid processor token.
Validations
When connecting a plaid_bank_account
, accounts are automatically validated by Plaid — this is the most seamless way of connecting a bank account.
Verifications
All accounts other than company bank accounts are automatically verified by Plaid.
For all company accounts, Check automatically requests identity information from Plaid at the time that the account is linked. If Check is unable to obtain the identity information from Plaid or the identity information is insufficient, the request for bank account verification document(s) will be surfaced in the Requirements API and under the “Company Actions” tab in Console UI for that specific company.
Read more about fulfilling bank account verification document requests here.
Raw bank accounts
Validations
Check automatically validates all raw_bank_account
s as soon as they are created. This is done by initiating a $0 ACH payment to the raw_bank_account
. These $0 ACH payments are not visible to the account holder. If the payment fails (typically within 2 banking days), the validation check fails and the raw_bank_account
is disabled. Check assumes that the account is valid unless this $0 transaction fails.
Verifications
In order to verify a raw bank account (only required for companies), you must fulfill the bank account verification requirement that is created for the company. This request is surfaced as a bank account verification requirement in the the Requirements API and in the Console UI under "Company Actions" for a specific company.
Read more about fulfilling bank account verification document requests here.
Recovering from failed validations and verifications
Validation
Bank account validation failures happen when incorrect bank account information is provided. When bank account validation fails, the bank account is moved to a disabled_irrecoverable
state and any attempt to move money in or out of the account will result in the payment being rejected by the bank.
In order to recover from this, the account must be replaced with a new bank account your user provides. This new bank account will be validated as soon as it is created in our systems.
Verification
Bank account verification might fail if the documentation provided is incorrect or if it fails our fraud checks. When this happens, bank accounts stay in the disabled_recoverable
state. In order to successfully verify a bank account, updated documentation should be provided. You may also update the bank account to a different bank account and provide documentation for the new account.
Validations and Verifications in the API
The status
and disabled_reason
fields in the bank_account object and bank_account webhook can be used to determine the validation and verification state of a bank account.
Bank accounts can be used to process payroll as long as they are not in a disabled
state. This means that
- Bank accounts cannot be used in payroll if status is
disabled_recoverable
ordisabled_irrecoverable
- Bank accounts can be used for payroll if status is
validation_pending
,validated
orownership_verified
Employee bank accounts
Employee bank accounts start off in a validation_pending
state and can move to validated
if validation is successful or disabled_irrecoverable
if validation fails.

Employee and contractor bank verification flow
Company bank accounts
Company bank accounts start off in a disabled_recoverable
state. Once the supporting documents are verified, they move to a validation_pending
state and then to a ownership_verified
state if validation succeeds or disabled_irrecoverable
if validation fails.

Company bank verification flow
Failure reasons
When bank accounts are disabled, you can tell your users the reason the account is disabled by looking at the value of the disabled_reason
parameter. Possible values here include:
validation_failed
: the bank account failed our validation process and a new bank account must be providedfailed_payment
: an attempted payment to this bank account has failed and a new bank account must be providedverification_pending
: verification is in progress (company bank accounts only). If the verification documents have not been already sent to Check, they should be emailed to [email protected].verification_failed
: verification has failed (company bank accounts only) and a new bank account or new verification documents must be provided.
Documentation around the values these fields can contain can be seen in our API reference here.
Updated 5 months ago