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

# Withdrawals

> Withdrawing funds from Hyperliquid to Arbitrum

Withdrawals are submitted via a user-signed EIP-712 payload using `createAction` / `executeAction` with `action: 'withdrawal'` (see [SDK / Actions](/sdk/actions)). Agents cannot initiate withdrawals — the user's wallet must sign each withdrawal directly. This is a protocol-level constraint, not an SDK choice.

On Hyperliquid, withdrawals always send **USDC to the user's address on Arbitrum** via the Hyperliquid L1 -> Arbitrum bridge. Processing typically takes 3-4 minutes.

### `withdrawal`

|                 |                                                                   |
| --------------- | ----------------------------------------------------------------- |
| **Signers**     | `USER` — agents cannot initiate withdrawals (protocol constraint) |
| **Params**      | `WithdrawalParams` — `{ destination, amount }`                    |
| **SDK methods** | `withdraw()`                                                      |

`destination` is the Arbitrum address to receive the funds. `amount` is the USDC amount as a human-readable string (e.g. `"100.00"`).

<Warning>
  `withdraw()` triggers a wallet popup. Unlike trading actions — which are signed silently by the agent — withdrawals require an explicit signature from the user's connected wallet. Plan for this in your UX flow.
</Warning>

<Info>
  Under `unifiedAccount` abstraction mode, withdrawals are drawn from the user's **spot USDC** balance. Ensure sufficient spot USDC is available before initiating a withdrawal — perps margin must be freed (by closing positions or reducing margin) and transferred to spot first if needed.
</Info>
