---
title: "EstimateTransactionFee"
method: POST
path: "/v2/vaults/{vault_id}/transactions:estimateFee"
tags: ["Transactions"]
---

# EstimateTransactionFee

`POST /v2/vaults/{vault_id}/transactions:estimateFee`

Estimate the fee for a transaction.

## Path parameters

- `vault_id` string, required

## Request body

- TransactionsEstimateTransactionFeeBody
  - `details` V2EstimateTransactionFeeRequestDetails, required
    - `assetTransfer` V2AssetTransfer
      - `asset` string, required — The asset to transfer. Can be one of the following: 1. A raw asset name `assets/{asset_id}` (example: `assets/e72ff35a5b15`) 2. A native asset name `assets/native.{network_id}` (example: `assets/native.ethereum-mainnet`) 3. An ERC20 asset name `assets/erc20.{network_id}.{contract}` (example: `assets/erc20.ethereum-mainnet.0x6b175474e89094c44da98b954eedeac495271d0f`) 4. A TRC20 asset name `assets/trc20.{network_id}.{contract}` (example: `assets/trc20.tron-mainnet.TKieffkQXtW8Dr1hKXKGPqCqYi1UNMjJw`) 5. A Solana SPL token asset name `assets/spl-token.{network_id}.{contract}` (example: `assets/spl-token.solana-mainnet.Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB`) 6. A Solana SPL token2022 asset name `assets/spl-token-2022.{network_id}.{contract}` (example: `assets/spl-token-2022.solana-mainnet.2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo`) 7. A TON Jetton token asset name `assets/jetton.{network_id}.{contract}` (example: `assets/jetton.ton-mainnet.EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs`)
      - `amount` string, required — The amount of the asset to transfer in asset units. Example: `1.1`.
      - `source` string, required — The source of the transfer. Can be one of the following: 1. A raw string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`) 2. A wallet containing the asset: `vaults/{vault_id}/wallets/{wallet_id}` 3. A specific wallet address containing the asset: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}` For Bitcoin, only wallet source is supported (the second option).
      - `destination` string, required — The destination of the transfer. Can be one of the following: 1. A raw string address (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` or `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`) 2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`. 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`.
      - `payFeeFromAmount` boolean — If set to true, fees will be paid from transfer amount. Currently only supported for native assets on EVM-compatible networks.
      - `memo` string — An optional "on-chain" memo to attach to the transfer. Implementation may differ between assets. Currently supports: * TON native transfers (`assets/native.ton-mainnet`) * TON jetton transfers (`assets/jetton.ton-mainnet.EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs`)
      - `sponsor` string — Optional sponsor wallet/address that will pay transaction fees. Can be one of the following: 1. A raw string address (example: `9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g`) 2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}` 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}` 4. A gas station: `vaults/{vault_id}/gasStations/{gas_station_id}` The sponsor must be a Utila-managed wallet with sufficient balance to pay transaction fees.
      - `stellarOptions` AssetTransferStellarOptions
        - `memo` Apiv2StellarTransactionMemo
          - `type` 'TEXT' | 'ID' | 'HASH' | 'RETURN', required — - TEXT: A text memo. Limited to 28 bytes. - ID: A id memo. An unsigned 64-bit integer. - HASH: A hash memo. A hex string of the hash with a `0x` prefix. - RETURN: A return memo. A hex string of the return hash with a `0x` prefix.
          - `data` string, required — The data of the memo. See documentation on enum values for the exact format. See https://developers.stellar.org/docs/learn/fundamentals/transactions/operations-and-transactions#memo for more information.
      - `xrplOptions` AssetTransferXRPLOptions
        - `destinationTag` string — Destination tag for XRPL (XRP) transfers. Decimal string of a 32-bit unsigned integer in the range 0..4294967295 (XRPL DestinationTag). Empty string is invalid when this field is set; omit the field entirely when no tag applies.
    - `assetBatchTransfer` V2BatchAssetTransfer
      - `asset` string, required — The asset to transfer. Can be one of the following: 1. A raw asset name `assets/{asset_id}` (example: `assets/e72ff35a5b15`) 2. A native asset name `assets/native.{network_id}` (example: `assets/native.ethereum-mainnet`) 3. An ERC20 asset name `assets/erc20.{network_id}.{contract}` (example: `assets/erc20.ethereum-mainnet.0x6b175474e89094c44da98b954eedeac495271d0f`) Supported Assets: The native currency of the network and ERC20 tokens. **Note: ERC20 asset transfers require an approval. See [GetLatestBatchContract](#tag/Blockchains/operation/Blockchains_GetLatestBatchContract) for more information.** Supported Networks: Ethereum and Polygon (Sepolia and Mumbai)
      - `source` string, required — The source of the transfer. Can be one of the following: 1. A raw string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`) 2. A wallet containing the asset: `vaults/{vault_id}/wallets/{wallet_id}` 3. A specific wallet address containing the asset: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}` For Bitcoin, only wallet source is supported (the second option).
      - `destinations` BatchAssetTransferBatchTransferDestination[], required — The batch transfer destinations.
        - `destination` string, required — The destination of the transfer. Can be one of the following: 1. A raw string address (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` or `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`) 2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`. 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`.
        - `amount` string, required — The amount of the asset to transfer for this entry in asset units. Example: `1.1`.
        - `note` string — The note to attach to the transfer. This note will be visible to all vault members.
    - `evmTransaction` Apiv2EVMTransaction
      - `network` string, required — The resource name of the network of the transaction. Format: `networks/{network_id}`.
      - `fromAddress` string, required — The source of the transaction. Can be one of the following: 1. A `0x`-prefixed hex string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`) 2. An EVM wallet resource name: `vaults/{vault_id}/wallets/{wallet_id}` 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`
      - `toAddress` string — The destination of the transfer. If empty, the transaction is a contract deployment. Can be one of the following: 1. A `0x`-prefixed hex string address (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`) 2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`. 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`.
      - `value` string — The amount to transfer in wei. Can be hex or decimal. Example: `0x32` or `50`.
      - `data` string — Hex encoded transaction data, must be prefixed with `0x`. Example: `0xda82fb4c00000a`.
      - `overrideParams` V2EVMTransactionParams
        - `gasSettings` V2EVMPriority
          - `gasLimit` string, int64 — The amount of gas to use for the transaction.
          - `gasPrice` string — A `0x`-prefixed hex string representing the gas price of the transaction. Used for legacy transactions (non EIP-1559).
          - `maxPriorityFeePerGas` string — A `0x`-prefixed hex string representing the maximum prioriy fee per gas unit the transaction can pay. Used for dynamic transactions (EIP-1559).
          - `maxFeePerGas` string — A `0x`-prefixed hex string representing the maximum fee per gas unit the transaction can pay. Used for dynamic transactions (EIP-1559).
        - `nonce` string — Optional nonce for the transaction. If omitted, Utila will determine the nonce automatically.
      - `authorizationDetails` Apiv2EVMTransactionAuthorizationDetails
        - `authorizationList` Apiv2EVMTransactionAuthorization[], required — The list of authorizations.
          - `address` string, required — The address of the authorization. A `0x`-prefixed hex string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)
          - `chainId` string, required — The chain ID of the authorization.
          - `nonce` string, int64, required — The nonce of the authorization.
          - `signature` string, byte, required — The signature of the authorization.
      - `publish` boolean — Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. If not provided, defaults to `true`.
    - `tronTriggerSmartContract` V2TronTriggerSmartContract
      - `network` string, required — The resource name of the network of the transaction. Format: `networks/{network_id}`.
      - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
      - `contractAddress` string, required — The smart contract to trigger. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
      - `callValue` string, int64 — The amount of SUN passed into the contract (1 TRX = 1,000,000 SUN). Example: `500000`.
      - `data` string — Hex encoded transaction data. Example: `a9059cbb0000000000000000000000002ed5dd8a98aea00ae32517742ea5289761b2710e0000000000000000000000000000000000000000000000000000000ba43b7400`.
    - `tronTransaction` Apiv2TronTransaction
      - `network` string, required — The resource name of the network of the transaction. Format: `networks/{network_id}`.
      - `publish` boolean — Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. Default: true.
      - `triggerSmartContract` Apiv2TronTransactionTriggerSmartContract
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `contractAddress` string, required — The smart contract to trigger. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `callValue` string, int64 — The amount of SUN passed into the contract (1 TRX = 1,000,000 SUN). Example: `500000`.
        - `data` string — Hex encoded transaction data. Example: `a9059cbb0000000000000000000000002ed5dd8a98aea00ae32517742ea5289761b2710e0000000000000000000000000000000000000000000000000000000ba43b7400`.
      - `freezeBalanceV2` Apiv2TronTransactionFreezeBalanceV2
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `amount` string, required — Amount of TRX to be staked, in SUN. Example: `1500000`.
        - `resource` 'BANDWIDTH' | 'ENERGY', required
      - `unfreezeBalanceV2` Apiv2TronTransactionUnfreezeBalanceV2
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `amount` string, required — Amount of TRX to be unstaked, in SUN. Example: `1500000`.
        - `resource` 'BANDWIDTH' | 'ENERGY', required
      - `withdrawExpireUnfreeze` Apiv2TronTransactionWithdrawExpireUnfreeze
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
      - `delegateResource` Apiv2TronTransactionDelegateResource
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `resource` 'BANDWIDTH' | 'ENERGY', required
        - `amount` string, required — The amount of the resource to delegate, in SUN. Example: `1500000`.
        - `receiverAddress` string, required — The address to delegate the resource to. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `lock` boolean — Whether to lock the delegation. Default: false.
        - `lockPeriod` string — The period to lock the delegation, in block numbers, 1 block ≈ 3 seconds. Example: `1000`.
      - `undelegateResource` Apiv2TronTransactionUnDelegateResource
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `resource` 'BANDWIDTH' | 'ENERGY', required
        - `amount` string, required — The amount of the delegated resource to undelegate, in SUN. Example: `1500000`.
        - `receiverAddress` string, required — The address to undelegate the resource from. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
      - `cancelAllUnfreezeV2` Apiv2TronTransactionCancelAllUnfreezeV2
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
      - `voteWitness` Apiv2TronTransactionVoteWitness
        - `ownerAddress` string, required — Voter address. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
        - `votes` Apiv2TronTransactionVoteWitnessVote[], required — The votes to cast. Max 30 votes. Example: `[{"vote_address": "418840E6C55B9ADA326D211D818C34A994AECED808", "vote_count": "1000"}]`
          - `voteAddress` string, required — The address of Super Representatives to vote for. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
          - `voteCount` string, required — Example: `1000`.
      - `withdrawBalance` Apiv2TronTransactionWithdrawBalance
        - `ownerAddress` string, required — The source of the transaction. Can be one of the following: 1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`) 2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)
    - `btcTransfer` V2BTCTransfer — A transfer transaction for Bitcoin and other UTXO-based networks with explicit input control.
      - `network` string, required — The resource name of the network of the transaction. Format: `networks/{network_id}`.
      - `inputs` V2BTCTransferUTXO[] — Inputs used to fund the transaction. You must provide at least one funding source: 1. `inputs` – explicitly specified UTXOs. 2. `input_sources` – sources from which Utila may automatically select UTXOs. Both may be provided. In that case, the specified `inputs` are always included and Utila will automatically select additional UTXOs from `input_sources` if needed to cover the outputs and fees. All UTXOs listed here must belong to the same wallet.
        - `txHash` string, required — The hash of the transaction that created this UTXO.
        - `vout` integer, required — The output index in the transaction.
      - `inputSources` BTCTransferInputSource[] — Sources from which Utila may automatically select additional UTXOs. Currently only a single source is supported, and it must reference the same wallet that owns the UTXOs in `inputs` (when both are provided).
        - `source` string, required — The source to select UTXOs from. Can be one of the following: 1. A raw string address (example: `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`) 2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}` (selects across all addresses) 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`
      - `outputs` BTCTransferOutput[], required — The transfer outputs.
        - `destination` string, required — The destination of the transfer. Can be one of the following: 1. A raw string address (example: `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`) 2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}` (resolves to the wallet's main deposit address) 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`
        - `amount` string, required — The amount to send, in decimal form. Example: `"0.001"` (0.001 BTC).
        - `payFeeFromAmount` boolean — If set to true, the transaction fee will be deducted from this output's amount. At most one output may have this set to true.
      - `changeOutputs` BTCTransferChangeOutput[] — Change address overrides. At most one per input wallet. When change is needed, Utila will use the specified address instead of auto-generating one.
        - `address` string, required — The change address. Must belong to one of the input wallets. Can be one of the following: 1. A raw string address (example: `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`) 2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}` (Utila will select an appropriate change address) 3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`
      - `feeSettings` BTCTransferFeeSettings — Custom fee settings for the transaction.
        - `feeRate` string, required — Fee rate in satoshi per virtual byte (sat/vB). Example: `10.5`.
  - `priority` 'LOW' | 'NORMAL' | 'HIGH' — Generic priority enum for transactions. Translates to network specific priority values. - LOW: Low priority. - NORMAL: Normal priority. The default value. - HIGH: High priority.

## Response `200`

A successful response.

- V2EstimateTransactionFeeResponse
  - `evmFee` V2EVMFeeEstimation
    - `gasUsed` string — The estimated gas to be used by the transaction (actual gas used may vary).
    - `gasPrice` string — The estimated current gas price, in wei.
  - `tronFee` V2TronFeeEstimation
    - `bandwidthUsed` string — The bandwidth to be used by the transaction out of available account bandwidth.
    - `energyUsed` string — The energy to be used by the transaction out of available account energy.
    - `totalSunUsed` string — The estimated total sun to be burned by the transaction, including energy.
    - `bandwidth` V2TronResourceFee — Resource-level fee breakdown for a Tron resource (bandwidth or energy).
      - `consumed` string — The amount of the resource consumed.
      - `burned` string — The amount of TRX burned for this resource.
      - `convertedBurned` V2ConvertedValue — A message representing a converted value.
        - `amount` string — The amount in USD.
        - `currencyCode` string — The currency code of the amount. Always USD.
    - `energy` V2TronResourceFee — Resource-level fee breakdown for a Tron resource (bandwidth or energy).
      - `consumed` string — The amount of the resource consumed.
      - `burned` string — The amount of TRX burned for this resource.
      - `convertedBurned` V2ConvertedValue — A message representing a converted value.
        - `amount` string — The amount in USD.
        - `currencyCode` string — The currency code of the amount. Always USD.
    - `accountActivationFee` V2TronAccountActivationFee
      - `fee` string — The activation fee in SUN.
      - `convertedFee` V2ConvertedValue — A message representing a converted value.
        - `amount` string — The amount in USD.
        - `currencyCode` string — The currency code of the amount. Always USD.
  - `totalFee` string — The estimated total fee for the transaction.
  - `convertedTotalFee` V2ConvertedValue — A message representing a converted value.
    - `amount` string — The amount in USD.
    - `currencyCode` string — The currency code of the amount. Always USD.
  - `gasless` boolean — True when this transfer is applied automatically as a gasless transfer, in which case total_fee is "0". Pairs with the per-asset AssetTokenInfo.sui_token_details.gasless indicator.

---

[API](https://skmtc.dev/utila/apis/utila-api.md) · [All operations](https://skmtc.dev/utila/apis/utila-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/utila/utila-api/revisions/b4f35b3a1e96/schema)
