Marketplace money is not a checkout button. It is who holds funds, when they move, what happens on a refund, and whether the platform only gets paid if the host does.
We have shipped products where two sides of a marketplace have to trust the money as much as the UI. That work lives in connected accounts, application fees, and the boring reconciliation that keeps finance from inventing a spreadsheet in self-defense.
Model the deal, then the API
If hosts keep 90% and the platform takes the rest only when a booking completes, the code has to say that. Connected payouts, delayed capture, and transfers are not interchangeable. We start with the business sentence, then pick the Stripe primitives that match it. Getting this backwards is how you end up refunding out of pocket.
Webhooks are part of the product
Payments do not finish in the browser. They finish in events: succeeded, failed, disputed, payout paid. Those events have to be idempotent, logged, and visible in the admin. A “paid” badge that lies is worse than a slow one. We treat webhook consumers like any other critical path: retries, signatures, and an operator view of the last twenty events.
Compliance is not a later milestone
Identity, tax, and “are we a marketplace or a seller” questions show up the first time real money moves. We would rather design the onboarding and the payout cadence with that in the room than retrofit it after the first successful charge.
If your SaaS has to move money between people who do not work at the same company, bring us the deal. We will help you make the software tell the truth about it.
