Customer Deposit Bank Accounts
How do I provision a routable deposit bank account for a customer's fiat account?
Deposit bank accounts are routable bank accounts that allow third-party Wire, ACH push, or RTP/FedNow transfers on and off the platform. They include complete routing details and beneficial owner information.
Each deposit bank account links to a single customer platform fiat account. Funds deposited or withdrawn flow through
the linked fiat account's platform_balance and platform_available. Deposit bank accounts do not hold funds
directly.
Key points:
- Currently, deposit bank accounts can only be created for US banks.
- Only one deposit bank account can be created for each platform fiat account.
- Transfers into a deposit bank account are never initiated by the Cybrid platform; they are always initiated externally.
- Beneficiary information is automatically populated from the PII collected during KYC.
Required for all customer fiat accounts (effective 2026-06-17)From 2026-06-17, every customer fiat account must have a
maindeposit bank account before any funding transfer can complete. Any deposit or withdrawal involving a customer fiat account without one is rejected with HTTP 422no_deposit_bank_account. Provision the deposit bank account immediately after creating the customer's fiat account, then wait forstate: createdbefore initiating transfers.
Existing production banksBanks already operating in production are unaffected at launch. Cybrid support will communicate a per-bank migration plan directly.
ACH push microdepositsExternally initiated ACH push microdeposits (such as those sent from external banks for account verification) will appear in the customer's deposit account history. These transactions can be identified by their small amounts (typically less than $2) and will be reflected in the account's balance and transaction history.
Create a main deposit bank account
A main deposit bank account creates a unique account_number and can accept deposits and initiate withdrawals.
Account opening and maintenance fees are outlined in your contract.
When processing a withdrawal, the recipient will see the customer's name and address on the transfer if
send_as_deposit_bank_account_guid is set.
POST /api/deposit_bank_accounts
{
"type": "main",
"customer_guid": "customer_guid",
"account_guid": "customer_fiat_account_guid"
}{
"created_at": "datetime",
"updated_at": "datetime",
"guid": "deposit_bank_account_guid",
"type": "main",
"bank_guid": "bank_guid",
"customer_guid": "customer_guid",
"account_guid": "customer_fiat_account_guid",
"asset": "USD",
"state": "created",
"unique_memo_id": "unique_memo_id",
"counterparty_name": "John Doe",
"counterparty_address": {
"street": "123 Main St",
"street2": null,
"city": "New York",
"subdivision": "NY",
"postal_code": "10001",
"country_code": "US"
},
"account_details": [
{
"account_number": "111222333"
}
],
"routing_details": [
{
"routing_number": "021000021",
"routing_number_type": "ABA"
}
],
"labels": null
}Poll GET /api/deposit_bank_accounts/{deposit_bank_account_guid} until state: created before initiating
transfers.
Handling no_deposit_bank_account errors
no_deposit_bank_account errorsIf a customer fiat account does not have a main deposit bank account, any funding transfer — whether a deposit or
withdrawal — returns:
{
"status": 422,
"error_message": "Fiat account missing required deposit bank account",
"message_code": "no_deposit_bank_account"
}To resolve:
- Create the
maindeposit bank account (see above). - Poll
GET /api/deposit_bank_accounts/{deposit_bank_account_guid}untilstate: created. - Retry the transfer.
Send as a deposit bank account
To set the customer's name and address as the sender information (instead of the partner's) on a
withdrawal fiat transfer, the customer must have a main deposit bank account. Include that
account's identifier in the send_as_deposit_bank_account_guid field:
RTP sender name displayFor RTP (Real Time Payment) withdrawals, even if you set
send_as_deposit_bank_account_guid, most recipient banks will only display the originator (Cybrid) on the recipient's statement. This is due to industry specifications and recipient bank practices, and it is not possible to guarantee that your company name will appear in the transaction description for RTP withdrawals. This differs from ACH and Wire withdrawals, where the company name can typically be displayed as intended.
POST /api/transfers
{
"quote_guid": "quote_guid",
"transfer_type": "funding",
"customer_guid": "customer_guid",
"external_bank_account_guid": "customer_external_bank_account_guid",
"payment_rail": "rtp",
"source_participants": [
{
"type": "customer",
"amount": 5000,
"guid": "customer_guid"
}
],
"destination_participants": [
{
"type": "customer",
"amount": 5000,
"guid": "customer_guid"
}
],
"send_as_deposit_bank_account_guid": "customer_deposit_bank_account_guid"
}Bank name in deposit bank account APIs (sandbox vs production)
When using GET /api/deposit_bank_accounts/{deposit_bank_account_guid}, the response includes a bank_guid but
does not directly provide the bank's name. To retrieve the bank name, make a separate request to
GET /api/banks/{bank_guid}.
Sandbox environment:
In the sandbox, the bank object represents a simulated or internal test bank. The name field is tied to your
organization configuration and does not reflect the real-world bank associated with the routing number.
Production environment:
In production, the bank object and its name field may represent the actual financial institution, depending on
your integration and configuration.
Keep this distinction in mind when testing integrations that display bank names.
Updated about 4 hours ago
