Skip to main content
Self-custody only means something if it holds on our worst day. So: your funds do not depend on Calibri existing. Your money sits in a standard Gnosis Safe that only your own signer can move, and the transaction that moves it can be broadcast by anyone, from anywhere. This page is how you do that, and — just as important — what you need to keep in order to be able to.

The rescue page

Withdraw without Calibri

Builds the transfer, has you sign it with your passkey or a signing wallet, and hands you the transaction to send.
It calls no Calibri service. Not for your Safe address, not for balances, not for the signature, not for broadcasting. It reads the chain through an RPC URL you choose and it signs in your browser. If our API, our app, or our company is gone, that page still works.
1

Choose which key signs

Your passkey, or a signing wallet you added — including when the passkey is the thing you have lost.
2

Point it at a node

Any RPC for the chain your Safe is on — a public one, a provider, or your own node.
3

Give it your Safe

Prefilled if you have used Calibri on that device before. Otherwise paste the address.
4

Say where the funds go

Token, destination address, amount. Check the destination character by character.
5

Sign it

One prompt, from whichever key you chose. The signature never leaves the page.
6

Send it

From a browser wallet holding a little native currency for gas, or by handing the transaction details to any tool that can send one. Whoever sends it pays the gas and authorises nothing — your signature already did that.

What to keep, starting now

A passkey only works on the website it was created for. That is a WebAuthn rule, not a Calibri policy, and there is no way around it: if calibri.io stops resolving, no other page — ours, yours, or anyone’s — can ask your authenticator to sign. Keep the items below, and check occasionally that the domain still loads.A signing wallet removes that dependency entirely. You hold the key, so you can move your funds from any Safe interface whether or not this page, this domain, or this company still exists. If you want one thing from this page, it is that.
Three things, none of them secret: The exchange and collateral addresses are on Deployed Addresses, and your own Safe and its owner are on your Wallet page. The factory addresses — the ones needed to create a Safe that was never deployed — are listed under Wallet infrastructure, published there once the production contracts are deployed.

If your Safe was never deployed

Your Safe address is derived the moment you enrol, but the contract itself is only deployed when you first deposit — we pay for that. If you never deposited, nothing exists at the address and there is nothing to rescue. If funds were sent to an undeployed Safe address, it can still be created: both the passkey signer factory and the Safe factory are permissionless, so anyone can deploy them with the published addresses and your credential’s coordinates. That is a manual job, not something the rescue page does for you — the addresses you need are on the deployed-addresses page.

If your wallet is your own wallet

None of the passkey constraints apply. Your Safe is owned by an address whose private key you hold, so you can move it from any Safe interface, or by calling execTransaction yourself. Nothing about that depends on Calibri or on this domain.

USDC on another network

USDC you sent to your Safe address on Ethereum, Base, Arbitrum or Optimism that has not reached Polygon yet can be moved there without Calibri and without a signature — not even your passkey’s. The bridge module on your Safe lets anyone call it with a zero fee, and it can only send the USDC to your own Safe on Polygon.
1

Make sure your Safe exists on that network

Calibri creates it there on the first bridge. If it was never created, call createProxyFor(owner) on CalibriSafeFactoryV2 on that network, with owner set to your Safe owner from the Wallet page (your wallet address, or your passkey’s signer contract). Anyone can call it; the Safe it creates is at your address and owned only by that owner.
2

Bridge the balance

Call bridge(safe, FULL_BALANCE, 0, maxCctpFee) on CctpBridgeModule on that network, from any account with a little gas there. safe is your Safe address, FULL_BALANCE is type(uint256).max (the whole USDC balance at execution), the fee is 0, and maxCctpFee is 0 while Circle charges nothing for Standard transfers — otherwise at least Circle’s current minimum fee for that amount. The contract needs at least 1 USDC; Calibri’s minimums do not apply.
3

Deliver it on Polygon

Once Circle has attested the burn, submit the message and Circle’s attestation with receiveMessage on Circle’s MessageTransmitterV2 on Polygon. Anyone can deliver it. Circle mints the USDC into your Safe on Polygon, and from there it is an ordinary balance you can withdraw as above.
The module and factory addresses are listed under Cross-network deposits, published there once they are deployed. If you use your own wallet, you can also move funds from your Safe on that network by signing a Safe transaction there, as on Polygon.

What this does not cover

  • Redeeming a winning position. Settlement pays into your Safe, and redeeming is a different call than a transfer. It is documented in Redeeming winnings.
  • Moving outcome tokens rather than collateral. They are ERC-1155; the transfer call differs. The addresses and interfaces are public.
  • Open orders. A resting order is off-chain state on our side. If we are gone, it cannot fill — nothing of yours is at risk in it.
  • A withdrawal to another network that has not arrived. It has already left your Safe, and anyone can complete it with Circle’s public attestation. See Delivering it yourself.

The Safe

What it is and what can act on it.

Deployed addresses

Every contract, and how to verify it.

Your wallet options

Passkey wallet vs your own wallet.

Signing keys

A second key that can move these funds.