Skip to main content
CCTP charges fees on Fast Transfers only. Standard Transfers are free. Fast Transfer enables USDC transfers at faster-than-finality speeds by leveraging Circle’s Fast Transfer allowance. These transfers incur a fee that varies by route.
  • Fee range: Typically 0.01 USDC per transfer (0.1 basis points on a $1,000 transfer)
  • When the fee is charged: When you initiate a burn with minFinalityThreshold ≤ 1000
  • Payment method: The fee is deducted from the burn amount on the source blockchain

Get the current fee

To retrieve the current Fast Transfer fee for your route, call the GET /v2/burn/USDC/fees endpoint. For more details, see Get the fee for your transfer.

Maximum fee parameter

When calling depositForBurn, you specify a maxFee parameter that sets the maximum fee you’re willing to pay:
JavaScript
await tokenMessenger.depositForBurn(
  amount,
  destinationDomain,
  mintRecipient,
  burnToken,
  destinationCaller,
  500n, // maxFee: Maximum 0.0005 USDC (500 subunits)
  1000, // minFinalityThreshold: Fast Transfer
);
If the actual fee exceeds your specified maxFee, the transaction will revert on the source blockchain, and no USDC will be burned. To avoid transaction failures:
  1. Retrieve the current fee before initiating a transfer
  2. Add a small buffer (for example, 10-20%) to account for potential fee fluctuations
  3. Set maxFee to this buffered amount
Example:
JavaScript
async function calculateMaxFee(sourceDomain, destDomain) {
  // Get current fee
  const response = await fetch(
    `https://iris-api-sandbox.circle.com/v2/burn/USDC/fees/${sourceDomain}/${destDomain}`,
  );
  const { fastTransferFee } = await response.json();

  // Convert to subunits and add 20% buffer
  const feeSubunits = BigInt(
    Math.floor(parseFloat(fastTransferFee) * 1_000_000),
  );
  const maxFee = (feeSubunits * 120n) / 100n; // 20% buffer

  return maxFee;
}

// Use in your burn call
const maxFee = await calculateMaxFee(0, 1); // Ethereum to Avalanche

Fee optimization strategies

To minimize fees while maximizing transfer speed:
  • Choose the right method: Use Fast Transfer when speed is critical and Standard Transfer when cost optimization is the priority.
  • Monitor allowance: For high-volume applications, monitor the Fast Transfer allowance and switch to Standard Transfer when it’s low.
  • Batch transfers: If you’re making multiple transfers, consider batching them during periods when Fast Transfer allowance is high.
  • Set appropriate maxFee: Always retrieve the current fee before initiating a transfer and set maxFee with a buffer to account for minor fluctuations.