Depositing Funds
Depositing refers to sending fiat or crypto funds from external accounts into a Rail account.
To transfer funds between Rail accounts, see Transfers. To withdraw assets from a Rail account to an external account, see Withdrawing Funds.
Today, we have two Deposit endpoints: one for Deposit accounts and one for Payment accounts. These will be combined into a single one shortly.
Deposit Accounts
Fiat Deposit Accounts
There are two ways to receive fiat funds, Push and Pull. Not all Product Types support both methods.
Push
Push means the source account has to initiate the transaction. Fedwire, Swift support Push only. ACH supports both Push and Pull.
To get the PUSH
deposit instructions, call the deposits
endpoint with
-
deposit_type
ofPUSH
-
deposit_destination.destination_account_id
set to theaccount_id
where the funds need to be deposited into.
You will get the deposit instructions for the rails supported by the account.
Once our partner banks receive the funds, it goes through the usual transaction monitoring checks by our settlement banks, before showing in the available balance.
NOTE: In sandbox, to simulate a fiat deposit, enter the
memo
in the response object in the "Confirm Deposit" screens in the Management UI.
Pull
Pull means the destination has to initiate the transaction. ACH supports both Push and Pull.
To initiate a PULL
deposit instrucution, follow the following steps:
- Setup a Fiat US Linked counterparty type. Click here to learn more.
-
Create the
PULL
deposit using thedeposits
endpoint . Use the counterparty as thesource_counterparty_id
and set theamount
you wish to pull. -
To complete the
PULL
deposit operation, you have to Accept the Deposit. You can do that by calling thedeposits/{DEPOSIT_ID}/accept
endpoint
NOTE: In Sandbox, unlike the Push, you don't need to confirm the deposit in the Management UI. Funds should appear after a few mins.
Crypto deposit accounts
Crypto accounts only support PUSH.
To get the PUSH
deposit instructions for a crypto denominated account, call the deposits
endpoint with:
-
deposit_type
ofPUSH
-
deposit_destination.destination_account_id
set to theaccount_id
where the funds need to be deposited into.
You will get the onchain receive address for the blockchain of the account. For eg. for a USDC on Ethereum account, you will get back the Ethereum onchain address. A crypto deposit account can only have 1 active receive address assigned to it. A payment account can have multiple receive addresses assigned.
Once a crypto deposit is sent on the blockchain, it goes through a number of checks including set number of confirmations, fraud/transaction monitoring checks. Once the checks are complete, the funds are made available.
If the account is a crypto account, you will get back the onchain address for the blockchain of the account. For eg. for a USDC on Ethereum account, you will get back the Ethereum onchain address. A crypto deposit account can only have 1 active address assigned to it.
Crypto Payment Accounts
A Crypto Payment Gateway Account can have multiple active receive addresses. This allows the account to receive payments from multiple payors concurrently. There are two models of assigning a Crypto deposit address to payment gateway accounts, configured by Rail at onboarding.
- Static/ sticky Address - You can assign a static deposit address for each unique payor and transaction reference combination. While this model incurs a higher gas/ network fees, it is good for customers that have recurring payors or receive high value payments.
- Dynamic Addresses - An account is assigned a dynamic address from a pool of addresses. Dynamic Addresses work on a lease concept. The lease expiry is based on: time expiry, expected amount received or max number of transactions received. Once the lease expires, the Dynamic Address gets reassigned after a short grace period. This model is most efficient for smaller, one time payments.
To get the deposit instructions for a Crypto payment account:
-
Create a
Payor
using the
customers/{customer_id}/payor
endpoint . To learn more on Payors, click here . You will get back theid
, which is thepayor_id
you will need for step 2. -
Call the
accounts/payments/{ACCOUNT_ID}/address
endpoint with:-
payor_id
of the payor. if you don't provide apayor_id
, you will always get the samewallet_address
back. If apayor_id
is specified, you will get awallet_address
specific to the payor. -
amount
expected from the payor. -
payment_reference
set to any reference you wish to assign such as an invoice number.
-
You will get the onchain receive address for the blockchain of the account. For eg. for a USDC on Ethereum account, you will get back the Ethereum onchain address.
NOTE: Crypto payment gateway accounts will soon be merged into deposit accounts by end of Q2. The deposit endpoints will also be merged into a single deposit endpoint.
Yield Accounts
We don't allow direct depositing into yield accounts. You have to send funds into the Deposit Accounts first and then Transfer from there. Click here to learn more about Transfers.