Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Token Requests

tokenRequests declares the token outputs required on the target chain. The orchestrator routes available source assets to satisfy them.

Using token requests

Add tokenRequests to your sendCalls to specify what tokens you need:

How it works

  1. Declare the target-chain token outputs.
  2. The orchestrator evaluates available balances.
  3. It prepares funding and token delivery.
  4. The requested tokens arrive before the calls execute; funding and calls succeed or fail together.

TokenRequest object

FieldTypeDescription
tokenstringERC-20 token contract address on the target chain
amountbigintAmount in base units (e.g., parseUnits('100', 6) for 100 USDC)

Multiple token requests

Request multiple target-chain tokens in one intent:

sendCalls({
  calls: [{ to: '0x...', data: '0x...' }],
  chainId: 8453,
  tokenRequests: [
    {
      token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
      amount: parseUnits('100', 6),
    },
    {
      token: '0x4200000000000000000000000000000000000006', // WETH
      amount: parseUnits('0.05', 18),
    },
  ],
})

Common use cases

E-commerce checkout

User wants to buy an item priced in USDC, but only has ETH on mainnet:

sendCalls({
  calls: [{
    to: SHOP_CONTRACT,
    data: encodeFunctionData({
      abi: shopAbi,
      functionName: 'purchase',
      args: [itemId],
    }),
  }],
  chainId: 8453, // Shop is on Base
  tokenRequests: [{
    token: USDC_BASE,
    amount: parseUnits('29.99', 6), // Item price
  }],
})

DeFi interactions

Provide liquidity with tokens from any chain:

sendCalls({
  calls: [{
    to: LP_CONTRACT,
    data: encodeFunctionData({
      abi: lpAbi,
      functionName: 'addLiquidity',
      args: [amount0, amount1],
    }),
  }],
  chainId: 42161, // Arbitrum
  tokenRequests: [
    { token: USDC_ARB, amount: parseUnits('1000', 6) },
    { token: WETH_ARB, amount: parseUnits('0.5', 18) },
  ],
})

NFT minting

Mint an NFT with payment in any token:

sendCalls({
  calls: [{
    to: NFT_CONTRACT,
    data: encodeFunctionData({
      abi: nftAbi,
      functionName: 'mint',
      args: [tokenId],
    }),
  }],
  chainId: 8453,
  tokenRequests: [{
    token: USDC_BASE,
    amount: parseUnits('0.5', 6), // Mint price
  }],
})

Next steps