This flow is verified in production with both 1-of-1 and multi-owner Safes on EVM chains. The oracle validates the Safe’s authorization as a contract signature (ERC-1271), so any contract wallet producing a valid ERC-1271 signature can withdraw — this walkthrough covers the Safe flow specifically. For the API-driven flow with a regular wallet, see Programmatic Withdrawals.
Before you start
- Open your Safe at app.safe.global on the chain where you want to receive funds.
- Have a signer wallet (for example MetaMask) that is an owner of the Safe, unlocked and set to that same chain.
- Keep two browser tabs open side by side: the Safe app and relay.link/withdraw. You will switch between them several times.
- Enable blind signing in the Safe settings. The withdrawal authorization is a raw hash, and the Safe cannot display its contents.
- The Safe itself needs no ETH. Gas for the final transaction is paid by the signer wallet.
Connect the Safe to Relay
- Connect your signer wallet to the Safe app. In the Safe app, click Connect Wallet and pick your signer wallet. The account shown in the top right must be one of the Safe owners.
- Choose Safe as your wallet on relay.link/withdraw. Open relay.link/withdraw, click Connect, and pick Safe in the wallet list. Do not pick your signer wallet here — Relay would look up the signer’s balance instead of the Safe’s.
- Pair through WalletConnect. Relay shows a QR code. Click Copy QR URI, switch to the Safe app, open the WalletConnect icon in the top bar, and paste the URI. Relay should now show the Safe address in its top right corner.
Sign the withdrawal authorization
- Fill in the withdrawal. In Relay, open the Withdraw tab and select the chain and token. The Withdraw to Address field defaults to the connected Safe, which is what you want. Check the available balance, then click Withdraw.
- Confirm the message in the Safe app. A Confirm message modal appears containing a 32-byte hash — the withdrawal authorization Relay asked your Safe to sign. The blind-signing warning is Safe’s standard notice for any raw hash and is expected here. Keep this modal open until every required owner has confirmed; closing it aborts the request and you must restart from step 4.
- Switch network if prompted, then sign. If a Change your wallet network banner appears, switch and approve in your signer wallet — the Sign button only activates once the signer is on the right network.
- Reach the signature threshold. The Safe Messages tab lists the message as Confirmed once enough owners have signed. For thresholds above 1, each additional owner opens their own Safe app session, goes to Transactions → Messages, opens the message, and clicks Sign. The Relay tab keeps waiting until the threshold is reached.
Submit the on-chain transaction
- Submit from Relay. Once the signature is collected, the Relay progress bar moves to Submit. Click Submit Transaction. The prepared withdrawal backing this step expires about one hour after it is prepared — this applies to submitting the transaction, not to collecting signatures in the previous steps. If it expires, the funds return to your hub balance and you can start again from step 4.
- Review the transaction in the Safe app. A Confirm transaction modal appears. Before signing, check three things: the call is execute on RelayDepository, your Safe address appears in the decoded request as the recipient of the funds, and the amount matches what you entered in Relay — for token withdrawals the decoded amount is shown in raw base units (for example, a 6-decimal USDC amount has six extra digits). Then sign and approve in your signer wallet.
- Execute from the queue if needed. If the transaction lands in the Safe Queue instead of executing immediately, open the Queue tab and click Execute on the RelayDepository entry. For thresholds above 1, the other owners confirm here first; any owner can then execute.
Confirm the funds arrived
The Safe shows Transaction was successful with the transaction hash, and the block explorer’s internal transactions show the transfer from the Relay Depository to your Safe address.If the signing prompt never appears
- Wrong network on the signer wallet. The Safe Sign button stays disabled until the wallet is on the Safe’s chain.
- Connected wallet is not an owner. Check the connected account against the Safe’s owner list under Settings.
- Threshold above 1. The first owner signs in the modal; the others sign from Transactions → Messages in their own Safe app session while the Relay tab stays open.
- Modal was closed. Closing the Confirm message modal aborts the request. Start again from step 4.
- Relay connected to the signer wallet instead of the Safe. Disconnect in Relay and reconnect choosing Safe. The Withdraw to Address field must show the Safe address.
- Browser blocking pop-ups. Allow pop-ups for app.safe.global so the signer wallet can open.