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
paidthe moment money lands (without waiting for the 15-min polling cron).
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
pendingfor this many days before becomingapproved. 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.