Skip to main content
Before you can run payroll or send payouts, your business account needs funds. Cadana supports three funding methods: bank transfer, ACH direct debit, and crypto deposits.

Check Your Balance

View your current account balances at any time.
bash
curl -X GET 'https://api.cadanapay.com/v1/businesses/8ef9a712-cdae-4110-b1ea-9ba95abbee6e/balances' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Sandbox Funding

In sandbox, use the deposit endpoint to add test funds instantly. No bank linking required.
bash
curl -X POST 'https://api.cadanapay.com/v1/sandbox/business-deposits' \
  -H 'Authorization: Bearer YOUR_API_KEY'
Returns 204 on success. The funds are available immediately.
Amounts are in the lowest denomination of the currency. For USD, 10000000 = $100,000.00.

Bank Transfer

Transfer funds from your bank to your Cadana business account using the account details provided by Cadana. Supports domestic ACH, wire (USD), and international SWIFT transfers.

Get Your Funding Details

Retrieve the bank account details to send funds to. These are also available in the Dashboard under Business > Account > Top up Account.
bash
curl -X GET 'https://api.cadanapay.com/v1/businesses/8ef9a712-cdae-4110-b1ea-9ba95abbee6e/funding-details' \
  -H 'Authorization: Bearer YOUR_API_KEY'
The response returns one or more funding accounts depending on the currencies enabled for your business. Pass the optional currency query parameter to filter by a specific currency. Example — USD: For USD, the response includes three transfer methods: ACH, wire, and SWIFT.
{
  "data": [
    {
      "type": "ach",
      "currency": "USD",
      "bankName": "Column NA",
      "bankAddress": "123 Main St, San Francisco, CA 94100",
      "accountName": "Cadana Inc",
      "accountNumber": "000000000000000",
      "accountType": "Business Checking",
      "routingNumber": "000000000"
    },
    {
      "type": "wire",
      "currency": "USD",
      "bankName": "Column NA",
      "bankAddress": "123 Main St, San Francisco, CA 94100",
      "accountName": "Cadana Inc",
      "accountNumber": "000000000000000",
      "routingNumber": "000000000"
    },
    {
      "type": "swift",
      "currency": "USD",
      "bankName": "Column NA",
      "bankAddress": "123 Main St, San Francisco, CA 94100",
      "accountName": "Cadana Inc",
      "accountNumber": "000000000000000",
      "swiftCode": "XXXXUS00"
    }
  ]
}
Example — EUR:
{
  "data": [
    {
      "type": "iban",
      "currency": "EUR",
      "bankName": "Banking Circle S.A.",
      "branchName": "Copenhagen",
      "bankAddress": "123 Main St, Copenhagen, Denmark",
      "accountName": "Cadana Inc",
      "accountNumber": "DK0000000000000000",
      "swiftCode": "XXXXDKKK",
      "country": "DK"
    }
  ]
}
Use these details to initiate a transfer from your bank. Funds are credited to your Cadana balance once the transfer settles.
Transfer TypeCurrencyTypical Settlement
ACHUSD1–3 business days
WireUSDSame day or next business day
SWIFTMultiple1–5 business days

ACH Direct Debit (USD only)

Link an external US bank account and pull funds directly into your Cadana account.

Connect a Bank Account

There are two ways to link a bank account: Via Dashboard: Go to Settings > Payment Methods > Add payment method and follow the on-screen flow. Via hosted link (for platforms): Generate a hosted link that opens the bank connection flow. The user completes it in their browser and is redirected to your app.
bash
curl -X POST 'https://api.cadanapay.com/v1/businesses/8ef9a712-cdae-4110-b1ea-9ba95abbee6e/external-accounts/link' \
  -H 'Authorization: Bearer YOUR_API_KEY'
Response:
{
  "url": "https://app.cadanapay.com/external-accounts/link/..."
}
Redirect the user to the returned url. Once they complete the flow, the account appears in your external accounts list.
Pass mode: "setup" to skip the entry page and go directly to the bank selection flow.

Verify the Linked Account

Confirm the account is active after the user completes the linking flow.
bash
curl -X GET 'https://api.cadanapay.com/v1/businesses/8ef9a712-cdae-4110-b1ea-9ba95abbee6e/external-accounts' \
  -H 'Authorization: Bearer YOUR_API_KEY'
Response:
[
  {
    "id": "d43eaff3-bc75-44f6-ac37-3a305192ead6",
    "last4": "0000",
    "bankName": "Example Bank",
    "status": "ACTIVE",
    "provider": "PLAID"
  }
]

Create a Deposit

Initiate an ACH debit from the linked bank account. Also available in the Dashboard under Business > Account > Top up Account > ACH Direct Debit.
bash
curl -X POST 'https://api.cadanapay.com/v1/businesses/8ef9a712-cdae-4110-b1ea-9ba95abbee6e/deposits' \
  -H 'Authorization: Bearer YOUR_API_KEY'
Response:
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef0123456789"
}
ACH deposits typically take 1–3 business days to settle. Your balance updates once the transfer completes.

Crypto Funding

Fund your account by sending USDC or USDT to your Cadana crypto wallet address.
Crypto funding is not enabled by default. Contact your account manager to set it up.

Supported Chains

TokenSupported Chains
USDCEthereum, Solana, Arbitrum, Base, Polygon
USDTEthereum, Solana, Tron

Get Your Crypto Wallet Address

Call the funding details endpoint with currency=USDC or currency=USDT. The response includes a cryptoWallets array with addresses for each supported chain. Example response:
{
  "cryptoWallets": [
    {
      "currency": "USDC",
      "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
      "chain": "ethereum"
    },
    {
      "currency": "USDC",
      "address": "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs",
      "chain": "solana"
    }
  ]
}
Always verify the chain matches the network you’re sending from. Sending tokens on the wrong chain will result in lost funds.
If a memo is returned, you must include it in your transaction. Deposits without the required memo may not be credited.

Webhook Notification

When funds arrive in your business account, Cadana emits a transaction.succeeded event with type: "DEPOSIT". Subscribe to this event to programmatically detect when your account has been funded.
JSON
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "eventType": "transaction.succeeded",
  "version": "1.0",
  "timestamp": "2025-06-15T14:30:00Z",
  "data": {
    "id": "d7e8f9a0-b1c2-3456-def0-123456789abc",
    "amount": {
      "currency": "USD",
      "amount": 500000
    },
    "type": "DEPOSIT",
    "reference": "dep-ref-001",
    "recipientId": "acct-9bd99534-8c7f-4b2a",
    "tenantKey": "cad95193904"
  }
}
See Webhooks for setup instructions.

Insufficient Funds During Payroll

If you approve a payroll without sufficient balance, it moves to awaiting funds status. Once you fund the account, the payroll proceeds automatically — no need to re-approve. See Payroll Lifecycle for details.