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.

  1. 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 intentType set to acceleration and provide higher values for maxFeePerGas and maxPriorityFeePerGas than the original transaction.

    Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).

    API Reference

  2. For custody multisig wallets, accelerate a stuck account-based transaction by rebroadcasting with the same nonce but a higher fee. Use the tx/initiate endpoint with type set to acceleration.

    You must use the exact recipients array from the original stuck transaction. Set maxFeePerGas and maxPriorityFeePerGas to values higher than the original transaction.

    Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).

    API Reference

  3. 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 intentType set to acceleration and provide higher values for maxFeePerGas and maxPriorityFeePerGas than the original transaction.

    Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).

    API Reference

  4. For self-custody multisig wallets, accelerate a stuck account-based transaction by rebroadcasting with the same nonce but a higher fee. Use the tx/build endpoint with type set to acceleration.

    You must use the exact recipients array from the original stuck transaction. Set maxPriorityFeePerGas to a value higher than the original transaction.

    Prerequisites: Complete Get Started and initiate a withdrawal (see Withdraw Overview).

    API Reference

// 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
  }'
Response
// 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"
  ]
}