Skip to content

Payouts

Cobalz dispatches each affiliate's commissions to one of five rails: Mercury invoicing (default), PayPal Mass Payments, Stripe Connect, Wise, or manual (you pay out-of-band). Affiliates pick their preferred rail in their portal; merchants control which rails are enabled at Settings → Payouts → Enabled payout rails.

Pick a rail

  • Mercury invoice — affiliate receives a Mercury invoice they pay via ACH / card. No fees for you. US-only affiliates. Default.
  • PayPal Mass Payments — best for international affiliates with PayPal accounts. PayPal's 2% fee applies.
  • Stripe Connect — instant transfers to connected Stripe accounts. Affiliates need a Stripe account in a Stripe-supported country.
  • Wise — cheapest international rail. Affiliate creates a Wise recipient ID; you fund from your Wise balance.
  • Manual — skip dispatch entirely. You pay via wire / check / crypto / hand-delivered cash and mark commissions paid in the dashboard.

Mercury (default)

Mercury is the only rail that requires per-merchant credentials in the Vault. At Settings → Payouts → Mercury connection:

  • Paste your Mercury API key (we store it in Supabase Vault, never logged).
  • Pick a destination account.
  • Optionally register the webhook so we flip payouts to paid the moment money lands (without waiting for the 15-min polling cron).
Note:Sandbox toggle is per-merchant. Mercury sandbox does not deliver webhooks, so flipping to paid in sandbox happens only via the polling cron.

PayPal

Set PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET, and PAYPAL_ENV (sandbox or live) in your Vercel env. Affiliates set their PayPal email at /a/<slug>/payouts/method. PayPal returns the batch in PENDING; we poll every 15 minutes for SUCCESS.

Stripe Connect

Set STRIPE_SECRET_KEY (the same key you use for billing). The affiliate provides their connected Stripe account id (acct_...). Transfers settle synchronously; we mark the payout paid on creation. If Stripe later reverses the transfer (e.g. account restricted), the polling cron flips the payout to failed.

Wise

Set WISE_API_TOKEN, WISE_PROFILE_ID, and WISE_ENV. Affiliates provide a Wise recipient ID + currency. The terminal state we wait for is outgoing_payment_sent.

Schedule

Pick at Settings → Payouts → Schedule:

  • on_demand — only when you click "Run now".
  • daily, weekly_friday, biweekly, monthly_first, monthly_fifteenth — automatic.

The cron runs hourly. It only dispatches if the current hour matches your payouts_run_local_hour (default 02:00, in your merchant timezone).

Hold period + min payout

  • Hold period: new commissions stay pending for this many days before becoming approved. Defaults to 30 (your refund window).
  • Min payout: affiliates under this threshold roll over to the next run. Defaults to $50.
  • Tax-form gate: affiliates without an approved W-9 / W-8BEN don't get paid out until they submit one. Toggle off if you handle this externally.

Refund clawback

On a refund, Cobalz applies a 3-branch decision tree (full / partial / customer-only) and either voids the commission, prorates it, or leaves it alone. The pre-paid commission is clawed back from the next run if the refund came after the payout. Full detail in the refund clawback blog post.