---
title: "Create withdrawal"
method: POST
path: "/withdrawals"
tags: ["Withdrawals"]
---

# Create withdrawal

`POST /withdrawals`

Creates a withdrawal request for a ledger account

Required permissions:
 - `payout:withdraw_funds`
 - `payout:destination:read`

## Request body

- object — Parameters for CreateLedgerWithdrawal
  - `acknowledge_bank_warning` boolean, nullable — Set to true to continue when the bank could not confirm the account holder's name. The withdrawal is refused without it so the creator can fix the account or link their bank first.
  - `amount` number, required — The amount to withdraw in the specified currency
  - `company_id` string, required — The ID of the company to withdraw from.
  - `currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
  - `idempotency_key` string, nullable — A client-generated key that makes retries safe. Retrying with the same key returns the original withdrawal instead of creating a second one.
  - `payout_method_id` string, nullable — The ID of the payout method to use for the withdrawal.
  - `platform_covers_fees` boolean, nullable — Whether the platform covers the payout fees.
  - `speed` 'standard' | 'instant' — The different speeds of withdrawals
  - `statement_descriptor` string, nullable — Custom statement descriptor for the withdrawal. Must be between 5 and 22 characters and contain only alphanumeric characters.

## Response `200`

A successful response

- Withdrawal — A withdrawal represents a request to transfer funds from a ledger account to an external payout method.
  - `amount` number, required — The withdrawal amount as a decimal number in the specified currency (e.g., 100.00 for $100.00 USD).
  - `created_at` string, date-time, required — The datetime the withdrawal was created.
  - `currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
  - `error_code` 'account_closed' | 'account_does_not_exist' | 'account_information_invalid' | 'account_number_invalid_region' | 'account_frozen' | 'account_lookup_failed' | 'account_not_found' | 'amount_out_of_bounds' | 'attributes_not_validated' | 'b2b_payments_prohibited' | 'bank_statement_required' | 'compliance_review' | 'currency_not_supported' | 'deposit_canceled' | 'deposit_failed' | 'deposit_rejected' | 'destination_unavailable' | 'exceeded_account_limit' | 'expired_quote' | 'generic_payout_error' | 'junk_failure_reason' | 'technical_problem' | 'provider_temporarily_unavailable' | 'identification_number_invalid' | 'invalid_account_number' | 'invalid_bank_code' | 'invalid_beneficiary' | 'invalid_mailing_address' | 'invalid_branch_number' | 'invalid_branch_code' | 'invalid_phone_number' | 'invalid_routing_number' | 'invalid_swift_code' | 'invalid_company_details' | 'manual_cancelation' | 'misc_error' | 'missing_city_and_country' | 'missing_phone_number' | 'missing_remittance_info' | 'payee_name_invalid' | 'beneficiary_name_mismatch' | 'receiving_account_locked' | 'rejected_by_compliance' | 'rtp_not_supported' | 'non_transaction_account' | 'source_token_insufficient_funds' | 'ssn_invalid' | 'wallet_screenshot_required' | 'unsupported_region' | 'payout_provider_timeout', required — The different error codes a payout can be in.
  - `error_message` string, nullable, required — A human-readable message describing why the payout failed. Null if no error occurred.
  - `estimated_availability` string, date-time, nullable, required — The estimated time at which the funds become available in the destination account. Null if no estimate is available. As a Unix timestamp.
  - `fee_amount` number, required — The fee charged for processing this withdrawal, in the same currency as the withdrawal amount.
  - `fee_type` 'exclusive' | 'inclusive', required — The different fee types for a withdrawal.
  - `id` string, required — The unique identifier for the withdrawal.
  - `ledger_account` object, required — The ledger account from which the withdrawal funds are sourced.
    - `company_id` string, nullable, required — Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"VXNlci0xMA=="`) or integer (such as `4`) input value will be accepted as an ID.
    - `id` string, required — The unique identifier for the ledger account.
  - `markup_fee` number, required — An additional markup fee charged for the withdrawal, in the same currency as the withdrawal amount. Only applies to platform accounts using Whop Rails.
  - `payout_request_id` string, nullable, required — The id of the payout request (returned by POST /payouts) that this withdrawal settles. Null unless the withdrawal originated from a stablecoin payout.
  - `payout_token` object, nullable, required — The saved payout destination used for this withdrawal (e.g., a bank account or PayPal address). Null if no payout token was used.
    - `created_at` string, date-time, required — The datetime the payout token was created.
    - `destination_currency_code` string, required — The three-letter ISO currency code that payouts are delivered in for this destination.
    - `id` string, required — The unique identifier for the payout token.
    - `nickname` string, nullable, required — A user-defined label to help identify this payout destination. Not sent to the provider. Null if no nickname has been set.
    - `payer_name` string, nullable, required — The legal name of the account holder receiving payouts. Null if not provided.
  - `speed` 'standard' | 'instant', required — The different speeds of withdrawals
  - `status` 'requested' | 'awaiting_payment' | 'in_transit' | 'completed' | 'failed' | 'canceled' | 'denied', required — The status of a withdrawal request
  - `trace_code` string, nullable, required — The ACH trace number for tracking the payout through the banking network. Null if not available or not an ACH transaction.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `422` — Verification required
- `429` — Too many requests
- `500` — Internal server error

---

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