GuidesRecipesAPI ReferenceChangelog
Guides

Verifying External Bank Accounts

How do I create a bank account identity verification?

Overview

Verify external bank account ownership against a customer's KYC information. For general identity verification concepts, states, and return codes, see Identity Verification.

What is a bank account identity verification?

To process transfers on the Cybrid Platform, the customer connecting the external bank account must own that account and have completed KYC. The bank account identity verification confirms that the name on the external bank account matches the name provided during KYC.

Required

Bank account identity verifications are required before creating transfers on the Cybrid Platform.

ℹ️

Scope

Bank account verifications are currently only required for individual customers, not business customers.

Creating a bank account identity verification

Prerequisites:

  • The individual customer state is verified (the customer has completed KYC)
  • The external bank account state is unverified (created but not yet verified)

With these prerequisites met, create a bank account identity verification via POST /api/identity_verifications (API reference).

Cybrid Plaid

If you use Cybrid's Plaid services, create an identity verification with type set to bank_account and method set to account_ownership.

The account_ownership method does not require additional customer details because the information is verified against the Plaid-connected bank account.

Example POST /api/identity_verifications request body for account_ownership:

{
  "type": "bank_account",
  "method": "account_ownership",
  "customer_guid": "<insert customer_guid>",
  "external_bank_account_guid": "<insert external_bank_account_guid>"
}

Partner Plaid

If you use your own Plaid services (via plaid_processor_token), create an identity verification with type set to bank_account and method set to attested_ownership.

The attested_ownership method requires you to provide customer details. You can retrieve these from the Plaid Identity API.

Example POST /api/identity_verifications request body for attested_ownership:

{
  "type": "bank_account",
  "method": "attested_ownership",
  "name": {
    "first": "<insert first>",
    "last": "<insert last>",
    "full": "<insert full>"
  },
  "address": {
    "street": "<insert street>",
    "city": "<insert city>",
    "subdivision": "<insert state/province>",
    "postal_code": "<insert zip/postal code>",
    "country_code": "<insert country code>"
  },
  "customer_guid": "<insert customer_guid>",
  "country_code": "<insert country code>",
  "date_of_birth": "<insert dob>",
  "phone_number": "<insert phone>",
  "email_address": "<insert email>",
  "identification_numbers": [
    {
      "type": "<insert ID type>",
      "issuing_country_code": "<insert country code>",
      "identification_number": "<insert ID number>"
    }
  ],
  "external_bank_account_guid": "<insert external_bank_account_guid>"
}

Checking verification state

After creating a bank account identity verification, check the state and outcome using GET /api/identity_verifications/{identity_verification_guid} (API reference).

Waiting state

All bank account identity verifications progress immediately from storing to waiting.

When auto-approved or auto-rejected:

  • The verification progresses from waiting to completed (see Completed state below).

When neither auto-approved nor auto-rejected:

  • The verification remains in waiting.
  • A Persona document submission inquiry is automatically created for the customer to provide a supplementary document.
  • Use GET /api/identity_verifications/{identity_verification_guid} (API reference) to retrieve the persona_inquiry_id.
  • Share the Persona URL with the persona_inquiry_id directly with the customer (e.g., https://withpersona.com/verify?inquiry-id=<persona_inquiry_id>).
    • Alternatively, use the persona_inquiry_id and the Persona SDK to integrate the supplementary document upload into your application. See Verify with Persona SDK.
    • The Cybrid web SDK does not support bank account identity verifications.
  • The customer must upload a bank statement with the following information:
    • Date of the statement (must be within the last 90 days)
    • Customer name
    • Customer address
    • Bank account number
    • Bank name and logo
  • If the customer takes no action, the verification remains in waiting for up to 24 hours before expiring.
❗️

Bank statement requirements

Only the first page of the bank statement is required. Transactional data may be redacted or blurred.

Pending state

When the customer browses to the Persona URL:

  • The verification progresses from waiting to pending.
  • If the customer takes no further action, the verification remains in pending for up to 24 hours before expiring.

Reviewing state

When the customer uploads the supplementary document via the Persona URL:

  • The verification progresses from pending to reviewing.
  • The Cybrid team is notified that the document has been uploaded.
  • The verification remains in reviewing until the Cybrid team determines the outcome (passed or failed).

Completed state

When auto-approved or auto-rejected, the verification progresses immediately from waiting to completed.

Passed outcome

When auto-approved, or approved by the Cybrid team while in reviewing:

  • The verification progresses to completed with a passed outcome.

Success

When outcome is passed, the verification is complete and the external bank account progresses to state: verified.

Failed outcome

When auto-rejected, or rejected by the Cybrid team while in reviewing, the verification progresses to completed with a failed outcome. The failure_codes array returns one of:

  • name_check_failure -- The KYC name does not match the name on the bank account.
  • address_check_failure -- The KYC address does not match the address on the bank account.
  • phone_number_check_failure -- The KYC phone number does not match. This does not prevent passing.
  • email_address_check_failure -- The KYC email address does not match. This does not prevent passing.
  • decision_timeout -- The verification timed out.

The external bank account remains unverified until a successful verification completes.

❗️

Failure

When outcome is failed, create a new bank account identity verification to retry.

Expired state

When the verification remains in waiting for 24 hours:

  • The Persona document submission inquiry link expires and can no longer accept uploads.
  • The verification progresses to expired.

The external bank account remains unverified until a successful verification completes.

❗️

Expiration

When state is expired, the verification did not complete. Create a new bank account identity verification to retry.