Skip to main content
You can use the Forwarding Service when spending from a Unified Balance on the destination blockchain. When enabled, it fetches the attestations from source blockchains and submits the mint on the destination blockchain. You don’t need to poll for attestations or have access to a wallet on the destination.

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 all blockchains

Set useForwarder: true when you have adapters on all source and destination blockchains but want the Forwarding Service to submit the mint transaction on the destination:
TypeScript
import { AppKit } from "@circle-fin/app-kit";
import { createViemAdapterFromPrivateKey } from "@circle-fin/adapter-viem-v2";

const kit = new AppKit();

const sourceAdapter = createViemAdapterFromPrivateKey({
  privateKey: process.env.EVM_PRIVATE_KEY as string,
});
const destinationAdapter = sourceAdapter;

const result = await kit.unifiedBalance.spend({
  amount: "1.00",
  from: {
    adapter: sourceAdapter,
    allocations: [{ amount: "1.00", chain: "Base_Sepolia" }],
  },
  to: {
    adapter: destinationAdapter,
    chain: "Arc_Testnet",
    useForwarder: true,
  },
  token: "USDC",
});

Use without a destination adapter

When you don’t have access to a wallet on the destination blockchain, such as with server-side or custodial spend flows, omit the destination adapter and pass recipientAddress with useForwarder: true:
TypeScript
import { AppKit } from "@circle-fin/app-kit";
import { createViemAdapterFromPrivateKey } from "@circle-fin/adapter-viem-v2";

const kit = new AppKit();

const sourceAdapter = createViemAdapterFromPrivateKey({
  privateKey: process.env.EVM_PRIVATE_KEY as string,
});

const result = await kit.unifiedBalance.spend({
  amount: "1.00",
  from: {
    adapter: sourceAdapter,
    allocations: [{ amount: "1.00", chain: "Base_Sepolia" }],
  },
  to: {
    chain: "Arc_Testnet",
    recipientAddress: process.env.EVM_RECIPIENT_ADDRESS as string,
    useForwarder: true,
  },
  token: "USDC",
});
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 spend fees for a spend transaction, the result includes the forwarding fee. See How Unified Balance fees work for details.