Skip to main content
You can use the Forwarding Service on bridge transfers. When enabled, it fetches the attestation and submits the mint on the destination chain. You don’t need to poll for attestations or have access to a wallet on the destination chain.

Prerequisites

Before you begin, ensure that you’ve: These are required so any example below runs with a valid kit and adapter.

Use with adapters on both chains

Set useForwarder: true when you have adapters for both chains but want the Forwarding Service to submit the mint transaction on the destination:
TypeScript

Use without a destination adapter

When you don’t have access to a wallet on the destination chain, such as with server-side or custodial bridge flows, omit the destination adapter and pass recipientAddress with useForwarder: true:
TypeScript
In this mode, mint confirmation comes from the Circle Iris API response rather than an onchain receipt. Because the Forwarding Service submits the mint transaction, no locally signed transaction hash is returned and the mint step’s data field is undefined.

Forwarding fee

The Forwarding Service charges a fee that is deducted from the amount minted on the destination chain by default. When you pay fees on the source chain (config.feePayment: "source"), that fee is collected upfront in source-chain USDC instead, and the recipient receives the exact bridge amount. When you estimate costs for a bridge transfer, the result includes the forwarding fee. See How bridge fees work for details.

Solana destinations

For Solana destinations, the forwarding fee also covers creating the recipient’s USDC associated token account (ATA). When you forward a transfer to Solana, set config.maxFee to the forwarder fee that estimate() returns, or leave maxFee unset. When maxFee is unset, the SDK checks that the bridge amount covers the forwarding fee. If it doesn’t, the SDK throws an INPUT_INVALID_AMOUNT error before it sends any transaction.
If you set config.maxFee, it must cover the full fee, including the cost of the ATA. Otherwise, the transfer can stall after the burn and require a manual mint with retryBridge.