> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rhinestone.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-input bridge

> Bridge tokens from multiple source chains or tokens into a single destination transaction.

With Rhinestone, you can bridge from multiple chains and/or multiple tokens.

The API will automatically find the most optimal path, whether it's a single- or multi-input intent.

## Request

You can also influence the routing by specifying input tokens and chains via `accountAccessList`:

```json theme={null}
{
  "accountAccessList": {
    "chainIds": ["eip155:10", "eip155:8453"],
    "tokens": ["USDC"]
  }
}
```

Learn more about choosing the inputs in the ["Getting a Quote" guide](../guides/getting-a-quote#source-chain-%2F-token).

## Response

In the case of multi-input bridging, you will get a route whose `cost.input` lists multiple entries (one per source chain and/or token), and `signData.origin[]` carries one entry per source chain.

```json Multi-Input Intent theme={null}
{
  "routes": [
    {
      "intentId": "...",
      "cost": {
        "input": [
          {
            "chainId": "eip155:8453",
            "tokenAddress": "0x4200000000000000000000000000000000000006",
            "symbol": "WETH",
            "decimals": 18,
            "price": { "usd": 2412.37 },
            "amount": "22291303013436002"
          },
          {
            "chainId": "eip155:10",
            "tokenAddress": "0x0b2c639c533813f4aa9d7837caf62653d097ff85",
            "symbol": "USDC",
            "decimals": 6,
            "price": { "usd": 0.99 },
            "amount": "8370380"
          }
        ]
      },
      "signData": {
        "origin": [
          { /* typed data for eip155:8453 */ },
          { /* typed data for eip155:10 */ }
        ],
        "destination": { /* typed data for the destination */ }
      }
    }
  ]
}
```

If the user doesn't have outstanding Permit2 approvals, they will need to approve multiple input tokens.

The user will also need to sign each entry in `signData.origin[]` separately — one signature per input chain.
