Bakkt Transfers API

Transfers allow users to access deposit and withdrawal functionality both within the Bakkt network and across the blockchain.

OpenAPI Specification

bakkt-transfers-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Bakkt Crypto Solutions Accounts Transfers API
  version: '2.0'
  description: The Bakkt Crypto Solutions API is a REST-based API that provides a platform for clients, so their investors can purchase, hold, sell, and transfer digital assets. Clients must have authorization to use the APIs, secure endpoints, and facilities to ensure safe, fast execution and tracking of orders. Users must specify all date and time units using epoch time in UTC. The URL path includes a version number to indicate major versions which retain backward compatibility to other URLs with the same version prefix. This document is reconstructed by the API Evangelist enrichment pipeline from the per-endpoint OpenAPI fragments Bakkt publishes on its ReadMe developer hub (bakkt.readme.io); it merges the Crypto Solutions (/apex-crypto/api/v2) and Fiat/Partner (/partner/v1) endpoint families.
  termsOfService: https://bakkt.com/user-agreement
  contact:
    name: Bakkt User Account Agreement
    url: https://bakkt.com/user-agreement
servers:
- url: https://api.bakkt.com
  description: Bakkt API gateway (dedicated per-client, IP-whitelisted; base paths /apex-crypto/api/v2 and /partner/v1)
tags:
- description: Transfers allow users to access deposit and withdrawal functionality both within the Bakkt network and across the blockchain.
  name: Transfers
paths:
  /apex-crypto/api/v2/transfers/withdraw/coin/{clientTransactionId}:
    get:
      description: Use this action to proactively request the status of a previously submitted withdrawal request. Bakkt provides this service as a convenience to ask about specific withdrawals. Since Crypto systems must confirm withdrawals on the blockchain, the request always has a network-dependent time lag from the moment a user submits a withdrawal on chain until the transfer completes. While client systems may use this service to ask for the latest update for a given transfer, Bakkt encourages clients to rely on the transfer websockets mechanism to receive timely updates to transfers as they post to Bakkt systems and move through the blockchain.
      operationId: getWithdraw
      parameters:
      - description: The client transaction ID of which to query the status
        in: path
        name: clientTransactionId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: This response provides the withdrawal status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Withdrawal'
        '404':
          description: This response returns if the system can not complete this request, because it can not find the withdrawal.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        default:
          description: This response returns if the system encounters an unexpected error while handling this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - api_key: []
      summary: Retrieve the Withdrawal Status
      tags:
      - Transfers
  /apex-crypto/api/v2/transfers/vaspLookup/{receivingWallet}:
    get:
      description: Use this endpoint to lookup the name of a vasp associated with a wallet address.
      operationId: lookupVasp
      parameters:
      - description: The wallet address to lookup the name of the vasp for.
        in: path
        name: receivingWallet
        required: true
        schema:
          type: string
      - description: The currency of the wallet address to lookup the name of the vasp for.
        in: query
        name: currency
        required: true
        schema:
          type: string
      responses:
        '200':
          description: This response returns a list of transfers meeting the specified criteria.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaspLookupResponse'
        '404':
          description: This response returns if a vasp name cannot be found for the provided wallet address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        default:
          description: This response returns if the system encounters an unexpected error while handling this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - api_key: []
      summary: Lookup the name of a vasp associated with a wallet address.
      tags:
      - Transfers
  /apex-crypto/api/v2/transfers/deposit/coin/receiveAddress:
    post:
      description: 'This endpoint returns a wallet receive address to use for a deposit. Receive addresses change over time, so clients should not cache them. Repeated calls to this service may or may not return the same result.

        '
      operationId: postReceiveAddress
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepositReceiveAddressRequest'
        required: true
      responses:
        '200':
          description: This response provides the deposit receive address response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositReceiveAddressResponse'
        '400':
          description: This response returns if the request to retrieve the address is improperly submitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        default:
          description: This response returns if the system encounters an unexpected error while handling this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - api_key: []
      summary: Retrieve a Wallet Receive Address
      tags:
      - Transfers
  /apex-crypto/api/v2/transfers/withdraw/coin:
    post:
      description: This endpoint initiates a withdrawal from the investor's positions to a wallet on the blockchain. This action requires users to request a fee estimate first.
      operationId: postWithdraw
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WithdrawRequest'
        description: Information required to complete the withdrawal
        required: true
      responses:
        '200':
          description: This response returns the result of the withdrawal attempt.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Withdrawal'
        '400':
          description: This response returns if the request to submit the withdrawal request is improperly submitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        default:
          description: This response returns if the system encounters an unexpected error while handling this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - api_key: []
      summary: Create a Crypto Withdrawal Request
      tags:
      - Transfers
  /apex-crypto/api/v2/transfers/withdraw/coin/estimate:
    post:
      description: Withdrawing coins from an investor's crypto account may impose fees. Clients should request a fee estimate detailing those fees and present it to investors for confirmation prior to completing a withdrawal. Clients must then use the ID of the fee estimate to submit a withdrawal. The terms of the fee estimate are based on the underlying crypto networks' market conditions and the system honors them up to a certain grace period after generating them. After the grace period, clients must request a new fee estimate to conduct the withdrawal. Requests for estimates have no associated cost.
      operationId: postWithdrawFee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WithdrawalEstimatedFeeRequest'
        description: Details required to identify the type and amount of crypto to withdraw.
        required: true
      responses:
        '200':
          description: This response returns the estimated fees required to conduct this withdrawal.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WithdrawalEstimatedFeeResponse'
        default:
          description: This response returns if the system encounters an unexpected error while handling this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - api_key: []
      summary: Retrieve a Fee Estimate to Complete a Withdrawal
      tags:
      - Transfers
  /apex-crypto/api/v2/transfers/verifyWalletAddress:
    post:
      description: Use this endpoint to verify that a wallet address is valid prior to using it in a transfer request.
      operationId: verifyWalletAddress
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerifyWalletAddressRequest'
        description: Request containing the information about the wallet address the client would like to verify.
        required: true
      responses:
        '200':
          description: This response returns the validity of the provided wallet address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyWalletAddressResponse'
        default:
          description: This response returns if the system encounters an unexpected error while handling this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - api_key: []
      summary: Verify that a wallet address is valid prior to using it in a transfer request.
      tags:
      - Transfers
components:
  schemas:
    VaspLookupResponse:
      properties:
        vaspName:
          description: The name of the vasp associated with the provided wallet address
          type: string
          x-order: 0
      required:
      - vaspName
      type: object
    WithdrawalStatus:
      enum:
      - PENDING
      - IN_PROGRESS
      - COMPLETE
      - REJECTED
      - CANCELLED
      - ACCEPTED
      type: string
    WithdrawalEstimatedFeeResponse:
      properties:
        estimatedAt:
          description: Time at which a fee estimate was generated
          type: string
          x-order: 5
        expiresAt:
          description: The time at which a fee expires; a withdrawal request must be tied to an unexpired fee estimation
          type: string
          x-order: 6
        fee:
          description: Estimated fee, in coin, for a withdrawal request
          type: string
          x-order: 1
        id:
          description: A unique identifier for this estimate; this identifier must be supplied when initiating a withdrawal request
          format: uuid
          type: string
          x-order: 0
        network:
          $ref: '#/components/schemas/Network'
        request:
          $ref: '#/components/schemas/WithdrawalEstimatedFeeRequest'
        totalQuantity:
          description: The total amount of coin to move out of the investor account to make the requested coin transfer happen (i.e., equals quantity plus fee)
          type: string
          x-order: 3
        usdEquivalentFee:
          description: Fee for the withdrawal in USD
          type: string
          x-order: 2
        usdRate:
          description: The USD price for one coin in which the estimation was created
          type: string
          x-order: 4
      required:
      - id
      - fee
      - request
      - estimatedAt
      - usdEquivalentFee
      - totalQuantity
      - usdRate
      - expiresAt
      type: object
    Withdrawal:
      properties:
        blockchainHash:
          description: Blockchain hash for this transaction, if the transaction has already been written to the blockchain
          type: string
          x-order: 7
        createdAt:
          description: Time at which a withdrawal was submitted
          format: date-time
          type: string
          x-order: 8
        fee:
          description: Fee for the withdrawal in coin that is taken out of the investor's account on top of the requested withdrawal quantity
          type: string
          x-order: 1
        id:
          description: Bakkt Transaction ID
          type: string
          x-order: 0
        network:
          $ref: '#/components/schemas/Network'
        rejectReason:
          description: DEPRECATED, please use statusReason. Reason for a reject, if any
          type: string
          x-order: 5
        request:
          $ref: '#/components/schemas/WithdrawRequest'
        status:
          $ref: '#/components/schemas/WithdrawalStatus'
        statusReason:
          description: reason for the current status of the withdrawal
          type: string
          x-order: 6
        totalQuantity:
          description: The total amount of coin to move out of the investor account to make the requested coin transfer happen (i.e., equals quantity plus fee)
          type: string
          x-order: 3
        usdEquivalentFee:
          description: Fee for the withdrawal in USD
          type: string
          x-order: 2
      required:
      - id
      - status
      - createdAt
      - request
      type: object
    VerifyWalletAddressResponse:
      properties:
        isValid:
          description: Boolean indicating the wallet address is valid or not
          type: boolean
          x-order: 0
        request:
          $ref: '#/components/schemas/VerifyWalletAddressRequest'
        requiredTag:
          description: Tag must be specified when sending a withdrawal. Only applicable for Tag/Memo based blockchains.
          type: boolean
          x-order: 1
      required:
      - isValid
      - requiredTag
      type: object
    DepositReceiveAddressResponse:
      properties:
        network:
          $ref: '#/components/schemas/Network'
        receiveAddress:
          description: A receive address to use to deposit coin
          type: string
          x-order: 0
        request:
          $ref: '#/components/schemas/DepositReceiveAddressRequest'
        tag:
          description: Tag tied to Tag based Assets
          type: string
          x-order: 3
      required:
      - receiveAddress
      - request
      type: object
    WithdrawalEstimatedFeeRequest:
      properties:
        currency:
          description: Crypto coin that the client would like to estimate the cost for transferring
          type: string
          x-order: 0
        network:
          $ref: '#/components/schemas/Network'
        quantity:
          description: Amount of coin that the client would like to estimate the cost for transferring
          type: string
          x-order: 1
        receivingWallet:
          description: Address of the wallet intended to receive the coin. This is only required for withdrawals with a notional value greater than or equal to 3000.
          type: string
          x-order: 2
      required:
      - currency
      - quantity
      type: object
    DepositReceiveAddressRequest:
      properties:
        account:
          description: Bakkt client account identifier
          example: ABC12345
          type: string
          x-order: 1
        currency:
          description: Crypto coin that you would like to deposit
          type: string
          x-order: 0
        network:
          $ref: '#/components/schemas/Network'
      required:
      - currency
      - account
      type: object
    Error:
      properties:
        code:
          description: This code represents an HTTP style error code. Error codes in the 4xx range indicate errors made in the way the client made the request. Error codes in the 5xx range indicate errors that the Apex Crypto system encountered in handling the request.
          format: int32
          type: integer
        message:
          description: This error message provides additional insight into the nature of the error encountered.
          type: string
      required:
      - code
      - message
      type: object
    WithdrawRequest:
      properties:
        account:
          description: Bakkt client account identifier
          example: ABC12345
          type: string
          x-order: 4
        clientTransactionId:
          description: Client-specified unique identifier
          format: uuid
          maxLength: 64
          type: string
          x-order: 3
        currency:
          description: Coin in which to withdraw; must match the estimated coin
          type: string
          x-order: 0
        feeEstimateId:
          description: The estimate provided for this withdrawal; this fee estimate must be recent and cannot be expired
          format: uuid
          type: string
          x-order: 5
        network:
          $ref: '#/components/schemas/Network'
        quantity:
          description: Quantity of coin in which to withdraw; must match the estimated quantity
          type: string
          x-order: 1
        receivingWallet:
          description: Address of the wallet in which to deposit
          type: string
          x-order: 2
        recipientFamilyName:
          description: Family name of the recipient of the withdrawal
          type: string
          x-order: 12
        recipientGivenName:
          description: Given name of the recipient of the withdrawal
          type: string
          x-order: 11
        requestEstimateExtension:
          description: Using this flag allows clients to request an extension to the expiry time of the fee estimate
          type: boolean
          x-order: 6
        selfHosted:
          description: Using this flag allows clients to indicate that they are the owner of the receiving wallet
          type: boolean
          x-order: 7
        tag:
          description: Tag Details tied to withdrawal. Only applicable for Tag/Memo based Assets.
          type: string
          x-order: 14
        vaspDid:
          description: Decentralized identifier of the receiving VASP when it has been registered
          example: did:ethr:0xa07094869d69fb7cc6e27c5c80d94fce3dd9755e
          type: string
          x-order: 10
        vaspName:
          description: Name of the VASP that owns the receiving wallet when the VASP has not been registered
          example: Bakkt Trading
          type: string
          x-order: 8
        vaspWebsite:
          description: Website of the VASP that owns the receiving wallet when the VASP has not been registered
          example: https://bakkt.com
          type: string
          x-order: 9
      required:
      - quantity
      - clientTransactionId
      - currency
      - account
      - receivingWallet
      - feeEstimateId
      type: object
    Network:
      enum:
      - Algorand
      - Arbitrum
      - Avalanche
      - Berachain
      - Binance_Smart_Chain
      - Bitcoin
      - Bitcoin_Cash
      - Cardano
      - Celestia
      - Cosmos
      - Dogecoin
      - Ethereum
      - Ethereum_Classic
      - Litecoin
      - Optimism
      - Polkadot
      - Polygon
      - Ripple
      - Solana
      - Sonic
      - Stellar
      - Tron
      type: string
    VerifyWalletAddressRequest:
      properties:
        address:
          description: Address which should be verified for correct format
          type: string
          x-order: 0
        currency:
          description: Crypto currency that the client would like to verify the address of
          type: string
          x-order: 1
        network:
          $ref: '#/components/schemas/Network'
      required:
      - address
      type: object