ExpressAdvanced Wallets

POST

Send coins or tokens to one or more recipients. You can use this endpoint to schedule outgoing transactions in bulk, lowering your aggregate amount of blockchain fees.

Retrieves the private key from KMS using the provided public key, then signs and broadcasts the transaction.

Works with both multisignature and MPC wallets.

Works with most BitGo-supported assets, but currently unavailable for: ALGO, ARBETH, AVAXC, CELO, CELO:CUSD, CSPR, DOT, EOS, HTETH:BGERCH, NEAR, OPETH, STX, TON, TRX, TRX:USDC, XLM, XRP, XTZ

Use this endpoint only with advanced wallets. For other wallet types, use Send to many.

Path Params

  • walletId string required
  • coin string required

Body Params

object

  • source string enum required
    The key to use for signing the transaction
    userbackup
  • type string enum
    Required for transactions from MPC wallets.
    transferfillNonceaccelerationaccountSetenabletokentransfertokentrustline
  • recipients array of objects
    recipients object
    • address string required
      Destination address

      up to 250 characters

    • amount string or number required
      The amount in base units (e.g. satoshis) to send. For doge, only string is allowed.

      matches ^-?\d+$

  • pubkey string
    Public key of the key used for signing multisig transactions i.e if source is user, this is the user's public key if source is backup, this is the backup key's public key
  • commonKeychain string
    For TSS wallets, this is the common keychain of the wallet, it remains the same whether source is user or backup
  • numBlocks number
    (BTC only) The number of blocks required to confirm a transaction. You can use numBlocks to estimate the fee rate by targeting confirmation within a given number of blocks. If both feeRate and numBlocks are absent, the transaction defaults to 2 blocks for confirmation. Note: The maxFeeRate limits the fee rate generated by numBlocks.

    >= 2 · <= 1000

  • feeRate number
    Custom fee rate (in base units) per kilobyte (or virtual kilobyte). For example, satoshis per kvByte. If the feeRate is less than the minimum required network fee, then the minimum fee applies. For example, 1000 sat/kvByte, a flat 1000 microAlgos, or a flat 10 drops of xrp. For XRP, the actual fee is usually 4.5 times the open ledger fee. Note: The feeRate overrides the maxFeeRate and minFeeRate.
  • feeMultiplier number
    (UTXO only) Custom multiplier to the feeRate. The resulting fee rate is limited by the maxFeeRate. For replace-by-fee (RBF) transactions (that include rbfTxIds), the feeMultiplier must be greater than 1, since it's an absolute fee multiplier to the transaction being replaced. Note: The maxFeeRate limits the fee rate generated by feeMultiplier.
  • maxFeeRate number
    (BTC only) The maximum fee rate (in base units) per kilobyte (or virtual kilobyte). For example, satoshis per kvByte. The maxFeeRate limits the fee rate generated by both feeMultiplier and numBlocks. Note: The feeRate overrides the maxFeeRate.
  • minConfirms number
    The unspent selection for the transaction will only consider unspents with at least this many confirmations to be used as inputs. Does not apply to change outputs unless used in combination with enforceMinConfirmsForChange.
  • enforceMinConfirmsForChange boolean
    When set to true, will enforce minConfirms for change outputs. Defaults to false.

    Defaults to false

  • targetWalletUnspents number
    Specifies the minimum count of good-sized unspents to maintain in the wallet. Change splitting ceases when the wallet has targetWalletUnspents good-sized unspents. Note: Wallets that continuously send a high count of transactions will automatically split large change amounts into multiple good-sized change outputs while they have fewer than targetWalletUnspents good-sized unspents in their unspent pool. Breaking up large unspents helps to reduce the amount of unconfirmed funds in flight in future transactions, and helps to avoid long chains of unconfirmed transactions. This is especially useful for newly funded wallets or recently refilled send-only wallets.

    Defaults to 1000

  • message string
    Optional metadata (only persisted in BitGo) to be applied to the transaction. Use this to add transaction-specific information such as the transaction's purpose or another identifier that you want to reference later. The value is shown in the UI in the transfer listing page.

    up to 256 characters

  • minValue number or string
    Ignore unspents smaller than this amount of base units (e.g. satoshis). For doge, only string is allowed.
  • maxValue number or string
    Ignore unspents larger than this amount of base units (e.g. satoshis). For doge, only string is allowed.
  • sequenceId string
    A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.
  • lastLedgerSequence number
    (XRP only) Absolute max ledger the transaction should be accepted in, whereafter it will be rejected
  • ledgerSequenceDelta number
    (XRP only) Relative ledger height (in relation to the current ledger) that the transaction should be accepted in, whereafter it will be rejected
  • noSplitChange boolean
    Set true to disable automatic change splitting. Also see: targetWalletUnspents

    Defaults to false

  • unspents array of strings
  • comment string
    Optional metadata (only persisted in BitGo) to be applied to the transaction. Use this to add transaction-specific information such as the transaction's purpose or another identifier that you want to reference later. The value is shown in the UI in the transfer listing page.

    up to 256 characters

  • otp string
    Two factor auth code to enable sending the transaction. Not necessary if using a long lived access token within the spending limit.
  • changeAddress string
    Specifies a custom destination address for the transaction's change output(s)

    up to 250 characters

  • allowExternalChangeAddress boolean
    Flag for allowing external change addresses
  • instant boolean
    (DASH only) Specifies whether or not to use Dash's "InstantSend" feature when sending a transaction.
  • memo string
    Extra transaction information for CSPR, EOS, HBAR, RUNE, STX, TON, XLM, and XRP. Required for XLM transactions. Note: For XRP this is the destination tag (DT). For CSPR this is the transfer ID.
  • transferId number
    Transfer ID for the transaction
  • eip1559 object
  • gasLimit number
    Custom gas limit to be used for sending the transaction. Only for ETH and ERC20 tokens.
  • custodianTransactionId string
    Custodian transaction ID
  • nonce string
    (DOT only) A nonce ID is a number used to protect private communications by preventing replay attacks. This is an advanced option where users can manually input a new nonce value in order to correct or fill in a missing nonce ID value.

Responses

200
OK
No response body
400
Bad Request

Response Body

object

  • error string required
    The error name
  • details string required
    Error details
404
Not Found

Response Body

object

  • error string required
    The error name
  • details string required
    Error details
409
Conflict

Response Body

object

  • error string required
    The error name
  • details string required
    Error details
422
Unprocessable Entity

Response Body

object

  • error string required
    The error name
  • details string required
    Error details
500
Internal Server Error

Response Body

object

  • error string required
    The error name
  • details string required
    Error details
501
Not Implemented

Response Body

object

  • error string required
    The error name
  • details string required
    Error details