Bank Account Verification
Verify bank account details and ownership when linking accounts for payments or payouts.
Every new bank account linked to Payload is verified through either an external verification service, like Plaid, or through Payload's built-in verification API. In situations where a bank doesn't support Plaid or Plaid doesn't make sense for the use-case, you can link and verify a bank account using Payload's built-in verification.
Understanding Verification Results
A linked bank account payment method has a verification_status field with the resulting status
of the verification. There are three values that can result from the verification attempt:
| Status | Description |
|---|---|
not_verified | Verification was not performed or not available |
verified | Verification was successful |
owner_verified | Verification and owner match was successful |
not_verified
An account with verification status not_verified indicates that verification could not be
performed. This is usually due to the bank or financial institution not supporting account
verification. Transactions against an unverified account can be rejected if the account details
were miskeyed or incorrect.
verified
An account with verification status verified indicates the account details were confirmed with
the bank or financial institution. It also means that an ownership match on the account was
either unsuccessful or not able to be performed.
owner_verified
An account with verification status owner_verified indicates the account details were
confirmed with the bank or financial institution and there was an ownership match found. An
ownership match can only be performed if the bank account is tied to a customer, or if the
account_holder field is provided.
Bank Account Fields
The following fields are used when linking a bank account for verification.
| Field | Description |
|---|---|
account_number | The bank account number |
routing_number | The ACH routing number for the account |
account_type | Either checking or savings |
account_class | (optional) Either personal or business |
account_holder | (optional) Name of business or individual owner of the account |
transfer_type | (optional) Either send_only, receive_only, or two_way. For a bank account used only to receive payouts (no debits), use receive_only; two_way also allows incoming funds. |
Testing Verification
Use the following values with a test API key to try out the different response conditions.
| Field | Value | Result |
|---|---|---|
routing_number | 011111111 | Returns a verification_status of not_verified |
account_number | 0009906 | Validation error on bank_account.account_number (test / loopback) |
account_holder | Valid Owner | Returns a verification_status of owner_verified |
Verifying via the API
When you create a bank account payment method with account_holder provided, Payload
automatically performs verification. The verification_status field on the response indicates
the result.
Verification is performed automatically when a bank account payment method is created. To
receive an owner_verified result, provide the account_holder field. Without it, ownership
matching cannot be performed and the best result will be verified.