Skip to main content

Payments and payouts

Two separate money systems — do not mix them.

1. Commerce (courses, mentorship, coaching SKUs)

PieceBehavior
Checkout/payments — Stripe Checkout and/or Flutterwave by region
Instructor share70% instructor / 30% platform (env: INSTRUCTOR_REVENUE_SHARE, PLATFORM_REVENUE_SHARE)
HoldPAYOUT_HOLD_DAYS (default 7) before eligible
MinimumPAYOUT_MIN_AMOUNT (default 5000 smallest units)
StatusEarnings PENDING until payout batch / admin

Providers

RegionCollectionsPayouts
AfricaFlutterwaveFlutterwave Transfers (bank / MoMo)
EU / Americas / AsiaStripe CheckoutStripe Connect

Instructors complete payout profile at /dashboard/earnings/payout-settings; admin must verify before automated payouts. Admin may Mark as Paid for exceptions (/admin/instructor-earnings).

Refunds reverse related InstructorEarning rows — instructors are not paid on refunded sales.

Canonical terms: monorepo Docs/PAYOUT_TERMS.md.

App routes

RouteRole
Course / mentorship / coaching …/payment pagesBuyer checkout
/dashboard/earningsInstructor ledger
/dashboard/earnings/payout-settingsConnect / MoMo profile
/admin/instructor-earningsOps

APIs

/payments, /payouts, /instructor-earnings, /promo-codes.

2. Employer seats (CMH Talent)

Manual invoices → admin marks paid → search seats / MANUAL_ACTIVE. No Stripe self-serve in MVP.

See Employer billing and Talent.