Skip to main content
A bank account is where a payout lands. A wallet is a saved crypto address for a customer. Both belong to one customer.

Bank accounts

Add a bank account

The customer must be VERIFIED. Call POST /bank/create with the rail in bank_account_type and its fields in identifiers.
You can instead send the flat fields account_number and ifsc, or vpa, without identifiers. Save the returned id. Quotations use it as bank_id.
For beneficiaries in other markets (UAE, UK, SEPA, Brazil, Mexico, US and others), use POST /bank/payout/create instead.

Rules

  • The account holder’s name must match the customer’s KYC name. Zapyd checks it.
  • A customer can have up to 3 active accounts per rail.
  • An account that’s already linked to another customer is rejected.
  • NRE accounts aren’t supported in India.
  • India remittance payouts (RDA) need ACCOUNT_DETAILS. UPI isn’t supported for them.

Verification

Zapyd verifies each new account, for example with a penny drop in India. The status moves from PROCESSING to VERIFIED or FAILED, and Zapyd sends a BANK webhook. In sandbox, set the result yourself with Mock Bank Verification. It doesn’t send a BANK webhook, so read the account afterwards.

List, fetch and delete

Wallets

Save a customer’s crypto address with POST /customer/wallet/add. If the address already exists for that customer, Zapyd updates it.
  • network is case-insensitive: Ethereum, Polygon, Arbitrum, Bsc, Solana, Tron, or Sepolia in sandbox.
  • Zapyd checks the address format against the network: 0x… for EVM networks, T… for Tron, base58 for Solana.
  • Only wallets with a label appear in List Wallets, which works as the customer’s address book.
To fetch or delete a wallet, use GET /customer/wallet/{customer_id}/{wallet_id} or Delete Wallet.
Payin crypto goes to your organization’s wallet for that asset and network, which is set up during onboarding. It doesn’t go to a saved customer wallet. See Payins.