Skip to content

Swft Wallet

A store-credit and cashback system for WooCommerce. Customers earn wallet balance through cashback, signup bonuses, and referrals; they spend it at checkout against any order. Includes peer-to-peer transfers and bank withdrawals.

Swft Wallet is free forever — there is no Pro tier.

Every registered customer gets a wallet. Balance comes from:

  • Signup bonus — a one-time credit when a customer registers.
  • Cashback — a percentage of every completed order is added back to the wallet.
  • Referral bonus — both the referrer and referee can get a credit when a referral converts.
  • Manual credit — admins can credit or debit any wallet from the admin panel.
  • Transfers — customers can transfer balance to each other (subject to a configurable fee).
  • Withdrawals — customers can request a bank withdrawal; admin approves and processes manually.

Balance is spent at checkout as a payment method (Swft Wallet) — either covering the whole order or partial against the rest.

  • WordPress 6.0+
  • WooCommerce 8.0+
  • PHP 7.4+
  • Database user with CREATE TABLE privileges (the plugin creates a custom transactions table on activation)
  1. Install the Swft Wallet plugin from your Swft dashboard’s downloads section.
  2. Activate it.
  3. Go to WooCommerce → Swft Wallet → Settings.
SettingWhat it does
Signup bonusOne-time credit when a new customer registers (e.g. £5). 0 disables.
Referral bonusCredit to the referrer when their referee makes their first purchase.
Referee bonusCredit to the referee when they make their first purchase via a referral link.
Cashback ratePercentage of every completed order added back to the customer’s wallet (e.g. 2%). 0 disables.
Cashback expiry (days)How long cashback stays valid before it’s clawed back. 0 = never expires.
Transfer feeFlat fee deducted from the sender’s wallet on each P2P transfer.
Withdrawal minimumMinimum balance a customer must accumulate before they can request a withdrawal.
API keyUsed by Swft Checkout to verify wallet balance during the checkout flow.

Account page — customers see their wallet balance, transaction history, transfer form, and withdrawal request form.

Checkout — when the wallet has a positive balance, Swft Wallet appears as a payment method. Customers can:

  • Apply their full balance and pay the difference with another method.
  • Apply a partial amount of their choice.
  • Pay the full order using only wallet balance.

Earning — cashback is awarded automatically when an order moves to Completed. Referral bonuses are awarded when the referee places their first order.

WooCommerce → Swft Wallet has five tabs:

TabPurpose
CustomersList of all wallets with balances. Search by email; click through to credit/debit.
TransactionsFull ledger of every credit and debit. Filterable by customer and type.
Cashback RulesPer-product or per-category cashback overrides. Override the global rate for specific items (e.g. higher cashback on a clearance category).
WithdrawalsPending and processed withdrawal requests. Approve, mark paid, or reject.
SettingsThe settings table above.

On activation, the plugin creates swft_wallet_transactions — one row per credit or debit, with type, amount, balance-after, and reference (order ID, transfer ID, withdrawal ID).

The plugin registers a WooCommerce payment gateway (swft_wallet) that supports both full and partial payment. Cashback is awarded via woocommerce_order_status_completed. Referral bonuses are awarded via user_register (on a referee using a referral link cookie) and the referee’s first woocommerce_order_status_completed.

Three REST endpoints power the Swft Checkout integration:

  • GET /swft-wallet/v1/balance — current balance for the logged-in user.
  • POST /swft-wallet/v1/debit — deduct from the wallet (called by Swft Checkout on order completion).
  • POST /swft-wallet/v1/credit — add to the wallet (used for refunds and manual credits).

Withdrawals are stored in a swft_wallet_withdrawals table with status (pending / approved / paid / rejected). Processing is manual — there’s no automatic bank-rail integration.

  • Cashback only fires on Completed. Orders stuck in Processing won’t award cashback until they move forward.
  • Withdrawal processing is manual. The admin must approve each request and arrange the bank transfer separately. The plugin doesn’t connect to a payment rail.
  • Cashback expiry is hard. When the configured days elapse, expired cashback is clawed back from the wallet. If the customer has spent it, this can leave them negative — set a sensible expiry or 0.
  • Transfer fee is deducted from the sender. The receiver gets the full amount.
  • Wallet balance is real money on your books. Reconcile carefully with your accounting; outstanding wallet balance is a liability.