Forwarding Address

One address.
Every chain.

One deposit address per user. Deposits work from every supported chain and arrive on the chain you choose. No manual bridging. Self-custodial end to end.

Your deposit address

The same address on every chain. Scan it, paste it, or point an exchange withdrawal at it.

0x7c3A9f41E0c2b8D5a6F30e1C9d4B7A2e8f16F21e

Works from Arrives on Ethereum

From any chain to the one you chose

Set up once. Nothing for your user to learn.

From any chain
EthereumBaseArbitrum OneOP MainnetPolygonBNB ChainTempoPlasma
Forwarding Address 0x7c3A…F21e
Destination · Ethereum
  1. 1

    Generate

    Every user gets a deterministic address, derived from their wallet, your recovery wallet, and the destination chain.

  2. 2

    Activate

    Relayers start watching the source chains you choose.

  3. 3

    Share

    Your user sees one address. It works from exchanges, bridges, and other wallets.

  4. 4

    Forward

    Deposits route automatically and arrive on the destination chain, typically in 10 to 20 seconds.

Watch a deposit travel

A USDT withdrawal leaves an exchange on Optimism and lands in a wallet on Arbitrum.

Built for deposit flows

The wrong network is still the easiest way for a new user to lose a first deposit.

Wallets and neobanks

Receive from anyone, anywhere

A friend sends from Polygon while your user lives on Ethereum, and the money arrives where it should. There is no network dropdown to get wrong and no warning modal to explain.

Your deposit address

0x7c3A…F21e
works from
EthereumBaseArbitrum OneOP MainnetPolygonBNB ChainTempoPlasma

Onramps and exchanges

Every withdrawal lands

Exchange withdrawal forms ask the user to pick a network, and some of them pick wrong. Point the withdrawal at a forwarding address instead. Whichever network they choose, the funds land on yours.

Select withdrawal network

Ethereum ✓ supported
Arbitrum One ✓ supported
OP Mainnet ✓ supported
Polygon ✓ supported

Payment apps

Invoice once, get paid from anywhere

The sender pays from whichever chain holds their stablecoins. The recipient sees a single balance on the chain your app settles on, and neither side has to bridge anything first.

Invoice #1024 120 USDC
paid from Polygon Arbitrum BNB Chain ✓ settled on Ethereum

No custody in the middle

Every forwarding address is a deterministic contract on the source chain. Candide relayers watch it and route what arrives, and nothing in the contract lets them take ownership.

If a deposit gets stuck, the recipient withdraws it directly. For users who funded from an exchange they can't transact from, your recovery wallet steps in after a timelock.

None of this depends on trusting Candide. Each line of the table can be checked.

Hand the integration to your agent

Install the Candide skill and Claude or Codex learns the whole flow: routes, minimums, activation, recovery.

claude code
/plugin marketplace add candidelabs/skills
/plugin install candide@candide
codex
npx -y github:candidelabs/skills

Any other agent: point it at the raw skill file.

Under the hood: two calls, one address

Plain JSON-RPC with a team key from the Dashboard. No SDK, nothing to deploy.

1 · generate
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "forwarding_getAddress",
  "params": [{
    "recipient": "0xAbCd…Ef01",
    "custodialWithdrawer": "0xYour…Safe",
    "destinationChainId": 1
  }]
}
2 · activate
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "account_activateForwardingAddress",
  "params": [{
    "recipient": "0xAbCd…Ef01",
    "custodialWithdrawer": "0xYour…Safe",
    "destinationChainId": 1,
    "sourceChainIds": [8453, 42161, 10, 137]
  }]
}
forwarding_getRoutes

Supported chains, tokens, and fees. The source of truth.

forwarding_getMinimumAmount

Per-bridge deposit minimums for a route and token.

forwarding_estimateOutput

What the recipient receives after fees.

forwarding_getForwardsByRecipient

Every forward for a recipient, with delivery status per bridge.

Routes, tokens, and minimums change. Read them from forwarding_getRoutes instead of hardcoding.

Give every user
one address.

Create a team key in the Dashboard, pick the source networks, and the first address is two calls away. If your deposit flow is unusual, talk to us first.