Recipe: Commissions, settlement, and payouts

The big picture

WooCommerce Product Vendors records a commission per vendor line item on every order. This plugin settles those commissions and moves the money:

order placed ──► (optional hold: charge authorized, not captured)
order completed ──► settle window (settle days) ──► capture + payout

All payout paths converge on one action — mam_wcpv_vendor_commission_payout — which validates, locks, and routes to the configured payout method. The action is fired by:

  • the auto-settle cron (every 10 minutes),
  • the manual settle endpoint (AJAX manually_settle_order, available to vendor staff for their own orders and to store managers),
  • the review/tips flow (after a tip charge succeeds).

Step 1 — Pick the payout method

WP Admin → Mobile App Manager → Product Vendors → Settings → Commission Payout Method (option mam_wc_pv_payout_method):

Value Behavior
Disabled (default, blank) No automatic payouts; commissions stay unpaid in PV
Stripe Connect (stripe_connect) Each vendor’s unpaid commission total is transferred via the mam_stripe_connect_transfer filter — requires mam-stripe-manager and per-vendor Stripe Connect onboarding
PayPal (paypal) Pays through WooCommerce Product Vendors’ PayPal MassPay handler

After a successful transfer the commissions are marked paid in PV and the order gets a _mam_vendor_paid flag so it is never paid twice.

Step 2 — Configure hold and settle (MAM WooCommerce settings)

Two checkout options owned by mam-woocommerce drive settlement timing:

Option Meaning
tsl-setting-checkout_place_hold_on_order = yes Checkout authorizes the card but does not capture. The capture happens at settle time (manual settle, auto-settle, or when the customer leaves a review/tip).
tsl-setting-checkout_settle_order_days Number of days after order completion before the vendor is paid. Leave it empty to disable auto-settle entirely; 0 settles as soon as the cron sees the completed order.

How they interact in the payout guard:

  • Hold on, not forced: the order must be completed, and settle days must have elapsed since completion.
  • Hold off: orders settle from processing, aged by creation date.
  • Forced payouts (manual settle, tips flow, cron after a successful capture) bypass the settle-days wait — the money has been captured at that point.

Step 3 — Verify the cron

The plugin registers two jobs through mam-main’s cron manager (mam_cron_manager):

Cron action Schedule What it does
mam_order_auto_settle every 10 minutes Finds unpaid eligible orders, captures via the mam_wc_settle_order filter (mam-woocommerce), then fires the payout action. Failures are reported in the cron result message.
mam_order_complete_reminder daily, 08:00 Notifies vendor admins of overdue processing orders and of today’s pickups/deliveries (mam_order_complete_reminder and mam-wc-pv_vendor_orders_for_today notification types).

Auto-settle requires mam-woocommerce to be active (the capture goes through its mam_wc_settle_order hook; if no handler is attached the order is skipped and logged).


Safety rails (why double payouts can’t happen)

  • Idempotency flag_mam_vendor_paid order meta short-circuits any later payout call for that order.
  • Per-order payout lock — an option-based lock (mam_wc_pv_payout_lock_<order id>) is taken before transfers run, so a cron run and a manual settle hitting the same order concurrently cannot both transfer; stale locks expire after 10 minutes.
  • Authorization — the manual settle endpoint requires the acting user to be staff of a vendor on the order (or a store manager); see Hooks: `mam_wc_pv_usercan`*.

Earnings visibility

Give vendors the WC PV – Earnings screen (wc_pv_earnings) for their report; its colors and today/this-week blocks are configured on the Settings tab (earnings_report_* options).



Metadata

Field Value
Article type Recipe
Plugin slug mam-woocommerce-product-vendors
Applies to plugin version 26.19.1+
Category Building Your App
Audience Site admin
Last verified 2026-06-10
Contents

    Need Support?

    Can't find the answer you're looking for? Don't worry we're here to help!