---
title: "Withdraw from Safe with Signature"
method: POST
path: "/api/v1/accounts/withdraw"
tags: ["Account Management"]
---

# Withdraw from Safe with Signature

`POST /api/v1/accounts/withdraw`

Withdraws ERC20 tokens or native tokens (xDAI) from the user's Safe account.

For ERC20 tokens, provide the token contract address.
For native token (xDAI) withdrawals, use "0x0000000000000000000000000000000000000000" as the tokenAddress.

The signature should be generated by signing the transaction data obtained from
the `/api/v1/accounts/withdraw/transaction-data` endpoint.

The withdrawal is processed through a delay relay mechanism that executes after 3 minutes.

## Request body

- object
  - `amount` string, required — The amount to withdraw in the token's base units.
  - `to` string, required — The address to withdraw to.
  - `tokenAddress` string, required — The address of the token to withdraw. Use "0x0000000000000000000000000000000000000000" for native token (xDAI) withdrawals.
  - `signature` string, required — The wallet signature authorizing this withdraw.
  - `message` object, required — The message object containing transaction data and salt.
    - `salt` string, required — The salt value used in the EIP-712 typed data.
    - `data` string, required — The encoded transaction data from the typed data message.
  - `smartWalletAddress` string — Optional. If using a smart account, the address of the smart wallet to use for the withdraw.

## Response `200`

Successfully submitted the withdraw request.

- object
  - `data` object, required
    - `id` string, required — Unique identifier for the delayed transaction.
    - `safeAddress` string, required — The Safe contract address associated with the transaction.
    - `transactionData` string, required — JSON stringified data payload of the transaction.
    - `enqueueTaskId` string, required — Identifier of the task that enqueued this transaction.
    - `dispatchTaskId` string, nullable — Identifier of the task responsible for dispatching this transaction.
    - `readyAt` string, date-time, nullable — Timestamp indicating when the transaction is ready for processing.
    - `operationType` 'CALL' | 'DELEGATECALL', required — Type of operation being performed.
    - `userId` string, required — Identifier of the user associated with the transaction.
    - `status` 'QUEUING' | 'WAITING' | 'EXECUTING' | 'EXECUTED' | 'FAILED', required — Current status of the transaction.
    - `createdAt` string, date-time, required — Timestamp of when the transaction was created.

## Other responses

- `401` — Unauthorized - invalid or missing authentication token.
- `404` — Safe account or token not found for the user.
- `422` — Unprocessable Entity - validation errors in request body.
- `500` — Internal server error.

---

[API](https://skmtc.net/gnosispay/apis/gnosispay-api.md) · [All operations](https://skmtc.net/gnosispay/apis/gnosispay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/gnosispay/gnosispay-api/versions/e0a09962c187/schema)
