Depositing Funds

Depositing refers to sending fiat or crypto funds from external accounts into a Layer2 account.

To transfer funds between Layer2 accounts, see Transfers. To withdraw assets from a Layer2 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 of PUSH
  • deposit_destination.destination_account_id set to the account_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:

  1. Setup a Fiat US Linked counterparty type. Click here to learn more.
  2. Create the PULL deposit using the deposits endpoint . Use the counterparty as the source_counterparty_id and set the amount you wish to pull.
  3. To complete the PULL deposit operation, you have to Accept the Deposit. You can do that by calling the deposits/{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 of PUSH
  • deposit_destination.destination_account_id set to the account_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 Layer2 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:

  1. Create a Payor using the customers/{customer_id}/payor endpoint . To learn more on Payors, click here . You will get back the id , which is the payor_id you will need for step 2.
  2. Call the accounts/payments/{ACCOUNT_ID}/address endpoint with:
    • payor_id of the payor. if you don't provide a payor_id , you will always get the same wallet_address back. If a payor_id is specified, you will get a wallet_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.

© 2023 Layer2 Financial Inc. All Rights Reserved.