latestOpenAPI 3.1.02026-08-213914255.9 MB

715c4defcbbf

Payouts

Create Payout

Sends money from an account or user balance to a saved payout method for that owner.

post/payouts

Headers

Idempotency-Keystring
Example:d9105228-4a08-46b1-8b91-42fed586d383

A unique key that makes this request safe to retry. See Idempotent requests.

Request body

OR

Example request

{
  "account_id": "biz_xxxxxxxxxxxxxx",
  "amount": 50,
  "currency": "usd",
  "notes": "Detailing supplies restock",
  "payout_method_id": "potk_xxxxxxxxxxxxxx",
  "speed": "standard"
}

Response

payout created

amountstring decimal required

The payout amount in whole currency units, as a decimal string.

created_atstring date-time required

When the payout was created.

currencystring required

Payout currency.

destination_amountstring decimal nullable required

The amount delivered in the destination currency, as a decimal string. Null until the payout settles; appears on the payout in GET /payouts once assigned.

destination_currencystring nullable required

Currency the funds are delivered in, taken from the payout method. On a stablecoin payout it follows the settlement payout minted alongside it — the GET /payouts row carrying this payout's id as payout_request_id — and is null only when no settlement payout exists.

estimated_arrivalstring date-time nullable required

Estimated time the funds become available in the destination account. Null until the payout settles.

exchange_ratenumber float nullable required

Exchange rate from the payout currency to the destination currency. Null until the payout settles; appears on the payout in GET /payouts once assigned.

fee_amountstring decimal required

The fee charged for the payout, in the payout currency, as a decimal string.

fee_paid_by'self' | 'platform' required

Who bore the payout fee: the account itself, or its parent platform.

idstring required

Payout ID, prefixed wdrl_ — the id POST returns is the id GET /payouts lists. Conversion requests created before this version keep answering under their cofr_ id.

markup_feestring decimal required

Whop's markup on the provider fee, in the payout currency, as a decimal string. "0.0" when none applies.

metadataobject required

Key-value data attached at creation and echoed on every read. At most 50 keys, key names up to 40 characters, string values up to 500 characters.

net_amountstring decimal required

The planned net for the destination, in the payout currency: amount minus fee_amount minus markup_fee when fee_paid_by is self; equal to amount when the platform covers the fees. A payout that ends denied, canceled, or failed delivered nothing — most keep the planned figure and failure says where the funds are, but a canceled stablecoin payout can report the settled outcome instead: amount carries what stayed in the balance, fees are zero because none were charged, and net_amount is 0 because nothing was delivered.

notesstring nullable required

Free-form notes attached by the payout creator, or null when none were provided. Maximum 255 characters.

object'payout' required
payer_namestring nullable required

Name of the entity processing the payout. Null until the payout settles.

payout_request_idstring nullable required

For a stablecoin payout, the id of the conversion request that funds it, prefixed cofr_; null on fiat payouts.

source'api' | 'dashboard' | 'automatic' | 'null' nullable required

How the payout was created. automatic means a scheduled auto-payout; null on payouts created before source tracking or through internal tooling.

speed'standard' | 'instant' required

Payout delivery speed.

status'requested' | 'in_review' | 'processing' | 'completed' | 'reversed' | 'canceled' | 'failed' | 'denied' required

Current payout status, in the same vocabulary as GET /payouts.

status_detailstring required

The finest machine phase under status — for example awaiting_provider_acceptance vs in_transit under processing, or the stablecoin conversion phase under requested. Informational vocabulary: values can be added without a version bump; status is the versioned contract.

trace_codestring nullable required

ACH trace number the recipient's bank can use to locate this payout. Always null here — it is assigned when the payout is submitted to the bank, and appears on the payout in GET /payouts once it has been sent; payouts not sent over ACH never get one.

Example response

{
  "amount": "50.0",
  "created_at": "2026-01-01T12:00:00.000Z",
  "currency": "usd",
  "estimated_arrival": "2026-01-01T12:00:00.000Z",
  "failure": {
    "code": "beneficiary_name_mismatch"
  },
  "fee_amount": "2.5",
  "fee_paid_by": "self",
  "id": "wdrl_xxxxxxxxxxxxx",
  "markup_fee": "0.0",
  "metadata": {
    "batch_id": "2026-08-18"
  },
  "net_amount": "49.75",
  "notes": "Detailing supplies restock",
  "object": "payout",
  "payer_name": "MassPay",
  "payout_method": {
    "nickname": "Ops checking",
    "supported_payout_method": {
      "delivery_type": "bank_deposit",
      "icon_url": "https://whop-assets-example.s3.amazonaws.com/uploads/image/2026-01-01/ach-payout-icon",
      "payer_name": "ACH Bank Deposit"
    }
  },
  "payout_request_id": "cofr_xxxxxxxxxxxxx",
  "source": "api",
  "speed": "instant",
  "status": "in_review",
  "status_detail": "pending_debit"
}