Deposit Bank Accounts
What are deposit bank accounts for and how do I use them?
Deposit bank accounts are routable bank accounts that allow third-party Wire, ACH push, or RTP/FedNow transfers on and off the platform. The account includes complete routing details and beneficial owner information.
Deposit bank accounts can be created for either a bank or a customer; as a result, each deposit bank account is either linked to a bank-level or a customer platform fiat account. Funds deposited or withdrawn from a deposit bank account are reflected in the platform_balance
and platform_available
values of the linked fiat platform account. Deposit bank accounts do not hold funds directly.
A few things to keep in mind:
- Deposit bank accounts do not hold funds directly.
- Currently, the deposit bank accounts can only be created for US banks.
- Only one deposit bank account can be created for each platform fiat account. In other words, if a bank or a customer has multiple fiat accounts, a unique deposit bank account can be created for each individual fiat account.
- Transfers into a deposit bank account are never initiated by the Cybrid platform; they are always initiated externally.
Deposit Bank Account Types
There are two types of deposit bank accounts. A main
account, and a sub_account
.
Main
Main accounts have a unique account_number
, and can accept deposits as well as initiate withdrawals. Because there is a unique account number, a main account has an opening fee and a monthly maintenance fee:
- One-time $1.00 fee to create
- Recurring $0.50 fee to maintain / per month
When processing a withdrawal transfer from a main account, the recipient will see the main account's holder (counterparty) information, such as the legal name and address, on the transfer if the send_as_deposit_bank_account_guid
is set.
To create a Main account, set the type
to main
, such as the following API request:
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": "customer_legal_name",
"counterparty_address": {
"street": "1 Main St.",
"street2": null,
"city": "Los Angeles",
"subdivision": "CA",
"postal_code": "12345",
"country_code": "US"
},
"account_details": [
{
"account_number": "111222333"
}
],
"routing_details": [
{
"routing_number": "021000021",
"routing_number_type": "ABA"
}
],
"labels": null
}
Sub-Account
Sub-accounts are used when you want to allow your customers to receive wires directly into their fiat account without needing to generate a unique deposit bank account for each (i.e., a main account). There are no fees for sub-accounts.
Only a customer can have
sub_account
type deposit bank accounts.
A sub-account inherits the account_number
and routing_number
from the main
account. When depositing funds (e.g. using a Wire transfer) to a sub-account, the customer must include the unique_memo_id
and the platform will automatically reconcile the deposit into the customer's fiat account instead of the bank's fiat account. If the customer forgets to include the unique_memo_id
, or if they use an incorrect memo, the deposit will still complete successfully, but the funds will reflect on the partner (bank-level) fiat account instead. You will then need to initiate a book transfer to transfer the funds to the customer's fiat account.
To create a sub-account, set the type to sub_account
and set the parent_deposit_bank_account_guid
to your partner (bank-level) deposit bank account (of type main
) or the same customer deposit bank account (of type main
), such as the following API request:
POST /api/deposit_bank_accounts
{
"type": "sub_account",
"customer_guid": "customer_guid",
"account_guid": "customer_fiat_account_guid",
"parent_deposit_bank_account_guid": "main_deposit_bank_account_guid"
}
{
"created_at": "datetime",
"updated_at": "2024-08-16T14:33:01.953969Z",
"guid": "deposit_bank_account_guid",
"type": "sub_account",
"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": "customer_legal_name",
"counterparty_address": {
"street": "1 Main St.",
"street2": null,
"city": "Los Angeles",
"subdivision": "CA",
"postal_code": "12345",
"country_code": "US"
},
"account_details": [
{
"account_number": "111222333"
}
],
"routing_details": [
{
"routing_number": "021000021",
"routing_number_type": "ABA"
}
],
"parent_deposit_bank_account_guid": "parent_deposit_bank_account_guid",
"labels": null
}
Beneficiary Information
For type main
deposit bank accounts, the platform uses the PII data collected during KYC for the beneficiary information on the account, which is displayed in counter_party_name
and counter_party_address
.
For type sub_account
deposit bank accounts, the beneficiary information is the information associated with the parent main
account.
Send as a Deposit Bank Account
As briefly mentioned above, the only way for a customer to set their name and address as the sender information (as opposed to partner information) on a withdrawal fiat transfer is if they open a main
deposit bank account and then use that account's unique Identifier in the send_as_deposit_bank_account_guid, similar to the following API request:
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": "main_customer_deposit_bank_account"
}
Updated about 1 hour ago