Skip to main content
You can use the Circle Forwarding Service on crosschain 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.

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
const result = await kit.bridge({
  from: { adapter, chain: "Ethereum" },
  to: {
    adapter,
    chain: "Base",
    useForwarder: true,
  },
  amount: "100.50",
});

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 transfers, omit the destination adapter and pass recipientAddress with useForwarder: true:
TypeScript
const result = await kit.bridge({
  from: { adapter, chain: "Ethereum" },
  to: {
    recipientAddress: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    chain: "Base",
    useForwarder: true,
  },
  amount: "100.50",
});
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. When you estimate costs for a crosschain transfer, the result includes the forwarding fee. See Custom Fees for details on how fees work.