Skip to main content
You can use the CCTP 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
const result = await kit.bridge({
  from: { adapter, chain: "Ethereum_Sepolia" },
  to: {
    adapter,
    chain: "Arc_Testnet",
    useForwarder: true,
  },
  amount: "1.00",
});

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
const result = await kit.bridge({
  from: { adapter, chain: "Ethereum_Sepolia" },
  to: {
    recipientAddress: "RECIPIENT_ADDRESS",
    chain: "Arc_Testnet",
    useForwarder: true,
  },
  amount: "1.00",
});
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 bridge transfer, the result includes the forwarding fee. See How Bridge Fees Work for details.