Wallet SystemWallet System
Buy Now
View Demo
  • Getting Started

    • Introduction
    • Quick Start
    • Features
    • Installation
    • First-Time Setup
    • Admin Tour
  • Wallet Core

    • Core Wallet
    • Wallet Payment Gateway
    • Recharge / Top-up
    • Wallet Transfer
    • My Wallet Page
    • Shortcodes
  • Earn & Reward

    • Cashback Engine
    • Referral Program
    • Multilevel Referral
    • Daily Login Reward
    • Invite Friends
    • Deposit / Top-up Bonus
  • Spend & Payout

    • Checkout Discount
    • Checkout Restriction
    • Withdrawal
    • PayPal Payout
    • Stripe Payout
    • Refund to Wallet
    • Buy Now Pay Later
  • Identity & Mobile

    • KYC
    • QR Code Payments
  • Wallet Central

    • Overview
    • Endpoint & Routing
    • CTA Discovery
    • Home Dashboard
    • Add Funds
    • Withdraw
    • Withdrawals List
    • Send Money
    • QR Pay
    • Payment Requests
    • Refer & Earn
    • Transactions
    • Settings
    • KYC Flow
    • Architecture
    • Tweaks & Responsive
    • Security
    • Admin Controls
  • Admin Tools

    • Admin Settings (index)
    • Bulk Credit / Debit
    • Analytics Dashboard
  • Settings Tabs

    • General
    • Recharge
    • Checkout
    • Withdrawal
    • Payout (PayPal/Stripe)
    • KYC
    • Cashback
    • Referral
    • Multilevel
    • BNPL
    • QR Pay
    • Notifications
    • Wallet Central
    • Integrations
    • API Keys
  • Notifications

    • Email Notifications
    • SMS Notifications
  • Developer

    • REST API
    • Filters & Hooks
  • Help

    • Troubleshooting
    • FAQ
    • Glossary
Support
Buy Now
View Demo
  • Getting Started

    • Introduction
    • Quick Start
    • Features
    • Installation
    • First-Time Setup
    • Admin Tour
  • Wallet Core

    • Core Wallet
    • Wallet Payment Gateway
    • Recharge / Top-up
    • Wallet Transfer
    • My Wallet Page
    • Shortcodes
  • Earn & Reward

    • Cashback Engine
    • Referral Program
    • Multilevel Referral
    • Daily Login Reward
    • Invite Friends
    • Deposit / Top-up Bonus
  • Spend & Payout

    • Checkout Discount
    • Checkout Restriction
    • Withdrawal
    • PayPal Payout
    • Stripe Payout
    • Refund to Wallet
    • Buy Now Pay Later
  • Identity & Mobile

    • KYC
    • QR Code Payments
  • Wallet Central

    • Overview
    • Endpoint & Routing
    • CTA Discovery
    • Home Dashboard
    • Add Funds
    • Withdraw
    • Withdrawals List
    • Send Money
    • QR Pay
    • Payment Requests
    • Refer & Earn
    • Transactions
    • Settings
    • KYC Flow
    • Architecture
    • Tweaks & Responsive
    • Security
    • Admin Controls
  • Admin Tools

    • Admin Settings (index)
    • Bulk Credit / Debit
    • Analytics Dashboard
  • Settings Tabs

    • General
    • Recharge
    • Checkout
    • Withdrawal
    • Payout (PayPal/Stripe)
    • KYC
    • Cashback
    • Referral
    • Multilevel
    • BNPL
    • QR Pay
    • Notifications
    • Wallet Central
    • Integrations
    • API Keys
  • Notifications

    • Email Notifications
    • SMS Notifications
  • Developer

    • REST API
    • Filters & Hooks
  • Help

    • Troubleshooting
    • FAQ
    • Glossary
Support
  • Getting Started

    • Introduction
    • Quick Start — Wallet Live in 5 Minutes
    • Features
    • Installation
    • First-Time Setup
    • Admin Tour
  • Wallet Core

    • Core Wallet
    • Wallet Payment Gateway
    • Recharge / Top-up
    • Wallet Transfer
    • My Wallet Page
    • Shortcodes
  • Earn & Reward

    • Cashback Engine
    • Referral Program
    • Multilevel Referral
    • Daily Login Reward
    • Invite Friends
    • Deposit / Top-up Bonus
  • Spend & Payout

    • Checkout Discount
    • Checkout Restriction
    • Withdrawal
    • PayPal Payout
    • Stripe Payout
    • Refund to Wallet
    • Buy Now Pay Later (BNPL)
  • Identity & Mobile

    • KYC (Know Your Customer)
    • QR Code Payments
  • Wallet Central

    • Wallet Central Overview
    • Endpoint & Routing
    • CTA Discovery
    • Home Dashboard
    • Add Funds
    • Withdraw
    • Withdrawals List + Detail
    • Send Money
    • QR Pay
    • Payment Requests
    • Refer & Earn
    • Transactions
    • Settings (customer)
    • KYC Flow
    • Architecture
    • Tweaks & Responsive
    • Security
    • Admin Controls
  • Admin Tools

    • Admin Settings
    • Bulk Credit / Debit
    • Analytics Dashboard
  • Settings Tabs

    • General Settings
    • Recharge Settings
    • Checkout Settings
    • Withdrawal Settings
    • Payout Settings (PayPal + Stripe)
    • KYC Settings
    • Cashback Settings
    • Referral Settings
    • Multilevel Settings
    • BNPL Settings
    • QR Pay Settings
    • Notifications Settings
    • Wallet Central Settings
    • Third-Party Integrations
    • API Keys
  • Notifications

    • Email Notifications
    • SMS Notifications
  • Developer

    • REST API
    • Filters & Hooks
  • Help

    • Troubleshooting
    • FAQ
    • Glossary

Withdrawal

Customer-initiated cash-out. Admin approves. Plugin routes the payout via bank transfer (manual), PayPal, or Stripe.

Setting up?

Skip to Withdrawal Settings for the step-by-step admin tab walkthrough (min/max, fee, hold, methods). Payout credentials live under Payout Settings.

What It Does

ForMeans
CustomerRequest to withdraw any amount within your limits. Track status in their account
AdminReview queue → approve or reject. Approved goes via PayPal / Stripe API or bank (manual). Audit trail per request

How Customers See It

  1. My Account → Withdrawal (or Wallet Central → Withdraw)
  2. Pick a method (Bank / PayPal / Stripe — only what you've enabled)
  3. Type amount + method details (account number, PayPal email, etc.)
  4. Submit → status pending, balance held by the system
  5. Track on the Withdrawal Requests list

Balance held on submit

The plugin debits the customer's wallet at request time, not at admin approval. Avoids the customer spending the same money twice while a request is pending. If the admin rejects, balance is fully refunded.

Withdrawal page — full layout at /my-account/wkwc_withdrawal/

Setup

Wallet → Settings → Withdrawal

Withdrawal Fees & Policy admin section — enable, min/max, fee, hold period

SettingDefaultWhat it does
EnableOFFglobal toggle
Min request100smallest withdrawal allowed
Max per requestemptylargest single withdrawal
Max per monthemptyper-customer monthly cap
Fee typenonenone / fixed / percent
Fee amount0value when fee is fixed/percent
Hold enableOFFadds a fraud window between approve and payout
Hold days7length of hold
Methodsnonetick which payouts your store supports — bank / PayPal / Stripe

For PayPal / Stripe credentials see PayPal Payout and Stripe Payout.

Withdrawal request form — amount input, method picker, preset chips, submit

Admin Review

Wallet → Withdrawals lists all rows.

Pending rows have Approve / Reject action buttons.

Approve opens a side drawer:

  1. Confirm method + amount (after fee deduction)
  2. Click Approve
  3. PayPal / Stripe payouts trigger the API call automatically
  4. Bank transfers — admin marks paid after off-platform transfer
  5. Status flows pending → approved → paid
  6. Customer gets email notifications at each step

Reject flow:

  1. Admin enters required note (shown to customer)
  2. Wallet credited back full amount (no fee on rejected)
  3. Status flips to rejected
  4. Customer gets rejection email

Withdrawals queue — pending requests with Approve / Reject actions in admin

KYC Gating (recommended)

Most stores require KYC before allowing withdrawals — protects against money-laundering vectors.

Wallet → Settings → KYC → Required features → ✓ Withdrawal

Customers without approved KYC don't see the withdrawal form at all. See KYC.

Hold Period

Optional "fraud window" between admin-approval and actual payout. Useful when reviewing patterns retrospectively.

When hold is on:

  • Approved request displays "Will be paid by <date>"
  • Payout API call is deferred until the eligible time
  • Background cron fires payouts hourly for matured requests

Lets you claw back questionable approvals during the window.

Withdrawal summary side panel — available balance, fee, net, hold note

Fee

Configurable as fixed or percent. Customer receives withdrawal_amount - fee.

TypeExample
Fixed2.50 per request
Percent2.5% of amount

Fee row is logged separately for accounting.

Status States

pending → approved → paid
       → rejected (balance refunded)
StatusMeaning
pendingsubmitted, awaiting admin
approvedadmin OK, payout queued (or in hold)
paidpayout API succeeded OR admin marked paid (bank)
rejectedadmin declined, balance refunded
failedpayout API errored, admin can retry

CSV Export

Wallet → Withdrawals → Export CSV dumps all rows matching active filters. Columns include id, customer, gross, fee, net, method, status, dates.

Common Scenarios

Customer asks "where's my money?"

Open the row in admin → side drawer shows:

  • Status timeline (submitted → approved → paid)
  • Last payout API response (if PayPal / Stripe)
  • Admin note from approval / rejection

If status = paid, share the PayPal batch ID or Stripe transfer ID with the customer for their bank to trace.

Withdrawal stuck on failed

API failures show in the row's error column (PayPal "RECEIVER_UNREGISTERED", Stripe "balance_insufficient", etc.). Common causes:

  • Customer's PayPal email not registered (PayPal)
  • Insufficient balance in your platform Stripe account
  • Connected account not finished onboarding (Stripe)

Reject the row → refund customer → ask them to fix the cause → submit again.

Disable withdrawals temporarily

Toggle "Enable" → OFF. Customer-side form replaced with "Withdrawals are currently disabled."

When Something Goes Wrong

ProblemFix
Request form not visible to customerFeature enabled? Method enabled? KYC gate satisfied?
Approve button does nothingPayout creds missing — check PayPal / Stripe settings
Customer says balance disappearedWithdrawal debit happens at request time. Reject the row to refund
Hold period not respectedPayout cron not firing — check WP cron config
Customer over month limit too earlyCheck _wkwp_withdrawal_month_total_<YYYY-MM> user meta — auto-resets at month boundary
For developers — hooks + storage

Hooks

HookTypeWhen
wkwc_wallet_withdrawal_requestedactionrow written
wkwc_wallet_withdrawal_approvedactionstatus flips to approved
wkwc_wallet_withdrawal_paidactionpayout API succeeded
wkwc_wallet_withdrawal_rejectedactionstatus flips to rejected, balance refunded
wkwc_wallet_withdrawal_failedactionpayout API errored
wkwp_wallet_withdrawal_feefiltermutate fee per request
wkwp_wallet_withdrawal_eligiblefiltergate request submission

Server-side enforcement

WKWP_Wallet_Withdrawal_KYC_Guard intercepts POST at wp_loaded priority 5 — rejects manual POSTs bypassing the UI.

Reporting

MetricSource
Total paid out (30d)sum amount where status = paid
Pending volumesum amount where status = pending
Fees collectedsum fee where status = paid
Rejection ratecount rejected / count approved+rejected

Charts via the Analytics endpoint. See Analytics.

Related

  • PayPal Payout
  • Stripe Payout
  • KYC
  • Email Notifications
  • Wallet Central → Withdraw
Prev
Checkout Restriction
Next
PayPal Payout