Send a half-signed transaction

post/api/v2/{coin}/wallet/{walletId}/tx/send

Send a half-signed transaction to BitGo for final signing (using the BitGo key) and broadcasting.

Path Parameters

  • coinstringRequired
    A cryptocurrency or token ticker symbol.
    Example: btc
  • walletIdstringRequired
    Example: 59cd72485007a239fb00282ed480da1f
    Pattern: ^[0-9a-f]{32}$

Request Body

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.
Max length: <= 256 characters
halfSigned object
The half-signed transaction. The request must include this or a txHex.
txHex string
txHex string
The half-signed, serialized transaction hex. Alternative to sending halfSigned.
txRequestId string
The transaction request id.
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&mdash;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.
suppressBroadcast boolean
Do Not Use
videoApprovers array[string]
A list of public ids of users that should do the video id verification for the transaction that is being sent or initiated.
Min items: >= 1 items
Example: 59cd72485007a239fb00282ed480da1f
type string
Required for transactions from MPC wallets. "acceleration" speeds up transactions with a certain nonce by adjusting the gas setting. "accountSet" is for XRP AccountSet transactions. "enabletoken" is for SOL. "stakingLock" and "stakingUnlock" are for Stacks delegations. "transfer" is for native-asset transfers. "trustline" is for Stellar trustline transactions. Possible types include: [acceleration, accountSet, enabletoken, stakingLock, stakingUnlock, transfer, transfertoken, trustline] For AVAX, possible types include: `addValidator`, `export`, and `import`. For XRP, possible types include: `payment` and `accountSet`. The default is `payment`. For STX, type is required.
messages array[object]
[UTXO only] An array of messages that you sign with the wallet keys using the BIP322 format. If passed, the `recipients` array must be empty.
address string
The address for which you're proving ownership. This address must belong to the wallet.
message string
Message that is being signed.
Example: BIP322 test message.
numBlocks integer
(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`.
Minimum: >= 2
Maximum: <= 1000
feeRateOne of
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`.
Example: null
maxFeeRateOne of
(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`.
Example: null
Match pattern: ^-?\d+$
feeMultiplierOne of
(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`.
Example: null
Match pattern: ^-?[\d\.]+$
minConfirms integer
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.
Default: false
gasPriceOne of
Custom gas price to be used for sending the transaction. Only for ETH and ERC20 tokens.
Example: 2000000
Match pattern: ^-?\d+$
eip1559 object
maxPriorityFeePerGasOne of
Example: 2000000
Match pattern: ^-?\d+$
maxFeePerGasOne of
Max total gasPrice for EIP1559 transactions. Only for ETH and ERC20 tokens.
Example: 2000000
Match pattern: ^-?\d+$
gasLimitOne of
Custom gas limit to be used for sending the transaction. Only for ETH and ERC20 tokens.
Example: 2000000
Match pattern: ^-?\d+$
targetWalletUnspents integer
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.
Default: 1000
minValueOne of
Ignore unspents smaller than this amount of base units (e.g. satoshis). For doge, only string is allowed.
Example: 2000000
Match pattern: ^-?\d+$
maxValueOne of
Ignore unspents larger than this amount of base units (e.g. satoshis). For doge, only string is allowed.
Example: 2000000
Match pattern: ^-?\d+$
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.
Example: 2000000
Match pattern: ^-?\d+$
noSplitChange boolean
Set `true` to disable automatic change splitting. Also see: `targetWalletUnspents`
Default: false
unspents array[string]
Used to explicitly specify the unspents to be used in the input set in the transaction. Each unspent should be in the form `prevTxId:nOutput`.
Example: 12b147dd8b4f73c01f72bdbf5b589eea614f3de609ffdbdac84852d6505cf8a3:1
changeAddress string
Specifies a custom destination address for the transaction's change output(s)
Max length: <= 250 characters
Example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS
txFormat string
[UTXO only] Format of the returned transaction hex serialization. `legacy` for serialized transaction in custom bitcoinjs-lib format. `psbt` for BIP174 serialized transaction
Allowed values: legacy psbt psbt-lite
Default: legacy
Example: psbt
instant boolean
(DASH only) Specifies whether or not to use Dash's "InstantSend" feature when sending a transaction.
memo object
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.
type string
value string
destinationChain string
(AVAXC and AVAXP only) Destination chain for an AVAX import/export transaction. One of [P, C].
sourceChain string
(AVAXC and AVAXP only) Source chain for an AVAX import/export transaction. One of [P, C].
addressType string deprecated
DEPRECATED - use `changeAddressType`. The type of address to create for change. One of `p2sh`, `p2shP2wsh`, `p2wsh`, or `p2tr`.
changeAddressTypeAny of
The address type for the change address. One of `p2sh`, `p2shP2wsh`, `p2wsh`, `p2tr` or `p2trMusig2`.
Allowed values: p2sh p2shP2wsh p2wsh p2tr p2trMusig2
Example: p2sh
startTime string
Unix timestamp in seconds.nanoseconds format, denoting the start of the validity window. Only for HBAR transactions.
Example: 1714067129.1020603
consolidateId string
(ALGO/TEZOS only) Consolidation ID of this consolidation transaction.
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
lastLedgerSequence integer
(XRP only) Absolute max ledger the transaction should be accepted in, whereafter it will be rejected
ledgerSequenceDelta integer
(XRP only) Relative ledger height (in relation to the current ledger) that the transaction should be accepted in, whereafter it will be rejected
cpfpTxIds array[string]
The list of transactions to bump with a Child-Pays-For-Parent transaction (currently only bumping one tx is supported).
cpfpFeeRate integer
The desired effective fee rate of the accelerated transaction in base units per kilobyte (e.g. satoshi/kB), the unconfirmed transactions it depends on, and the newly created Child-Pays-For-Parent transaction. Must be higher than the current effective fee rate of the target transaction.
rbfTxIds array[string]
The list of transactions to accelerate using Replace-By-Fee (RBF) for UTXO coins (currently accelerating only one tx is supported).
isReplaceableByFee boolean
It is used to mark an UTXO transaction eligible for Replace-By-Fee (RBF) later.
maxFee integer
Limits the amount of satoshis that can be used for fees in a Child-Pays-For-Parent (CPFP) transaction. CPFP transactions accelerate the targeted transaction and all of the unconfirmed transactions the targeted transaction depends on. `maxFee` is required for all CPFP transactions as it allows users to set a safety net that will halt CPFP attempts that exceed the expected cost.
Minimum: >= 0
strategy string
Optional unspent selection strategy to use. One of `RANDOM`, `FIFO` or `BNB`.
Max length: <= 20 characters
validFromBlock integer
Optional block this transaction is valid from
validToBlock integer
Optional block this transaction is valid until
trustlines array[object]
List of trustlines to manage on the account. Available for Stellar.
token string
One of the supported coin types for Stellar tokens listed in [Coin-specific-implementation](#tag/Coin-specific-implementation)
Example: txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L
action
Allowed values: add remove
limit string
String representation of the amount to limit in base units (stroops)
Example: 2000000
Match pattern: ^-?\d+$
stakingOptionsAny of
Required object for staking. Only for CSPR and STX.
amountOne of
Required for CSPR. String representation of the amount to stake or unstake in base units (motes).
Example: 2000000
Match pattern: ^-?\d+$
validator string
Required for CSPR. The validator address used to delegate or undelegate.
Max length: <= 250 characters
Example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS
unstakingOptions object
Options needed to unstake EOS assets
from string
The name or address of the account that originally staked assets
receiver string
The name or address of the account that had assets staked to
unstakeCpuQuantity string
The string amount of assets to unstake from CPU and asset symbol separated by a space (e.g. '100 EOS')
unstakeNetQuantity string
The string amount of assets to unstake from Net and asset symbol separated by a space (e.g. '100 EOS')
refundOptions object
Options needed to refund unstaked EOS assets if automatic refund fails
address string
The name or address of the account that originally unstaked assets
messageKey string
Optional parameter that takes a hexadecimal value to set `messagekey` for an XRP `accountSet` transaction. Recipients field should be empty when `messageKey` is set.
reservation object
Optional parameter for UTXO coins to automatically reserve the unspents that are used in the build. Useful for Cold wallets. If using, must set expireTime.
expireTime string <date-time>
Required. The time that the unspent reservations should expire.

200 Response

transfer object
coin string required
A cryptocurrency or token ticker symbol.
Example: btc
id string required
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
wallet string required
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
enterprise string
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
txid string required
The on-chain transaction id
Example: b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26
txidType string
The type of the transaction id
Allowed values: transactionHash blockHash
height integer required
The height of the block this Transfer was confirmed in (999999999 if unconfirmed)
heightId string
The unique height id of the block
date string <date-time>required
The date this Transfer was last updated
confirmations integer required
The number of blocks that have been confirmed since this Transfer's block was confirmed
type string required
Defines whether or not this Transfer was sent or received by the user
Allowed values: send receive
value integer
The total value (in base units) sent by this Transfer (may be approximate for ETH and other coins where amounts in base units can exceed 2^53 - 1)
valueString string required
The total value (in base units) sent by this Transfer represented as a String
Example: 2000000
Match pattern: ^-?\d+$
intendedValueString string
A string representation (in base units) of the initial value for the transfer. This is present because when a transaction fails on chain, its value is mutated to be zero. This string is immutable and will always be the intended value of the initial transfer regardless of the final state of the transaction.
Example: 2000000
Match pattern: ^-?\d+$
baseValue integer
The value (in base units) sent by this transfer, excluding network fees. BitGo is deprecating this field in the future. Instead, use baseValueWithoutFees.
baseValueString string
The value (in base units) sent by this transfer, excluding network fees represented as a string. BitGo is deprecating this field in the future. Instead, use baseValueWithoutFees.
Example: 2000000
Match pattern: ^-?\d+$
baseValueWithoutFees integer
The value (in base units) sent by this transfer excluding network fees.
baseValueWithoutFeesString string
The value (in base units) sent by this transfer, excluding network fees, represented as a string
Example: 2000000
Match pattern: ^-?\d+$
feeString string
The Transfer's fee (in base units) represented as a String
payGoFee integer
The Transfer's BitGo fee (in base units)
payGoFeeString string
The Transfer's BitGo fee (in base units) represented as a String
usd number required
The amount of USD of this Transfer (will be negative if it's a send)
usdRate number required
The USD price at the time this Transfer was created
state string required
The state of the transfer. Includes the following: - `confirmed`: The transfer is confirmed on chain. - `failed`: BitGo failed to confirm the transfer on chain. You must retry the transaction. - `initialized`: The initial state when creating a transfer. - `pendingApproval`: The transfer requires admin approval to proceed. - `rejected`: The transfer was rejected by an admin. - `removed`: A network re-org occurred, causing the confirmed transfer to be removed from the blockchain. - `replaced`: The transfer was stuck due to having a low fee and was replaced by a new transfer with a higher fee. - `signed`: The transfer was approved by an admin (if required) and then signed by BitGo. - `unconfirmed`: The signed transaction was sent to the network, and is pending on-chain validation.
Allowed values: confirmed failed initialized pendingApproval rejected removed replaced signed unconfirmed
Example: confirmed
tags array[string] required
The tags to be used on this Transfer (used in Policies)
Example: 59cd72485007a239fb00282ed480da1f
history array[object] required
An audit log of events that have happened to the Transfer during its lifecycle
comment string required
A comment from the user
vSize integer
The size of the transaction
nSegwitInputs integer
DEPRECATED. Number of segwit inputs on the transfer.
coinSpecific object required
Transfer fields specific to each coin type
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&mdash;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.
consolidateId string
Consolidation ID if this transfer is part of a consolidation
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
txRequestId string
Associated transaction request ID
goStakingRequestId string
Associated GO staking request ID
subType string
Transfer subtype
Allowed values: ofc_withdrawal ofc_deposit ofc_unstake ofc_stake
feeCoin string
The coin used to pay the fee (for cross-chain transactions)
instant boolean
Whether this is an instant transaction
instantId string
The instant transaction ID if applicable
isFee boolean
Whether this transfer represents a fee
isReward boolean
Whether this transfer represents a staking reward
isUnlock boolean
Whether this transfer represents an unlock operation
metadata array[object]
Additional metadata associated with the transfer
sendAccounting array[object]
Accounting breakdown for send transactions
createdTime string <date-time>
The time this transfer was created
approvedTime string <date-time>
The time this transfer was approved
rejectedTime string <date-time>
The time this transfer was rejected
signedTime string <date-time>
The time this transfer was signed
unconfirmedTime string <date-time>
The time this transfer became unconfirmed
confirmedTime string <date-time>
The time this transfer was confirmed
removedTime string <date-time>
The time this transfer was removed
commentedTime string <date-time>
The time this transfer was commented on
failedTime string <date-time>
The time this transfer failed
regeneratedTime string <date-time>
The time this transfer was regenerated
replacedTime string <date-time>
The time this transfer was replaced
replacingTime string <date-time>
The time this transfer started replacing another
abandonedTime string <date-time>
The time this transfer was abandoned
signedDate string <date-time>
The date this transfer was signed (legacy field)
customerApprovedTime string <date-time>
The time this transfer was approved by the customer (trust transfers)
idVerificationTime string <date-time>
The time identity verification was completed (trust transfers)
trustSignedTime string <date-time>
The time this transfer was signed by trust (trust transfers)
trustFinalApprovalTime string <date-time>
The time this transfer received final trust approval (trust transfers)
walletLabel string
Label of the wallet associated with this transfer
enterpriseName string
Name of the enterprise associated with this transfer
elliptic string
Elliptic risk score information (trust transfers)
senderInformationVerified boolean
Whether sender information has been verified (trust transfers)
buildParams object
Parameters used to build the transaction
entries array[object]
An array of objects describing the change in address balances made as a result of this Transfer
usersNotified boolean
Whether BitGo already sent notifications to the users of the transfer wallet
label string
Address labels (if any) from entries concatenated.
replaces array[string]
Transaction IDs that this transfer replaces.
replacedBy array[string]
Transaction IDs that replace this transfer.
txid string
The transaction's unique identifier
tx string
The encoded transaction, either base64 for XLM or hex for other coins
status string
The state of the transfer. Includes the following: - `confirmed`: The transfer is confirmed on chain. - `failed`: BitGo failed to confirm the transfer on chain. You must retry the transaction. - `initialized`: The initial state when creating a transfer. - `pendingApproval`: The transfer requires admin approval to proceed. - `rejected`: The transfer was rejected by an admin. - `removed`: A network re-org occurred, causing the confirmed transfer to be removed from the blockchain. - `replaced`: The transfer was stuck due to having a low fee and was replaced by a new transfer with a higher fee. - `signed`: The transfer was approved by an admin (if required) and then signed by BitGo. - `unconfirmed`: The signed transaction was sent to the network, and is pending on-chain validation.
Allowed values: confirmed failed initialized pendingApproval rejected removed replaced signed unconfirmed
Example: confirmed

202 Response

id string
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
coin string
A cryptocurrency or token ticker symbol.
Example: btc
wallet string
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
enterprise string
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
organization string
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
creator string
Example: 59cd72485007a239fb00282ed480da1f
Match pattern: ^[0-9a-f]{32}$
createDate string <date-time>
infoAny of
transactionRequest object
type string
Allowed value: transactionRequest
stateAny of
Allowed values: pending awaitingSignature pendingFinalApproval pendingCustodianApproval pendingVideoApproval pendingIdVerification
scope string
What kind of entity the Pending Approval is tied to
Allowed values: enterprise wallet
userIds array[string]
All the Users who should see this Pending Approval
Example: 59cd72485007a239fb00282ed480da1f
approvalsRequired integer
Minimum: >= 1
Example: 1
walletLabel string
resolvers array[object]
user string required
date string required
resolutionType string required
Allowed values: approved awaitingSignature pending pendingBitGoAdminApproval pendingCryptographicApproval pendingCustodianApproval pendingFinalApproval pendingIdVerification pendingVideoApproval processing rejected
signatures array[string] required
videoApprover string
videoLink string
videoException string
addressLabels array[object]
Address labels of recipients in this Pending Approval
address string required
Max length: <= 250 characters
Example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS
label
string or null
required
A human-readable label for the address.
Max length: <= 250 characters
Example: Bob's Hot Wallet Address
walletLabel string
Example: My Wallet

400 Response

One of
error string required
Human-readable error message
requestId string required
Client request id
context object
Properties that apply to a specific error name
name string required
Error code

423 Response

error string required
Human-readable error message
requestId string required
Client request id