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

# Withdraw USDC | Hyperliquid exchange

> Initiates a USDC withdrawal from Hyperliquid to Arbitrum. After making this request, L1 validators sign and send the withdrawal to the bridge contract.

<Info>
  You can only use this endpoint on the official Hyperliquid public API. It is not available through Chainstack, as the open-source node implementation does not support it yet. See [Hyperliquid methods](/docs/hyperliquid-methods) for the full availability breakdown.
</Info>

<Note>
  This endpoint requires signature authentication. See our comprehensive [Authentication via Signatures guide](/docs/hyperliquid-authentication-guide) for implementation details.
</Note>

Initiates a USDC withdrawal from Hyperliquid to Arbitrum. After making this request, L1 validators sign and send the withdrawal to the bridge contract. Withdrawals typically complete in approximately 5 minutes.

## Parameters

### Required parameters

* `action` (object, required) — The withdrawal action object containing:
  * `type` (string) — Must be `"withdraw3"`
  * `hyperliquidChain` (string) — `"Mainnet"` for mainnet, `"Testnet"` for testnet
  * `signatureChainId` (string) — Chain ID used for signing in hex format (e.g., `"0xa4b1"` for Arbitrum)
  * `destination` (string) — Arbitrum destination address in 42-character hexadecimal format
  * `amount` (string) — Amount of USDC to withdraw (e.g., `"100.5"` for 100.5 USDC)
  * `time` (number) — Current timestamp in milliseconds (must match nonce)

* `nonce` (number, required) — Current timestamp in milliseconds (must match action.time)

* `signature` (object, required) — EIP-712 signature of the action

## Withdrawal details

* **Fee** — \$1 USDC withdrawal fee
* **Processing time** — Approximately 5 minutes
* **Destination** — Withdrawals go to Arbitrum network
* **Minimum amount** — Must be greater than the withdrawal fee

## Signature format

This endpoint uses EIP-712 typed data signing:

```json theme={null}
{
  "types": {
    "HyperliquidTransaction:Withdraw": [
      {"name": "hyperliquidChain", "type": "string"},
      {"name": "destination", "type": "string"},
      {"name": "amount", "type": "string"},
      {"name": "time", "type": "uint64"}
    ]
  },
  "primaryType": "HyperliquidTransaction:Withdraw",
  "domain": {
    "name": "HyperliquidSignTransaction",
    "version": "1",
    "chainId": 42161,
    "verifyingContract": "0x0000000000000000000000000000000000000000"
  },
  "message": {
    "hyperliquidChain": "Mainnet",
    "destination": "0x...",
    "amount": "100.5",
    "time": 1234567890123
  }
}
```

## Returns

Returns an object with withdrawal initiation status:

* `status` — `"ok"` if withdrawal initiated
* `response` — Contains withdrawal details:
  * `type` — `"default"`

## Example request

<CodeGroup>
  ```shell cURL theme={null}
  curl -X POST https://api.hyperliquid.xyz/exchange \
    -H "Content-Type: application/json" \
    -d '{
      "action": {
        "type": "withdraw3",
        "hyperliquidChain": "Mainnet",
        "signatureChainId": "0xa4b1",
        "destination": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0",
        "amount": "100.5",
        "time": 1234567890123
      },
      "nonce": 1234567890123,
      "signature": {...}
    }'
  ```

  ```python Python (hyperliquid-python-sdk) theme={null}
  from hyperliquid.exchange import Exchange
  from hyperliquid.utils import constants
  import eth_account

  # Initialize with your private key
  account = eth_account.Account.from_key("0x...")
  exchange = Exchange(account, constants.MAINNET_API_URL)

  # Withdraw 100.5 USDC to Arbitrum
  withdrawal_result = exchange.withdraw_from_bridge(
      amount=100.5,
      destination="0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0",
  )

  print(withdrawal_result)
  ```

  ```typescript TypeScript (@nktkas/hyperliquid) theme={null}
  import { ExchangeClient, HttpTransport } from "@nktkas/hyperliquid";
  import { privateKeyToAccount } from "viem/accounts";

  // Initialize with your private key
  const wallet = privateKeyToAccount("0x...");

  const transport = new HttpTransport();
  const exchange = new ExchangeClient({ transport, wallet });

  // Withdraw 100.5 USDC to Arbitrum
  const withdrawalResult = await exchange.withdraw3({
    destination: "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0",
    amount: "100.5",
  });

  console.log(withdrawalResult);
  ```
</CodeGroup>

## Response example

```json theme={null}
{
  "status": "ok",
  "response": {
    "type": "default"
  }
}
```

## Withdrawal process

1. **Initiation** — Request sent to Hyperliquid
2. **Validation** — System validates balance and parameters
3. **Signing** — L1 validators sign the withdrawal
4. **Bridge interaction** — Withdrawal sent to Arbitrum bridge contract
5. **Completion** — USDC arrives in Arbitrum wallet (\~5 minutes)

## Use cases

* **Profit taking** — Withdraw trading profits to Arbitrum
* **Bridge to other chains** — Move funds to Arbitrum for further bridging
* **Risk management** — Reduce exposure by moving funds off-platform
* **Treasury management** — Regular withdrawal schedules

<Note>
  Ensure you have enough USDC to cover both the withdrawal amount and the \$1 fee. The fee is deducted from your Hyperliquid balance, not from the withdrawal amount.
</Note>

<Warning>
  Withdrawals are irreversible once initiated. Always verify the destination address on Arbitrum. The address must be a valid Arbitrum address that can receive USDC.
</Warning>


## OpenAPI

````yaml openapi/hyperliquid_node_api/hypercore_exchange/exchange_withdraw.json post /exchange
openapi: 3.0.0
info:
  title: Hyperliquid Exchange API
  version: 1.0.0
  description: >-
    API for trading operations on Hyperliquid exchange requiring authentication.
    ⚠️ WARNING: These endpoints require EIP-712 signatures for authentication.
    The example values provided will NOT work without proper cryptographic
    signing. You must implement EIP-712 signing to use these endpoints
    successfully.
servers:
  - url: https://api.hyperliquid.xyz
security: []
paths:
  /exchange:
    post:
      tags:
        - hyperliquid exchange
      summary: Withdraw USDC
      operationId: withdrawUSDC
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: object
                  properties:
                    type:
                      type: string
                      default: withdraw3
                      enum:
                        - withdraw3
                      description: Action type for withdrawal
                    hyperliquidChain:
                      type: string
                      description: Chain identifier
                      default: Mainnet
                      enum:
                        - Mainnet
                        - Testnet
                    signatureChainId:
                      type: string
                      description: EIP-712 signature chain ID
                      default: '0xa4b1'
                    destination:
                      type: string
                      description: Destination Ethereum address for the withdrawal
                    amount:
                      type: string
                      description: Amount to withdraw as a decimal string
                    time:
                      type: integer
                      description: Current timestamp in milliseconds
                  required:
                    - type
                    - hyperliquidChain
                    - signatureChainId
                    - destination
                    - amount
                    - time
                nonce:
                  type: integer
                  description: Current timestamp in milliseconds
                signature:
                  type: object
                  description: EIP-712 signature of the action with r, s, v components
                  properties:
                    r:
                      type: string
                      description: ECDSA signature r component (hex string)
                      example: >-
                        0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
                    s:
                      type: string
                      description: ECDSA signature s component (hex string)
                      example: >-
                        0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321
                    v:
                      type: integer
                      description: ECDSA recovery id (27 or 28)
                      example: 27
                  required:
                    - r
                    - s
                    - v
                vaultAddress:
                  type: string
                  description: >-
                    Address when trading on behalf of a vault or subaccount
                    (optional)
                  nullable: true
              required:
                - action
                - nonce
                - signature
            example:
              action:
                type: withdraw3
                hyperliquidChain: Mainnet
                signatureChainId: '0xa4b1'
                destination: '0x1234567890abcdef1234567890abcdef12345678'
                amount: '500.0'
                time: 1705234567890
              nonce: 1705234567890
              signature:
                r: >-
                  0x0000000000000000000000000000000000000000000000000000000000000000
                s: >-
                  0x0000000000000000000000000000000000000000000000000000000000000000
                v: 27
              vaultAddress: null
      responses:
        '200':
          description: USDC withdrawal result
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    description: Request status
                  response:
                    type: object
                    properties:
                      type:
                        type: string
                      data:
                        type: object
                        properties:
                          status:
                            type: string
                            description: Withdrawal status
                example:
                  status: ok
                  response:
                    type: withdraw
                    data:
                      status: success

````