Skip to main content
Upcoming — generated from the latest merged element source; documents unreleased development. Use the channel picker at the top of the sidebar for the docs of a published release.
In development — not yet part of a stable release.

Playground

Assemble the elements with sample data — drive the controls, add and arrange elements, and watch events fire live:

Usage

Options

Pass these to whop.wallet.create({ … }) — or as props on <Wallet> in React.
string
ISO currency the amount field displays in. An unknown code falls back to USD. Defaults to "usd".
string
required
Whose money these surfaces read: an account’s biz_… tag, or a user’s own user_… tag — a user reads their own balance, so their tag only answers for the viewer themselves.
Appearance
Visual customization for this group’s elements — overrides the global WhopElements({ appearance }); change it live with update({ appearance }).
WhopElementsLocale
Locale for this group’s element UI text — one of the app’s built locales, overriding the global config; any other value falls back to the default locale.

Events

Pass a callback in the create options / React props.

onLoadingChange

Fired when the grouped loading state changes — true while any mounted element is still loading. Signature: ((loading: boolean) => void)

Methods

Call these on the Wallet handle — the return of whop.wallet.create({ … }) (vanilla) or useWallet() (React).

update

Update the handle live: any of its options (appearance and locale included), propagated to every mounted element. React consumers never call it — updating the namespace component’s props does the same. Signature: (options: Partial<WalletOptions>) => void

Returned objects

Live objects returned by the methods above — hold the reference and call it on your page; these are capabilities, not serializable data.

DepositSavedCard

A card the consumer already holds for this account — the element renders it as a funding row and hands the choice back through cardDepositRequested; it never charges a card itself.

id

Payment-method id echoed back in cardDepositRequested. Signature: string

label

Row label, e.g. Visa •••• 4242. Signature: string

cardBrand

Brand key used to pick the row icon — visa, mastercard, amex, discover, jcb. Signature: string | null | undefined

DepositCardFee

The public surface of DepositCardFee.

percentageFee

Percentage POINTS, not a fraction: 2.9 means 2.9%. Signature: number

fixedFee

Flat fee in major units: 0.3 means $0.30. Signature: number

radarFee

Fraud-screening fee in major units. Signature: number

SendRecipient

The public surface of SendRecipient.

id

Signature: string

name

Signature: string | null

username

Signature: string | null

profilePicUrl

Signature: string | null

kind

Signature: "user" | "business" | "email"

WithdrawalQuoteSpeed

The public surface of WithdrawalQuoteSpeed.

estimatedArrival

Signature: string | null | undefined

fee

Signature: number

totalReceived

Signature: number

currency

Signature: string | undefined

destinationCurrency

Signature: string | undefined

exchangeRate

Signature: number | undefined

minLimit

Signature: number | undefined

maxLimit

Signature: number | null | undefined

WithdrawalQuote

The public surface of WithdrawalQuote.

amount

Signature: number

currency

Signature: string

destinationCurrency

Signature: string

exchangeRate

Signature: number

minLimit

Signature: number

maxLimit

Signature: number | null | undefined

standard

Signature: WithdrawalQuoteSpeed | null | undefined

instant

Signature: WithdrawalQuoteSpeed | null | undefined

WithdrawalMethod

The public surface of WithdrawalMethod.

id

Signature: string

nickname

Signature: string | null | undefined

accountReference

Signature: string | null | undefined

payerName

Signature: string | null | undefined

destinationCurrency

Signature: string

isDefault

Signature: boolean

iconUrl

Signature: string | null | undefined

deliveryType

Signature: string

supportsStandard

Signature: boolean

supportsInstant

Signature: boolean

bankVerificationState

Signature: string | null | undefined

feeStructure

Signature: { percentage: number; fixedAmount: number; currency: string; } | null | undefined

standardEstimatedArrival

Signature: string | null | undefined

instantEstimatedArrival

Signature: string | null | undefined

quote

Signature: WithdrawalQuote | null | undefined

WithdrawalRequiredField

The public surface of WithdrawalRequiredField.

id

Signature: string

label

Signature: string

inputType

Signature: string

required

Signature: boolean

sensitive

Signature: boolean

placeholder

Signature: string | null | undefined

validation

Signature: string | null | undefined

options

Signature: string[] | null | undefined

WithdrawalSupportedMethod

The public surface of WithdrawalSupportedMethod.

id

Signature: string

name

Signature: string | null | undefined

iconUrl

Signature: string | null | undefined

deliveryType

Signature: string

supportsStandard

Signature: boolean

supportsInstant

Signature: boolean

supportsPlaid

Signature: boolean | undefined

quotes

Signature: WithdrawalQuote[]

requiredFields

Signature: WithdrawalRequiredField[]

WithdrawalLimits

The public surface of WithdrawalLimits.

standard

Signature: { maxAmount: number; errorMessage?: string | null | undefined; }

instant

Signature: { maxAmount: number; dailyAmountRemaining?: number | null | undefined; errorMessage?: string | null | undefined; }

WithdrawalCreateMethodInput

The public surface of WithdrawalCreateMethodInput.

country

Signature: string

supportedPayoutMethodId

Signature: string

destinationCurrency

Signature: string

nickname

Signature: string

fields

Signature: Record<string, string>

WithdrawalRequest

The public surface of WithdrawalRequest.

amount

Signature: number

currency

Signature: string

payoutMethodId

Signature: string

presentedFee

Signature: number

speed

Signature: "standard" | "instant"

acknowledgeBankWarning

Signature: boolean | undefined

ActivityDateRangeOverride

The public surface of ActivityDateRangeOverride.

start

Signature: string

end

Signature: string

includeTime

Signature: boolean | undefined

postedAfter

Signature: string | undefined

postedBefore

Signature: string | undefined

displayPostedAfter

Signature: string | undefined

displayPostedBefore

Signature: string | undefined

LedgerActivity

The public surface of LedgerActivity.

object

Signature: "ledger_activity"

id

Ledger activity ID. Signature: string

line_type

The ledger line category this activity was posted under. Signature: "ad_budget_release" | "ad_campaign_budget" | "ad_publisher_payout" | "ad_publisher_payout_received" | "ad_spend_charge" | "affiliate_fee" | "airdrop" | "airdrop_link_created" | "airdrop_link_redeemed" | "airdrop_link_returned" | "airdrop_reversal" | "application_fee" | "application_fee_payout" | "bank_transfer" | "billing_percentage_fee" | "buyer_fee" | "card_spend_authorization" | "card_spend_authorization_void" | "card_spend_refund" | "company_referral" | "cross_border_percentage_fee" | "currency_conversion_incoming" | "currency_conversion_outgoing" | "dispute_alert_fee" | "dispute_hold_adjustment" | "fraud_prevention_fee" | "fx_percentage_fee" | "high_risk_merchant_fee" | "installment_default" | "internal_balance_transfer_incoming" | "internal_balance_transfer_outgoing" | "legacy_crypto_payment" | "legacy_payment" | "legacy_payment_refund" | "license_sale" | "license_sale_commission" | "license_sale_revenue" | "misc_purchase" | "misc_refund" | "misc_reversal" | "onchain_deposit" | "onchain_swap_target" | "onchain_wallet_transfer_incoming" | "onchain_wallet_transfer_outgoing" | "orchestration_percentage_fee" | "passthrough_gmv" | "payment_dispute" | "payment_dispute_adjustment" | "payment_dispute_fee" | "payment_dispute_reversal" | "payment_gross" | "payment_gross_reversal" | "payment_processing_fixed_fee" | "payment_processing_percentage_fee" | "payment_referral" | "payment_referral_reversal" | "payment_refund" | "payment_refund_reversal" | "payment_revshare" | "payment_revshare_payout" | "payment_revshare_refund" | "payment_revshare_reversal" | "payout_fee" | "platform_affiliate_payment" | "platform_affiliate_payment_reversal" | "platform_balance_payment" | "platform_balance_payment_refund" | "platform_balance_transfer_incoming" | "platform_balance_transfer_outgoing" | "platform_covered_dispute" | "promo_reversal" | "referral_bonus" | "resolution_center_refund" | "revshare_percentage_fee" | "sales_tax_fee" | "sales_tax_remittance" | "sales_tax_remittance_reversal" | "software_rental_revshare" | "software_rental_transaction" | "stripe_domestic_processing_fee" | "stripe_international_processing_fee" | "three_ds_fixed_fee" | "topup" | "topup_fee" | "topup_reversal" | "treasury_payin" | "whop_processing_fee" | "withdrawal" | "withdrawal_clawback" | "withdrawal_clawback_reversal" | "withdrawal_reclassification" | "withdrawal_reversal"

amount

Signed amount in the currency’s smallest precision units. Signature: string

currency

Currency for this ledger activity. Signature: { code: string; precision: string; }

posted_at

When the activity posted to the ledger. Signature: string

available_at

ISO 8601 timestamp these funds became (or are scheduled to become) withdrawable: the posted time for already-settled funds, or 00:00:00 UTC on the scheduled release date for pending funds. Present only on inflows entering the balance (payments, top-ups, incoming transfers/affiliate); null on withdrawals, refunds, disputes and on-chain rows. The available_after/before filters window on its UTC settlement date. Signature: string | null

created_at

When the activity record was created. Signature: string | null

resource

Resource associated with this ledger activity. Signature: { object: "account"; id: string; title: string | null; route: string | null; logo_url: string | null; } | { object: "user"; id: string; name: string | null; username: string | null; profile_picture_url: string | null; } | { object: "bounty"; id: string; title: string; status: string; } | { object: "ledger_account"; id: string; owner: { object: "account"; id: string; title: string | null; route: string | null; logo_url: string | null; } | { object: "user"; id: string; name: string | null; username: string | null; profile_picture_url: string | null; } | null; } | { object: "payment_method"; id: string; payment_method_type: string | null; gateway_type: string | null; card: { brand: string | null; last4: string | null; exp_month: number | null; exp_year: number | null; } | null; bank: { bank_name: string | null; account_name: string | null; last4: string | null; account_type: string | null; } | null; email_identifier: string | null; } | { object: "payout_method"; id: string; nickname: string | null; institution_name: string | null; account_reference: string | null; provider: string | null; destination_currency_code: string | null; } | { object: "card_transaction"; id: string; card_id: string | null; merchant_name: string | null; merchant_icon_url: string | null; merchant_category: string | null; status: string | null; usd_amount: string | null; local_amount: string | null; local_currency: string | null; cashback_usd: string | null; authorized_at: string | null; posted_at: string | null; declined_reason: string | null; } | null

source

Source of this ledger activity. Signature: { object: string; id: string; status?: string | null | undefined; reason?: string | null | undefined; claim_url?: string | null | undefined; amount_float?: number | null | undefined; created_at?: string | null | undefined; estimated_arrival?: string | null | undefined; payer_name?: string | null | undefined; payout_token_nickname?: string | null | undefined; tx_hash?: string | null | undefined; sender_address?: string | null | undefined; chain?: string | null | undefined; from_amount?: string | null | undefined; from_currency?: string | null | undefined; to_amount?: string | null | undefined; to_currency?: string | null | undefined; payout_destination?: { payer_name?: string | null | undefined; icon_url?: string | null | undefined; } | null | undefined; [key: string]: unknown; } | null

account

The viewer account that owns this row’s ledger. Present only when the response aggregates owned accounts (include_owned_accounts=true); omitted otherwise. Signature: { object: "account"; id: string; title: string | null; route: string | null; logo_url: string | null; } | { object: "user"; id: string; name: string | null; username: string | null; profile_picture_url: string | null; } | undefined

ledger_account_id

The ledger account (a ldgr_ identifier) this row belongs to. Present only when the response aggregates owned accounts (include_owned_accounts=true); omitted otherwise. Pair it with account to scope drawers and dashboard links to the owning business. Signature: string | null | undefined

Elements

The elements this group mounts — each has its own page:

DepositElement

Funds a Whop account. Renders an amount field and the account’s live funding rails — crypto (a per-network deposit address with its QR) and bank transfer (the wire fields for each settlement currency) — resolved from the account id with no credentials, so it works on any page. Pass savedCards, allowNewCard, or showPlatformBalance to offer rails you settle yourself: the element collects the amount and the choice, then emits cardDepositRequested / addCardRequested / platformBalanceSelected and waits for you to call showStep({ step: 'amount' }) when your own screen is done.

SendElement

Sends money from an account to a recipient — a user, another business, or a public claim link anyone can redeem. Renders its own recipient search resolved from the account id with no credentials beyond the account’s own token. Needs an accessToken scoped to payout:withdraw_funds; business recipient search additionally needs company:authorized_user:read and member:basic:read, and business claim links need airdrop_link:manage — a host without one of those scopes should turn off the matching prop rather than leave a row that will 403.

CardsElement

Lists the account’s active issued cards, most recently issued first. Needs an accessToken. The title and rows are click targets that emit events instead of navigating — a host wires up its own routing and card-detail UI.

WithdrawElement

Collects a withdrawal amount and saved payout method, groups standard and instant delivery choices with live fees and arrival estimates, collects a new payout method when needed, and presents a confirmation screen before emitting the final withdrawal request.

ActivityElement

Lists an account’s ledger activity — every movement of money in or out — with a type and date-range filter the viewer can work with directly. Needs an accessToken. Rows are click targets that emit activitySelected instead of navigating — a host wires up its own routing and detail views. A host driving its own date-range picker (a chart brush selection, say) can call setDateRange to set the filter, and should listen for dateRangeChanged to know when the viewer overrides it directly.

Balances

An account’s money as two faces: the holdings list, and the balance block — the figure, the line it moved along, and the window picker. Mount either or both; the wallet handle’s account reaches both, and each takes its own token (or the viewer’s session same-origin). (sub-controller — 2 elements)