Wallet Withdrawal Requests¶
Purpose¶
Review and process customer requests to withdraw funds from their wallets via offline payment methods. Approve legitimate withdrawals, transfer funds to customers, and reject invalid requests with proper fund refunds.
Accessing Wallet Withdrawal Requests¶
Navigate to: Delivery & Payments > Wallet Withdrawal Requests from the sidebar
List View¶

The list displays all customer withdrawal requests with payment details and current status.
Table Columns¶
Request ID¶
- Format: Number with # prefix
- Purpose: Unique identifier for this withdrawal request
- Sortable: Yes (default: newest first)
User¶
- Format: Text (customer name)
- Purpose: Customer who submitted the withdrawal request
- Clickable: Links to customer profile
Amount¶
- Format: Money value in wallet currency
- Purpose: Amount customer wants to withdraw
- Note: This amount was immediately deducted from wallet upon request submission
Payment Method¶
- Format: Badge
- Purpose: Offline payment method for withdrawal (bank transfer, check, etc.)
- Display: Shows payment method name
Status¶
- Format: Colored badge
- Purpose: Current request status
- Values:
- Pending (Yellow): Awaiting admin review, funds deducted from wallet
- Approved (Green): Verified and transfer initiated
- Rejected (Red**: Declined and funds refunded to wallet
Submitted Date¶
- Format: Timestamp
- Purpose: When customer submitted the withdrawal request
Reviewed By¶
- Format: Text (admin name) - hidden by default
- Purpose: Admin who processed this request
- Visible: Only after approval/rejection
Reviewed At¶
- Format: Timestamp - hidden by default
- Purpose: When request was processed
Row Actions¶
- View: See complete request details and customer notes
- Approve: Confirm withdrawal and complete transfer (pending requests only)
- Reject: Decline withdrawal and refund to wallet (pending requests only)
Bulk Actions¶
- Export: Export requests data to Excel/CSV
Viewing a Withdrawal Request¶

Click View to see complete request details:
Request Information¶
- Request ID and status
- Customer name and email
- Current wallet balance (after deduction)
- Withdrawal amount (already deducted)
- Payment method selected
- Customer notes (bank details, addresses, special instructions)
- Submission timestamp
Customer Notes¶
Customer-provided information typically includes:
- For Bank Transfer: Account number, IBAN, bank name, account holder name
- For Check: Mailing address, recipient name
- For Cash Pickup: Preferred location, ID details
- For Western Union: Receiver name, location, phone number
Wallet Transaction Reference¶
- Link to debit transaction in wallet history
- Shows funds were deducted upon request submission
- Transaction reference: "Withdrawal request #[ID] pending approval"
Review Information (if processed)¶
- Reviewing admin name
- Review timestamp
- Rejection reason (if rejected)
- Transaction reference (if approved)
Understanding Withdrawal Flow¶
Key Concept: Immediate Deduction¶
Unlike deposits, withdrawal funds are deducted immediately when customer submits request:
- Customer submits withdrawal request
- System checks if sufficient balance exists
- Funds immediately deducted from wallet
- Funds held pending admin approval
- Two possible outcomes:
- ✅ Approved: Transfer completed, funds already deducted
- ❌ Rejected: Funds refunded back to wallet
Why Immediate Deduction?
- Prevents customers from using same funds multiple times
- Reserves funds for the withdrawal
- Protects against insufficient balance at approval time
- Clear audit trail of pending withdrawals
Example Scenario¶
Initial wallet balance: $1,000
Customer submits withdrawal: $300
→ Wallet balance immediately: $700
→ Request status: Pending
→ Wallet transaction: Debit $300 (reference: withdrawal_request_pending)
Admin Approves:
→ Request status: Approved
→ Wallet balance: $700 (no change, already deducted)
→ Admin processes bank transfer to customer
→ No additional wallet transaction needed
OR
Admin Rejects:
→ Request status: Rejected
→ Wallet balance: $1,000 (refunded)
→ Wallet transaction: Credit $300 (reference: withdrawal_request_refund)
Processing Withdrawal Requests¶
Approving a Withdrawal¶

Click Approve on a pending request after verifying customer details and processing transfer.
Approval Process:
- Review Request Details:
- Verify customer identity
- Check provided payment information (account details, address)
- Confirm withdrawal amount
-
Review customer notes for special instructions
-
Process External Transfer:
- Bank Transfer: Send transfer to provided account
- Check: Mail check to provided address
- Cash Pickup: Prepare cash at specified location
-
Western Union: Initiate transfer and obtain MTCN
-
Click Approve Button: Confirms withdrawal completed
-
Automatic Actions:
- Request status changed to "Approved"
- Reviewed by and reviewed at fields set
- Customer notified that withdrawal is being processed
-
No wallet change (funds already deducted)
-
Post-Approval Tasks:
- Provide customer with tracking details (MTCN, tracking number, check number)
- Update customer via email/SMS if needed
- Keep proof of transfer for records
Important Notes:
- ✅ Complete external transfer BEFORE clicking approve
- ✅ Funds were already deducted when request was submitted
- ✅ Approval confirms you've initiated the external transfer
- ⚠️ Cannot undo approval (contact customer for refund/correction)
Rejecting a Withdrawal¶

Click Reject on a pending request if withdrawal cannot be processed.
Rejection Form:
Rejection Reason Required¶
- Type: Textarea
- Purpose: Explain why withdrawal was rejected
- Customer Visibility: Customer receives this message
- Required: Must provide clear explanation
Common Rejection Reasons:
- "Invalid bank account details provided. Please resubmit with correct account number and IBAN."
- "Account holder name does not match your registered name. For security reasons, we can only transfer to accounts in your name."
- "Mailing address incomplete. Please provide full address including postal code."
- "Insufficient identification provided. Please contact support to verify your identity before withdrawing."
- "Withdrawal amount exceeds daily limit. Please submit smaller amounts or wait 24 hours."
- "Payment method temporarily unavailable. Please try alternative withdrawal method."
- "Duplicate request detected. Please wait for request #[ID] to be processed."
Rejection Process:
- Enter Rejection Reason: Provide clear, helpful explanation
- Click Reject: Confirms rejection
- Automatic Actions:
- Request status changed to "Rejected"
- Funds refunded back to wallet immediately
- Refund transaction created:
- Type: Credit
- Description: "Withdrawal request #[ID] rejected - refund"
- Reference: withdrawal_request_refund
- Customer notified with rejection reason
-
Reviewed by and reviewed at fields set
-
Result:
- Customer wallet balance restored to pre-request amount
- Customer can submit new request with corrections
- Original request remains in system for audit
Important: Always refund promptly - customer cannot use funds while request is pending.
Withdrawal Request Workflow¶
Customer Side¶
- Customer navigates to Wallet > Withdrawal page
- Checks current balance and available withdrawal amount
- Selects payment method from available offline methods
- Enters withdrawal amount
- Provides details in notes:
- Bank account information
- Mailing address
- Pickup location
- Any special instructions
- Submits request
- Funds immediately deducted from wallet
- Awaits admin approval - cannot use withdrawn funds
Admin Side¶
- Receives notification of new withdrawal request
- Reviews request in Withdrawal Requests list
- Opens request to view details and customer notes
- Verifies customer information:
- Identity confirmation
- Account/address validity
- Compliance with withdrawal policies
- Decision Path A - Approve:
- Process external transfer (bank, check, cash, etc.)
- Obtain confirmation/tracking number
- Click Approve in system
- Provide tracking details to customer (optional)
- Decision Path B - Reject:
- Identify issue with request
- Click Reject
- Enter detailed rejection reason
- System refunds funds to wallet automatically
- Customer notified of decision
System Processing¶
On Request Submission:
1. Check wallet balance >= withdrawal amount
2. Deduct amount from wallet:
- Create debit transaction
- Description: "Withdrawal request #[ID] pending approval"
- Reference: withdrawal_request_pending
- Reference ID: [Request ID]
3. Create withdrawal request:
- Status: Pending
- Amount: [Requested amount]
4. Notify admins of new request
On Approval:
1. Update request:
- Status: Approved
- Reviewed by: [Admin]
- Reviewed at: [Timestamp]
2. Send notification to customer:
- "Your withdrawal is being processed"
- "Payment will be transferred shortly"
3. No wallet changes (already deducted)
On Rejection:
1. Refund to wallet:
- Create credit transaction
- Description: "Withdrawal request #[ID] rejected - refund"
- Reference: withdrawal_request_refund
- Reference ID: [Request ID]
- Amount: [Original withdrawal amount]
2. Update request:
- Status: Rejected
- Rejection reason: [Admin message]
- Reviewed by: [Admin]
- Reviewed at: [Timestamp]
3. Send notification to customer:
- "Your withdrawal request has been rejected"
- [Rejection reason]
- "The funds have been refunded to your wallet"
Withdrawal Policies and Limits¶
Configurable Limits¶
Set in System Settings:
- Minimum Withdrawal Amount: Prevent very small withdrawals
- Maximum Withdrawal Amount: Limit large single withdrawals
- Daily/Weekly Limits: (if implemented) Control withdrawal frequency
Security Measures¶
Identity Verification:
- Verify account holder name matches registered name
- Request additional ID for large amounts
- Confirm contact information is current
Fraud Prevention:
- Watch for suspicious patterns (rapid multiple requests)
- Verify recently registered accounts carefully
- Be cautious with unusual payment destinations
- Confirm customer is reachable before large transfers
Compliance:
- Follow local regulations for money transfer
- Maintain records for tax/audit purposes
- Report suspicious activity per local laws
Withdrawal Request Filters¶
Use filters to find specific requests:
Status Filter¶
- All: Show all requests
- Pending: Awaiting processing (priority queue)
- Approved: Completed withdrawals
- Rejected: Declined requests with refunds
Payment Method Filter¶
- Filter by withdrawal method
- Useful for batch processing same transfer type
Date Range Filter¶
- Filter by submission date
- Find requests from specific period
User Search¶
- Search by customer name or email
- Find all withdrawal requests from specific customer
Amount Range¶
- Filter by withdrawal amount
- Find large withdrawals for extra verification
Best Practices¶
Process Promptly¶
Why Speed Matters:
- Funds locked during pending state
- Customer cannot use withdrawn amount
- Delays impact customer trust
- Faster processing = better experience
Recommended Timing:
- Review new requests within 24 hours
- Process small amounts (<$100) same day
- Large amounts may require additional verification time
- Communicate expected processing time to customers
Verify Thoroughly¶
For Bank Transfers:
- ✅ Correct account number format
- ✅ Valid IBAN/routing number
- ✅ Bank name is real
- ✅ Account holder name matches customer
For Mailed Checks:
- ✅ Complete address with postal code
- ✅ Recipient name correct
- ✅ Address is deliverable
For Cash Pickup:
- ✅ Valid ID provided
- ✅ Pickup location specified
- ✅ Contact number reachable
For Western Union/MoneyGram:
- ✅ Receiver name exact
- ✅ Location country correct
- ✅ Phone number valid
Communicate Clearly¶
For Approvals:
- Send confirmation with timeline
- Provide tracking information when available
- Set expectations for fund arrival
- Offer support contact for issues
For Rejections:
- Explain specific issue clearly
- Provide guidance on correction
- Mention funds are refunded
- Encourage resubmission after fixing issue
Example Good Approval Message:
Your withdrawal request #1234 has been approved.
Bank transfer of $500 has been initiated to:
Account: ****1234
Bank: ABC Bank
Expected arrival: 1-2 business days
You will receive a notification once the transfer completes.
Example Good Rejection Message:
Your withdrawal request #1234 has been rejected for
the following reason:
The bank account number you provided (1234567) is invalid.
Account numbers for ABC Bank must be 10 digits.
Your funds ($500) have been refunded to your wallet
and are available for immediate use.
Please submit a new withdrawal request with the correct
account number. If you need assistance, contact our
support team.
Handle Edge Cases¶
Insufficient Details:
- Reject with specific information needed
- Don't assume or guess details
- Better to reject and request clarification
Changed Customer Mind:
- If customer requests cancellation before approval, reject
- Use rejection reason: "Withdrawal canceled at customer request"
- Funds refund automatically
External Transfer Failed:
- If bank rejects transfer after approval, contact customer
- May need to create manual wallet credit adjustment
- Document in notes
Duplicate Requests:
- Check if multiple requests for same purpose
- Approve first, reject subsequent with reference to approved request
Troubleshooting¶
Cannot Approve Request¶
Possible Reasons:
- Request already processed
- User account disabled
- Withdrawal feature disabled in settings
- Insufficient admin permissions
Solution: Check request status and user account status
Refund Not Working on Rejection¶
System Design: Refund is automatic upon rejection
If Issue Persists:
- Check wallet transaction history
- Verify no system errors
- Contact technical support
- Manual credit may be needed
Customer Complains About Deduction¶
Explanation:
- Funds deducted immediately upon request submission
- This is normal and prevents double-spending
- Refunded automatically if request rejected
- Transferred externally if approved
Show Customer:
- Withdrawal request status
- Wallet transaction with pending reference
- Expected processing time
Bank Transfer Failed¶
After Approval:
- Already marked as approved in system
- Need to handle externally
Steps:
- Contact customer to verify details
- Retry transfer with correct information
- If cannot complete:
- Create manual wallet credit adjustment
- Document reason in wallet transaction description
- Notify customer of resolution
Currency Selection (Multi-Currency Wallets)¶
![Withdrawal Request Currency Selection]
When multi-currency wallets are enabled, customers can choose which currency wallet to withdraw funds from.
How Currency Selection Works¶
When Multi-Currency is Enabled:
- Customer sees currency dropdown during withdrawal request creation
- Can select any wallet they have with available balance
- Funds will be withdrawn from the selected currency wallet
- Each currency has separate balance and transactions
When Multi-Currency is Disabled (default):
- No currency selection available
- All withdrawals come from base currency wallet
- Simpler flow for single-currency stores
Admin View of Currency-Specific Withdrawals¶
In the withdrawal requests list:
- Currency Column: Shows which currency customer selected
- Amount Column: Shows amount in the selected currency
- Wallet Deduction: Funds deducted from customer's wallet in the selected currency
Example:
- Customer selects EUR wallet
- Withdraws €100 via bank transfer
- Funds immediately deducted from EUR wallet
- Admin processes and approves request
- Customer receives €100 via bank transfer
- (USD wallet balance unchanged)
Configuration¶
To enable currency selection:
- Navigate to System Settings → Advanced Tab
- Enable "Enable Multi-Currency Wallets"
- Save changes
See Multi-Currency Wallets for detailed configuration.
Request Limits¶

Administrators can limit how many pending withdrawal requests each customer can have simultaneously.
Maximum Pending Withdrawal Requests¶
Purpose: Prevent abuse and manage processing workload
Configuration:
- Navigate to System Settings → Advanced Tab → Wallet Settings
- Set "Max Pending Withdrawal Requests" (default: 1)
- Save changes
How It Works:
- System counts customer's pending withdrawal requests
- If limit reached, customer cannot submit new withdrawal request
- Customer must wait for admin to approve/reject existing request
- Approved and rejected requests don't count toward limit (only pending)
Example Scenarios:
Limit = 1 (default):
- Customer submits withdrawal request #201 → Status: Pending
- Customer tries to submit another withdrawal → Blocked: "You already have 1 pending withdrawal request. Please wait for processing."
- Admin approves or rejects request #201
- Customer can now submit new withdrawal request
Limit = 3:
- Customer can have up to 3 pending withdrawals at once
- Useful for high-volume businesses or multi-currency scenarios
- Customer with USD, EUR, and SAR wallets can withdraw from each simultaneously
Benefits of Request Limits¶
- Prevents Abuse: Stops fraudulent multiple withdrawal attempts
- Controls Cash Flow: Manageable outflow of funds
- Admin Efficiency: Reasonable queue of requests to process
- Fraud Prevention: Limits suspicious withdrawal patterns
- Balance Protection: Ensures customer has sufficient funds before additional requests
Customer Experience¶
When customer reaches limit:
- Withdrawal Button Disabled: Can't create new request
- Clear Message: "You have reached the maximum number of pending withdrawal requests (1). Please wait for your current request to be processed."
- Funds Locked: Withdrawn amounts remain deducted until processing completes
- After Processing: Can submit new request once admin approves/rejects
Important: Rejected requests automatically refund funds, but approved requests don't (funds already deducted and transferred externally).
Adjusting Limits¶
Lower Limit (1 request):
- Strictest control
- Maximum fraud prevention
- Recommended for most stores
- Simple for customers to understand
Higher Limit (2-3 requests):
- More flexibility for customers
- Useful for multi-currency wallets
- Business/corporate customers
- High-trust customer base
Configuration: See System Settings - Max Pending Withdrawal Requests
Key Information¶
- Immediate Deduction: Funds removed from wallet when request submitted, not when approved
- Refund on Rejection: Rejected requests automatically refund funds to wallet
- No Wallet Change on Approval: Funds already deducted, approval confirms external transfer
- Admin Responsibility: Complete external transfer before clicking approve
- Cannot Undo: Approved requests cannot be reversed in system
- Audit Trail: All requests and refunds tracked in wallet transactions
- Customer Blocked: Customer cannot use withdrawn funds while request pending
- Security First: Always verify customer identity and details before approval
Related Configuration¶
Configure withdrawal features in System Settings:
- Enable Wallet Withdrawals - Turn withdrawal feature on/off
- Minimum Withdrawal Amount - Set minimum allowed
- Maximum Withdrawal Amount - Set maximum allowed
- Wallet Visibility - Show/hide wallet from customers
Related Sections¶
- Offline Payment Methods - Configure available withdrawal methods
- User Wallets - View customer wallet balances
- Wallet Transactions - See all wallet activity including withdrawal debits/refunds
- Wallet Deposit Requests - Process deposit requests