Payments

Bank Transfers

Accept payments directly from your customers' bank accounts. Great for large amounts or customers who prefer not to use cards.

6 min read

How Bank Transfers Work

  1. Customer chooses "Bank Transfer" at checkout
  2. They enter their bank account details
  3. Money moves directly from their account to yours
  4. You get notified when the payment completes

Why use bank transfers?

  • • Lower fees than card payments
  • • Better for large amounts ($1,000+)
  • • Some customers prefer paying this way
  • • No chargebacks

Types of Bank Transfers

TypeSpeedBest For
ACH (US)3-5 business daysRecurring payments, subscriptions
SEPA (Europe)1-2 business daysEuropean customers
Wire TransferSame dayLarge, urgent payments
RTGS (Africa)Same dayHigh-value African transfers
EFT (Various)2-3 business daysStandard bank transfers

Accept Bank Transfers

To collect a bank transfer payment, create a payment with the bank_transfer method:

POST /v1/payments

{
  "amount": 50000,
  "currency": "USD",
  "payment_method_types": ["bank_transfer"],
  "bank_transfer": {
    "type": "ach"
  },
  "customer_email": "customer@example.com",
  "description": "Invoice #1234"
}

The response includes bank details the customer needs to complete the transfer.

Virtual Bank Accounts

Create unique bank account numbers for each customer. When they send money to that account, we automatically match it to their payment.

// Create a virtual account for a customer
POST /v1/virtual_accounts

{
  "customer_id": "cus_abc123",
  "currency": "USD",
  "description": "Payment account for John Smith"
}

// Response includes the virtual account details
{
  "id": "va_xyz789",
  "bank_name": "ClapPay Bank",
  "account_number": "1234567890",
  "routing_number": "021000021",
  "customer_id": "cus_abc123"
}

Give these details to your customer. Any transfer to this account will be automatically credited to their balance.

Verify Bank Accounts

Before you can debit a customer's bank account (for recurring payments), you need to verify they own it. There are two ways:

Instant Verification (Recommended)

Customer logs into their bank through a secure connection. Takes seconds.

// Create a bank account with instant verification
POST /v1/bank_accounts

{
  "customer_id": "cus_abc123",
  "verification_method": "instant"
}

// Returns a link for customer to complete
{
  "id": "ba_xyz789",
  "verification_url": "https://connect.clappay.com/verify/..."
}

Micro-deposits

We send two small deposits (like $0.32 and $0.45) to the account. Customer tells us the amounts to prove they can see the account.

// Create bank account with micro-deposits
POST /v1/bank_accounts

{
  "customer_id": "cus_abc123",
  "account_number": "1234567890",
  "routing_number": "021000021",
  "verification_method": "micro_deposits"
}

// Later, verify the amounts
POST /v1/bank_accounts/ba_xyz789/verify

{
  "amounts": [32, 45]
}

Handle Payment Status

Bank transfers can take time. Listen for webhooks to know when payments complete:

EventWhat It Means
payment.pendingTransfer started, waiting for funds
payment.succeededMoney received successfully
payment.failedTransfer failed (insufficient funds, etc.)
payment.returnedBank returned the payment

Don't fulfill orders until you receive payment.succeeded.

Handle Failed Transfers

Bank transfers can fail for several reasons:

ReasonWhat To Do
Insufficient fundsAsk customer to add money and try again
Account closedCustomer needs to use a different account
Invalid accountDouble-check the account number
Bank rejectedCustomer should contact their bank

Best Practices

  • Set clear expectations - Tell customers that bank transfers can take 1-5 business days.
  • Don't ship until confirmed - Wait for the webhook to confirm the transfer completed.
  • Use virtual accounts - They make it easy to match incoming payments to customers.
  • Offer multiple options - Let customers choose between cards and bank transfers.
  • Watch for returns - Bank transfers can be returned up to 60 days later (unlike chargebacks on cards).

Related Articles