---
title: "Submit withdrawal"
method: POST
path: "/wallet/withdraw"
tags: ["Wallet"]
---

# Submit withdrawal

`POST /wallet/withdraw`

Creates a withdrawal in **processing** state.

Set `channel_type` to `"crypto"` for on-chain withdrawals or `"fiat"` for bank
transfers. See the request body schema for full field details per channel type.

Requires the **withdraw** permission on the API key.

If the API key has a withdrawal address whitelist, the destination (`address`,
`address_book_id`, or `recipient_id`) must be in the whitelist or the request
is rejected with `403 FORBIDDEN`.

## Request body

- WithdrawRequest — Submit a withdrawal request. Set `channel_type` to `"crypto"` for on-chain withdrawals or `"fiat"` for bank transfers. **Crypto** - provide `address` or `address_book_id` (one required). **Fiat** - provide `recipient_id` (a saved bank account ID) or inline bank details (`account_number` required). Set `instant_pay: true` to route via Instant EFT.
  - `currency` string, required — Currency code.
  - `amount` string, required — Withdrawal amount as a decimal string.
  - `channel_type` 'crypto' | 'fiat', required — `crypto` for on-chain; `fiat` for bank transfer.
  - `idempotency_key` string — Optional idempotency key. Duplicate requests with the same key return the original result.
  - `address` string — Crypto only. Destination address. Required when `address_book_id` is not provided.
  - `address_book_id` string — Crypto only. Saved address ID. Can be used instead of `address`.
  - `network` string — Crypto only. Network code.
  - `address_tag` string — Crypto only. Destination tag or memo for memo-based networks (e.g. XRP destination tag, XLM memo, EOS memo). Use this field in preference to `memo`.
  - `memo` string — Crypto only. Alias for `address_tag` - accepted for backward compatibility. If both are provided, `address_tag` takes precedence.
  - `recipient_id` string — Fiat only. Saved bank account ID. Can be used instead of inline bank details.
  - `instant_pay` boolean — Fiat only. Routes the withdrawal via Instant EFT.
  - `account_holder_name` string — Fiat only. Account holder full name.
  - `bank_name` string — Fiat inline only. Required when `recipient_id` is not provided. Must be a full bank name from `GET /wallet/banks` (e.g. `"FNB South Africa"`).
  - `bank_code` string — Fiat only. Bank clearing code (optional).
  - `branch_code` string — Fiat only.
  - `account_number` string — Fiat only. Required when `recipient_id` is not provided.
  - `account_type` 'Savings' | 'Current' | 'Cheque' — Fiat inline only. Bank account type.
  - `bank_reference` string — Fiat only. Reference that appears on the recipient's bank statement. Defaults to `"AltCoin Trader"` if not provided.

## Response `200`

Withdrawal created successfully in processing state.

- Withdrawal — A created or historical withdrawal record.
  - `id` string
  - `currency` string
  - `amount` string
  - `fee_amount` string
  - `amount_after_fees` string
  - `status` string — Lowercase status value from the funding service.
  - `channel_type` 'crypto' | 'fiat'
  - `network_code` string, nullable
  - `address` string, nullable — Present for crypto withdrawals.
  - `address_tag` string, nullable — Memo or destination tag. Present for crypto when applicable.
  - `tx_hash` string, nullable — On-chain transaction hash. Present once broadcast.
  - `requested_at` integer, nullable
  - `completed_at` integer, nullable
  - `created_at` integer

## Other responses

- `400` — Invalid request parameters.
- `401` — Missing or invalid authentication headers.
- `403` — API key does not have permission for this action.
- `429` — Rate limit exceeded.
- `503` — Service temporarily unavailable.

---

[API](https://skmtc.dev/altcointrader/apis/altcointrader-api.md) · [All operations](https://skmtc.dev/altcointrader/apis/altcointrader-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/altcointrader/altcointrader-api/revisions/fcbbd5bcd699/schema)
