Bank Account Verification

Verify recipient bank accounts before processing payouts

Bank account verification allows you to validate recipient bank account details before initiating payout transactions. This helps reduce failed payouts, confirms account holder information when available, and improves reconciliation.

Introduction

When processing bank payouts, recipient account validation is not performed as part of the payout request. Verifying the account beforehand lets you:

  • Reduce failed payouts — Confirm the account exists and is open before sending funds
  • Match identity — Optionally verify that the account holder name or identity matches (e.g. SA ID, passport, or business registration)
  • Improve UX — Show the account holder name for confirmation before disbursement
  • Avoid wasted fees — Catch invalid or closed accounts early

Bank account verification is currently available for South Africa (ZAR). Use the same bank codes as for ZAR payouts.

Prerequisites

  • CrissCross Integration: You have integrated with CrissCross and have access to the API.
  • Authentication: Valid API credentials and Bearer token. See Authentication.
  • Merchant ID: Your merchant ID for API requests.
  • Supported market: ZAR (South Africa). Contact CrissCross for other markets.

API Endpoint

Endpoint: POST https://api.crisscross.money/v1/verification/bank-account

Authentication: Bearer Token (required)

Request Format

Minimum required fields: accountNumber, bankCode, country, merchantId. Optionally include accountHolder to verify name/identity match.

1{
2 "accountNumber": "4080499390",
3 "bankCode": "absa",
4 "country": "ZAF",
5 "merchantId": "your-merchant-id"
6}

With optional account holder details (for identity/name matching):

1{
2 "accountNumber": "4080499390",
3 "bankCode": "absa",
4 "country": "ZAF",
5 "merchantId": "your-merchant-id",
6 "accountType": "current",
7 "accountHolder": {
8 "type": "individual",
9 "initials": "J",
10 "familyName": "Clegg",
11 "identityDocument": {
12 "country": "ZA",
13 "number": "5306075800082"
14 }
15 }
16}

Request Parameters

ParameterTypeRequiredDescription
accountNumberstringYesBank account number to verify
bankCodestringYesBank identifier. For ZAR use a supported bank code (e.g. absa, standard_bank, fnb)
countrystringYes3-letter ISO country code (e.g. ZAF for South Africa)
merchantIdstringYesYour merchant ID
accountTypestringNocurrent or savings; verified if provided
accountHolderobjectNoAccount holder details for identity/name matching (see below)

accountHolder (optional):

  • type: individual or business
  • Individual (South African ID): initials, familyName, identityDocument: { country, number } (2-letter country, e.g. ZA)
  • Individual (passport): initials, familyName, passport: { country, number } for foreign account holders
  • Business: name, registration: { country, number } (business registration number)

Response Format

1{
2 "verified": true,
3 "accountHolderName": "J Clegg",
4 "accountExists": true,
5 "identityMatch": true,
6 "accountOpen": true,
7 "accountAcceptsCredits": true
8}

Response Fields

FieldTypeDescription
verifiedbooleanOverall result: account valid and open, and any provided identity/name matched
accountHolderNamestringAccount holder name as returned by the bank, when available
accountExistsbooleanWhether the account exists at the bank
identityMatchbooleanWhether provided identity/registration matched (only when accountHolder was sent)
accountOpenbooleanWhether the account is still open
accountAcceptsCreditsbooleanWhether the account can receive credits (e.g. payouts)

Example Usage

$curl -X POST https://api.crisscross.money/v1/verification/bank-account \
> -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
> -H "Content-Type: application/json" \
> -d '{
> "accountNumber": "4080499390",
> "bankCode": "absa",
> "country": "ZAF",
> "merchantId": "your-merchant-id"
> }'

Success (200 OK):

1{
2 "verified": true,
3 "accountHolderName": "J Clegg",
4 "accountExists": true,
5 "accountOpen": true,
6 "accountAcceptsCredits": true
7}

Unverified (200 OK):

1{
2 "verified": false,
3 "accountExists": false
4}

Integration Workflow

  1. Collect recipient details — Account number, bank code (use ZAR bank codes), and optionally name/identity for matching.
  2. Verify before payout — Call POST /verification/bank-account before creating the payout.
  3. Confirm with user — If verified, show accountHolderName for confirmation (e.g. “Send payout to J Clegg?”).
  4. Create payout — If verified (or if you proceed anyway), create the payout with Single Payout or Bulk Payout, using the same accountNumber and bankCode.

Best Practices

  • Verify before processing — Call verification for ZAR bank payouts when you want to reduce failures and show account holder name.
  • Use same bank codes — Use the same bankCode values for verification and for the payout request; see South Africa — Bank codes.
  • Optional identity matching — Send accountHolder when you have SA ID, passport, or business registration to verify the account holder.
  • Handle unverified — If verified is false, you can still attempt the payout or ask the user to confirm/update details.
  • Audit trail — Log verification results with payout transactions for reconciliation.

Supported Markets

Bank account verification is currently available for:

  • South Africa (ZAF): ZAR bank accounts. Use bank codes from the South Africa payout guide.

Support for additional markets may be available. Contact CrissCross support for your use case.