Transfers (Digital Asset Deposits & Withdrawals)

Overview

Clients can enable digital asset transfers for investors by implementing two use cases using the Bakkt Transfers API endpoints:

  1. Deposits: Allow investors to deposit digital assets into their Bakkt accounts from external, third-party wallets.
  2. Withdrawals: Allow investors to withdraw digital assets from their accounts and send them to external, third-party wallets.

Warning: Sending and receiving digital assets occurs completely outside of Bakkt's control; therefore, digital asset transfers come with risks to clients and their investors. Clients must make important disclosures to their investors to ensure they are aware of, and accept, the risks.

Digital Asset Transfer Requests and Sell Orders

Estimates do not initiate nor reserve digital assets (coin) for transferring to another digital wallet. If an investor initiates a sell order and then tries to initiate a coin transfer, the transfer process reduces the investor's current position by any outstanding sell orders and pending transfers prior to determining the amount of coin the investor can transfer. If an investor initiates a transfer, the investor's position decreases immediately. Bakkt initiates the request and considers the coin sent the moment the investor places the initial transfer request.

Supported Address Types

Bakkt supports digital asset transfers to a wide range of address types across supported blockchains. For detailed information about supported assets and wallet types, refer to Supported Assets.

Deposit Workflow

Clients may request digital asset deposits from blockchain wallet addresses into Bakkt's custody. The investor receives the wallet address and then requests the deposit directly via the blockchain or the investor's external wallet provider—not via the Bakkt system.

Deposit Process

  1. Retrieve Wallet Address: Clients request a blockchain "receive" address from the Bakkt system using the Retrieve Wallet Addresses endpoint. The investor must supply the account number and digital asset type to acquire a blockchain-recognized receive address in which to send the digital asset.

    • Tag-Based Blockchains: Some blockchains (e.g. XRP) require that a user supply a Tag when sending coin. This Tag is used by systems to know which end user has sent the coin. When the Bakkt system sends a Tag in the Retrieve Wallet Address payload, the end user must be notified to send the Tag when they deposit funds to Bakkt. Funds may be unrecoverable if sent without the correct tag.
  2. Transfer from External Wallet: From the external wallet provider's system, the investor must request to move digital assets on the blockchain to the investor's Bakkt wallet ID from the "receive" address previously returned in the Retrieve Wallet Addresses endpoint request.

  3. Bakkt Processing: When Bakkt receives the digital asset and applies it to the investor's account, it posts the transaction details to an AWS SQS queue for you to consume.

Best Practices

Bakkt tries to maintain the same wallet addresses for the same investor accounts in order to provide investors with dedicated wallet addresses; however, the best practice is for clients to ask for a "receive" address each time (even if it is the same), so that Bakkt has a verified receive address for each deposit transaction.

Info: Bakkt does not have the ability to limit deposits into investor accounts, so there are no applicable risk limits for clients to set.

Withdraw Workflow

Clients send requests to withdraw digital assets from their investors' accounts to external wallets on the blockchain.

Travel Rule Compliance

Info: Bakkt adheres to FinCEN's Travel Rule. For withdrawals equal to or exceeding $3,000, users are required to self-disclose information about the ownership of the destination wallet address. This includes if it is self-hosted, the recipient name, and the recipient VASP name. Transactions to self-hosted wallets are exempt from Travel Rule requirements.

Withdrawal Process

  1. Get Fee Estimate: Begin by using the Retrieve Fee Estimates endpoint to get a fee estimate for the withdrawal. The fee estimate is valid for five minutes and determines the fee for processing and submitting the withdrawal to the blockchain.

  2. Verify Wallet Address: Bakkt has a Verify Wallet Address endpoint that will allow the end user to submit a wallet address and verify that the destination is valid. It is a best practice to use this endpoint prior to creating the Withdrawal Request. This endpoint will let the user know if the wallet is valid and has a requiredTag field that will also let the user know if a Tag will be required for sending to tag-based chains (e.g. XRP). Unfortunately, the check cannot confirm if the tag is valid or not, only tells you if the address requires a tag.

  3. Create Withdrawal Request: Execute the withdrawal using the Create a Withdrawal Request endpoint. Clients must use the previously retrieved fee estimate to initiate a digital asset withdrawal from an investor's account to a wallet on the blockchain. The request must also contain the address of the wallet in which to deposit the digital asset.

    • Tag-Based Chains: Tag-based chains will require the user to supply a tag in the withdrawal request. If required (see step 2), ensure that the request has a tag specified.
    • Travel Rule (≥$3,000): If a withdrawal is equal to or exceeding $3,000:
      • Clients are required to inquire with the customer if the wallet is self-hosted; self-hosted wallet transfers are exempt from the Travel Rule.
      • If the wallet is not self-hosted, clients must collect:
        • The name of the wallet owner.
        • The name of the wallet's custodian.
  4. Process and Receive Details: After Bakkt processes the withdrawal, clients receive the transfer details via API or AWS SQS.

Withdrawal Risk Settings and Fee Structure

Digital asset withdrawals are subject to a risk setting that limits the notional amount transferable to an external wallet at any given time. Each client has a default risk setting and can adjust it per account. For more information about risk settings, contact Bakkt Support at [email protected].

The withdrawal fee is fixed and independent of the digital asset amount withdrawn. Clients can request a fee estimate for the entire digital asset balance in an account using the Retrieve Fee Estimates endpoint. By subtracting the fee estimate from the total balance, clients can determine the maximum amount available for withdrawal. Bakkt allows for the estimate to slightly exceed the actual digital asset amount specified in the Create a Withdrawal Request endpoint.