Admin Balances
The Admin Balances screen gives merchants a consolidated view of every customer's wallet balance, with tools to manually credit or debit accounts, apply bulk adjustments, and export balance data for accounting workflows.
Overview
WalletPro maintains a real-time balance ledger for every customer who holds a wallet. The Admin Balances screen (WooCommerce > WalletPro > Balances) surfaces this ledger in a searchable, filterable table. From this screen you can:
- View every customer's current balance, lifetime funded amount, and lifetime spent amount.
- Credit or debit a single customer's wallet with an optional internal reason note.
- Apply a bulk credit or debit to a filtered set of customers.
- Export the full balance table or a filtered subset to CSV for GL reconciliation.
- Drill into a customer's full transaction ledger from the same screen.
Every manual adjustment made from this screen is written to the tamper-evident HMAC-chained audit ledger, which means all entries are attributable to a specific WordPress user and cannot be modified after the fact.
How It Works
When a customer's wallet is created (either at registration, on first top-up, or when an admin issues the first credit), WalletPro creates a ledger account record linked to that user. Each subsequent credit or debit appends an immutable entry to the ledger. The balance shown in the Admin Balances table is computed as the sum of all settled ledger entries for that account.
Manual adjustments from the Admin Balances screen use atomic database transactions. If any part of a debit or credit fails, for example, a debit that would push a balance below zero when the Allow Negative Balances setting is disabled, the entire operation is rolled back and an admin notice is returned. No partial writes occur.
Admin adjustments bypass spending limits and velocity caps by default. If you need to enforce those controls on admin-issued credits, enable Apply Velocity Caps to Admin Credits under WooCommerce > WalletPro > Settings > Security.
Navigating to Admin Balances
- Log in to WordPress as a user with the
manage_woocommercecapability. - Go to WooCommerce > WalletPro > Balances.
- The balances table loads with all customers who have an active wallet, sorted by balance descending by default.
Balances Table
The table displays the following columns:
| Column | Description |
|---|---|
| Customer | Display name and email, linked to the WordPress user profile. |
| Current Balance | Live balance in the store's configured currency. Multi-currency wallets show each currency on a separate row. |
| Lifetime Funded | Sum of all credits ever applied to this wallet (top-ups, admin credits, cashback, gift credit). |
| Lifetime Spent | Sum of all debits applied via order payments. Does not include manual admin debits unless those debits carry the order_payment transaction type. |
| Last Activity | Timestamp of the most recent ledger entry for this wallet. |
| Actions | Quick links: Adjust (opens single-customer adjustment modal), Ledger (opens full transaction history). |
Searching and Filtering
Use the search box above the table to find a customer by name, email, or user ID. Additional filters appear in the Filter dropdown:
| Filter | Options |
|---|---|
| Balance Range | Min and max values in store currency. |
| Last Activity | Date range picker (from / to). |
| Role | Any registered WordPress role (e.g., Customer, Subscriber, Wholesale Customer). |
| Currency | Visible only when multi-currency wallets are enabled. Filters rows to a specific wallet currency. |
Manual Credit and Debit
Single Customer Adjustment
- In the balances table, click Adjust next to the target customer.
- The adjustment modal opens, showing the customer's current balance.
- Choose the operation type: Credit or Debit.
- Enter the amount. For debits, the field validates that the amount does not exceed the current balance unless Allow Negative Balances is on.
- Select a Reason Code from the dropdown. Reason codes are configurable under WooCommerce > WalletPro > Settings > Reason Codes. Default codes include: Goodwill adjustment, Refund correction, Promotional credit, Data correction, Other.
- Optionally enter a free-text Internal Note (not visible to the customer, stored in the ledger).
- Toggle Notify customer by email to send the customer a balance-change notification email using the template configured in WooCommerce > WalletPro > Settings > Emails > Balance Adjusted.
- Click Apply Adjustment. The modal closes and the table row updates immediately.
Always enter an Internal Note for any adjustment that does not correspond to a WooCommerce order. This note is stored in the ledger and surfaced in the GL-friendly CSV export, making reconciliation significantly easier at month-end.
Bulk Adjustment
- Use the search and filter controls to narrow the table to the customers you want to adjust.
- Check the header checkbox to select all visible rows, or check individual rows.
- In the Bulk Actions dropdown, select Credit selected wallets or Debit selected wallets.
- Click Apply. A confirmation dialog shows the number of affected wallets and the total value of the operation.
- Enter the amount, reason code, and optional note, then confirm.
Bulk adjustments process synchronously for up to 200 customers. For larger sets, WalletPro schedules the adjustments as a background Action Scheduler job and displays a progress notice in the admin. You will receive a summary email when the batch completes.
Bulk debits on large customer sets can have significant financial impact. There is no undo operation, each debit is an immutable ledger entry. Use the export and preview workflow to verify your filter before running a large bulk debit.
Viewing a Customer's Ledger
Click Ledger in the Actions column for any customer to open the single-customer ledger view. This page shows every credit and debit on that wallet in reverse-chronological order.
| Column | Description |
|---|---|
| Date | UTC timestamp of the ledger entry. |
| Type | Transaction type: credit, debit, refund, cashback, expiry, transfer_in, transfer_out, withdrawal. |
| Amount | Signed value in wallet currency. Credits are positive, debits are negative. |
| Running Balance | Balance after this entry was applied. |
| Reference | Linked WooCommerce order ID (if applicable), or the reason code for manual adjustments. |
| Note | Internal note entered at time of adjustment. |
| Actor | WordPress display name of the user who initiated the action (customer for self-service actions, admin user for manual adjustments). |
| HMAC | Truncated chain hash. Click the row to expand the full hash for audit verification. |
The ledger page includes its own CSV export button, which exports only that customer's ledger entries within an optional date range.
Settings Relevant to Admin Balances
The following settings under WooCommerce > WalletPro > Settings directly affect admin balance behavior:
| Setting | Location | Description |
|---|---|---|
| Allow Negative Balances | General | When enabled, admin debits can push a wallet below zero. Disabled by default. |
| Apply Velocity Caps to Admin Credits | Security | When enabled, admin-issued credits count against the customer's velocity cap limits. |
| Reason Codes | Reason Codes | Manage the list of reason codes available in the adjustment modal. Each code can be marked active or inactive. |
| Require Two-Factor for Admin Adjustments | Security | When enabled, admins must complete step-up authentication before any manual adjustment is saved. Requires a compatible 2FA plugin. |
| Balance Adjusted Email Template | Emails | Customise the subject and body of the customer-facing balance adjustment notification. |
| Scheduled Balances Report Email | Reports | Configure a recurring email (daily, weekly, or monthly) that sends a CSV of all current balances to one or more admin email addresses. |
Exporting Balance Data
Instant CSV Export
- Apply any filters or search terms to scope the export.
- Click Export CSV above the table.
- The download begins immediately. Large exports (over 5,000 rows) are queued as a background job and delivered to your admin email when ready.
The exported CSV includes all visible columns plus two additional columns not shown in the table: Wallet Currency and Account Created Date. Column headers match the display names in the table for straightforward import into spreadsheet or accounting tools.
Scheduled Balance Report
To configure recurring balance emails:
- Go to WooCommerce > WalletPro > Settings > Reports.
- Enable Scheduled Balances Report Email.
- Set the Frequency: Daily, Weekly (choose day of week), or Monthly (choose day of month).
- Enter one or more recipient email addresses in Report Recipients, separated by commas.
- Choose whether to include Zero-Balance Wallets in the report.
- Save settings. The first report will send at the next scheduled interval.
Programmatic Access
Admin balance reads and adjustments are available via the REST API and WP-CLI for automated workflows.
REST API
List all balances (requires manage_woocommerce permission):
# GET /wp-json/walletpro/v1/balances
curl -X GET \
"https://example.com/wp-json/walletpro/v1/balances?per_page=50&min_balance=10" \
-H "Authorization: Bearer <token>"
Apply a manual adjustment:
# POST /wp-json/walletpro/v1/wallets/{user_id}/adjust
curl -X POST \
"https://example.com/wp-json/walletpro/v1/wallets/42/adjust" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"type": "credit",
"amount": "15.00",
"currency": "USD",
"reason_code": "goodwill_adjustment",
"note": "Compensating for delayed shipment on order #1234",
"notify_customer": true
}'
Example response:
{
"id": 8821,
"user_id": 42,
"type": "credit",
"amount": "15.00",
"currency": "USD",
"balance_after": "47.50",
"reason_code": "goodwill_adjustment",
"note": "Compensating for delayed shipment on order #1234",
"actor_id": 1,
"created_at": "2026-06-20T14:32:00Z",
"hmac": "a3f9c2..."
}
WP-CLI
# View a customer's current balance
wp wallet balance get --user=42
# Credit a wallet
wp wallet balance credit --user=42 --amount=15.00 --reason="goodwill_adjustment" --note="Order delay"
# Debit a wallet
wp wallet balance debit --user=42 --amount=5.00 --reason="data_correction"
# Export all balances to CSV
wp wallet balances export --format=csv > balances-2026-06-20.csv
# Bulk credit from a CSV file (user_id,amount columns required)
wp wallet balances bulk-credit --file=credits.csv --reason="promotional_credit"
PHP Hook: After Admin Adjustment
Use the walletpro_after_admin_adjustment action to trigger custom logic whenever an admin manually adjusts a balance:
add_action( 'walletpro_after_admin_adjustment', function( $ledger_entry, $user_id, $actor_id ) {
// $ledger_entry is an associative array of the new ledger row.
if ( $ledger_entry['type'] === 'credit' && floatval( $ledger_entry['amount'] ) >= 100 ) {
// Flag large admin credits for secondary review.
my_flag_large_credit( $user_id, $ledger_entry['amount'] );
}
}, 10, 3 );
Audit and Compliance
Every ledger entry, including all manual adjustments, is protected by an HMAC chain. Each entry's hash is computed from its content plus the hash of the previous entry, making it detectable if any historical record is modified or deleted at the database level.
To verify the integrity of the ledger at any time, run:
wp wallet doctor --check=ledger-integrity
This command walks the entire ledger chain and reports any broken links. For a specific customer:
wp wallet doctor --check=ledger-integrity --user=42
Output indicates either PASS (all hashes validate) or lists the specific ledger entry IDs where the chain breaks, along with the user ID and timestamp to assist investigation.