Accelerate Transaction - Account-Based
Accelerate a stuck account-based transaction by rebroadcasting with a higher fee. Includes flows for custody MPC, custody multisig, self-custody MPC, and self-custody multisig wallets. See the Guide.
-
For custody MPC wallets, accelerate a stuck account-based transaction by rebroadcasting with the same nonce but a higher fee. Ethereum and other EVM blockchains allow only one transaction per nonce from a single address, so you can replace a stuck transaction by submitting a new one with higher gas fees.
Use the transaction request endpoint with
intentTypeset toaccelerationand provide higher values formaxFeePerGasandmaxPriorityFeePerGasthan the original transaction.Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).
-
For custody multisig wallets, accelerate a stuck account-based transaction by rebroadcasting with the same nonce but a higher fee. Use the
tx/initiateendpoint withtypeset toacceleration.You must use the exact recipients array from the original stuck transaction. Set
maxFeePerGasandmaxPriorityFeePerGasto values higher than the original transaction.Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).
-
For self-custody MPC wallets, accelerate a stuck account-based transaction by rebroadcasting with the same nonce but a higher fee. Use the transaction request endpoint with
intentTypeset toaccelerationand provide higher values formaxFeePerGasandmaxPriorityFeePerGasthan the original transaction.Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).
-
For self-custody multisig wallets, accelerate a stuck account-based transaction by rebroadcasting with the same nonce but a higher fee. Use the
tx/buildendpoint withtypeset toacceleration.You must use the exact recipients array from the original stuck transaction. Set
maxPriorityFeePerGasto a value higher than the original transaction.Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).
// 1. Custody MPC: Build Acceleration Transaction
export WALLET_ID="<WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export MAX_FEE_PER_GAS="<HIGHER_MAX_FEE_PER_GAS>"
export MAX_PRIORITY_FEE_PER_GASE="<HIGHER_MAX_PRIORITY_FEE_PER_GAS>"
export NONCE="<NONCE_OF_STUCK_TRANSACTION>"
curl -X POST \
https://app.bitgo-test.com/api/v2/wallet/$WALLET_ID/txrequests \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"idempotencyKey": "string",
"intent": {
"feeOptions": {
"gasLimit": 0,
"maxFeePerGas": "'"$MAX_FEE_PER_GAS"'",
"maxPriorityFeePerGas": "'"$MAX_PRIORITY_FEE_PER_GASE"'"
},
"intentType": "acceleration",
"txid": "string",
"sequenceId": "string",
"nonce": "'"$NONCE"'",
"hopParams": {
"gasPriceMax": 0,
"paymentId": "string",
"userReqSig": "string"
},
"receiveAddress": "string",
"senderAddressIndex": 0
},
"videoApprovers": [
"585951a5df8380e0e3063e9f",
"585951a5df8380e0e304a553"
],
"apiVersion": "lite",
"preview": false
}'
// 2. Custody Multisig: Build Acceleration Transaction
export COIN="<ASSET_ID>"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export NONCE="<NONCE_OF_STUCK_TRANSACTION>"
export MAX_FEE_PER_GAS="<HIGHER_MAX_FEE_PER_GAS>"
export MAX_PRIORITY_FEE_PER_GASE="<HIGHER_MAX_PRIORITY_FEE_PER_GAS>"
curl -X POST \
https://app.bitgo-test.com/api/v2/$COIN/wallet/$WALLET_ID/tx/initiate \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"type": "acceleration",
"nonce": "'"$NONCE"'",
"eip1559": {
"maxFeePerGas": "'"$MAX_FEE_PER_GAS"'",
"maxPriorityFeePerGas": "'"$MAX_PRIORITY_FEE_PER_GASE"'"
},
"recipients": [...] # Use the exact recipients array from the original transaction
}'
// 3. Self-Custody MPC: Build Acceleration Transaction
export WALLET_ID="<WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export MAX_FEE_PER_GAS="<HIGHER_MAX_FEE_PER_GAS>"
export MAX_PRIORITY_FEE_PER_GASE="<HIGHER_MAX_PRIORITY_FEE_PER_GAS>"
export NONCE="<NONCE_OF_STUCK_TRANSACTION>"
curl -X POST \
https://app.bitgo-test.com/api/v2/wallet/$WALLET_ID/txrequests \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"idempotencyKey": "string",
"intent": {
"feeOptions": {
"gasLimit": 0,
"maxFeePerGas": "'"$MAX_FEE_PER_GAS"'",
"maxPriorityFeePerGas": "'"$MAX_PRIORITY_FEE_PER_GASE"'"
},
"intentType": "acceleration",
"txid": "string",
"sequenceId": "string",
"nonce": "'"$NONCE"'",
"hopParams": {
"gasPriceMax": 0,
"paymentId": "string",
"userReqSig": "string"
},
"receiveAddress": "string",
"senderAddressIndex": 0
},
"videoApprovers": [
"585951a5df8380e0e3063e9f",
"585951a5df8380e0e304a553"
],
"apiVersion": "lite",
"preview": false
}'
// 4. Self-Custody Multisig: Build Acceleration Transaction
export COIN="<ASSET_ID>"
export WALLET_ID="<WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export NONCE="<NONCE_OF_STUCK_TRANSACTION>"
export MAX_FEE_PER_GAS="<HIGHER_MAX_FEE_PER_GAS>"
export MAX_PRIORITY_FEE_PER_GASE="<HIGHER_MAX_PRIORITY_FEE_PER_GAS>"
curl -X POST \
https://app.bitgo-test.com/api/v2/$COIN/wallet/$WALLET_ID/tx/build \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"type": "acceleration",
"nonce": "'"$NONCE"'",
"eip1559": {
"maxPriorityFeePerGas": "'"$MAX_FEE_PER_GAS"'",
"maxPriorityFeePerGas": "'"$MAX_PRIORITY_FEE_PER_GASE"'"
},
"recipients": [...], # Use the exact recipients array from the original transaction
}'
// 1. Custody MPC: Build Acceleration Transaction
// Use the REST API for this step (see cURL tab)
// 2. Custody Multisig: Build Acceleration Transaction
// Use the REST API for this step (see cURL tab)
// 3. Self-Custody MPC: Build Acceleration Transaction
// Use the REST API for this step (see cURL tab)
// 4. Self-Custody Multisig: Build Acceleration Transaction
// Use the REST API for this step (see cURL tab)
// Build Acceleration Transaction Response (applies to all wallet types)
{
"txRequestId": "string",
"version": 0,
"latest": true,
"walletId": "string",
"walletType": "cold",
"enterpriseId": "string",
"state": "initialized",
"date": {},
"createdDate": {},
"userId": "string",
"initiatedBy": "string",
"updatedBy": "string",
"intent": {
"feeOptions": {
"unit": "baseUnit",
"formula": "fixed",
"feeType": "base",
"gasLimit": 0,
"gasPrice": 0
},
"intentType": "acceleration",
"txid": "string",
"sequenceId": "string",
"comment": "string",
"nonce": "string",
"hopParams": {
"gasPriceMax": 0,
"paymentId": "string",
"userReqSig": "string"
},
"receiveAddress": "string",
"senderAddressIndex": 0
},
"intents": [
{
"intentType": "stake",
"sequenceId": "abc123",
"comment": "string",
"nonce": "string",
"memo": "string",
"stakingRequestId": "string",
"poolKeyHash": "string"
}
],
"pendingApprovalId": "string",
"isCanceled": true,
"unsignedTxs": [
{
"serializedTxHex": "string",
"signableHex": "string",
"derivationPath": "string",
"feeInfo": {
"feeString": "string",
"fee": 0
},
"coinSpecific": {},
"parsedTx": {
"minerFee": "string",
"spendAmount": "string",
"spendAmounts": [
{
"coinName": "string",
"amountString": "string"
}
],
"payGoFee": "string",
"outputs": [
{
"address": "string",
"isPayGo": true,
"value": 0,
"wallet": "string",
"walletV1": "string",
"baseAddress": "string",
"enterprise": "string",
"valueString": "string",
"data": "string",
"change": true,
"coinName": "string"
}
],
"inputs": [
{
"derivationIndex": 0,
"value": 0,
"address": "string",
"valueString": "string",
"chain": 0,
"index": 0
}
],
"type": "string",
"memo": "string"
}
}
],
"signatureShares": [
{
"from": "user",
"to": "user",
"share": "string"
}
],
"commitmentShares": [
{
"from": "user",
"to": "user",
"share": "string",
"type": "commitment"
}
],
"txHashes": [
"string"
]
}