Payments and Stripe
BookFlow uses Stripe Connect for payment processing. This is the same system used by Lyft, Shopify, and Substack. Stripe handles your money; BookFlow never touches it.
Why Stripe Connect
- You hold the money in your own Stripe account (not BookFlow's). If BookFlow disappears, your money is safe.
- You get payouts directly from Stripe to your bank account.
- You see the full transaction history in your Stripe dashboard.
- You can refund from BookFlow or from Stripe — same result.
- PCI compliance is handled by Stripe (BookFlow never sees card numbers).
Connect your Stripe account
Go to /dashboard/settings/payments and click "Connect Stripe". You'll be redirected to Stripe's onboarding flow (5 min):
- Email and password (or sign in)
- Business type (sole proprietor, LLC, corp, etc.)
- Business address, tax ID, bank account
- ID verification (driver's license or passport) — required for some countries
Once done, you'll be redirected back to BookFlow. The "Payments" tab now shows "Connected to Stripe".
Accept deposits
Set a deposit requirement per service (in Services). When a customer books, Stripe charges the deposit and holds it in your account. At the appointment, the customer pays the remaining balance directly to you (cash, card, anything).
Payouts
Stripe pays out your deposit balance to your bank account on a rolling basis (default: every 2 days). You can change this in your Stripe dashboard. Standard Stripe processing fee applies: 2.9% + 30¢ per charge (US/Canada). International cards: +1.5%.
Refunds
Two ways to refund a deposit:
- From BookFlow: booking detail page → "Refund deposit". Refund goes back to the original card in 5–10 business days.
- From Stripe: find the charge in your Stripe dashboard, click "Refund". Same outcome.
Reports
The Reports tab (in Settings → Payments) shows:
- Total deposits collected (this month, last month, all time)
- Net after Stripe fees
- Refunds issued
- Average deposit size
- Forecast for next 30 days
For deeper analytics (revenue by staff, by service, by day of week), go to your Stripe dashboard or upgrade to Pro for BookFlow's built-in analytics.
API
/api/payments/businesses/me/stripe/connectStart Stripe Connect onboarding. Returns { accountId, onboardingUrl, mode }.
/api/payments/businesses/me/stripeGet current Stripe connection: { connected, mode (test|live), chargesEnabled, payoutsEnabled, detailsSubmitted? }.
/api/payments/businesses/me/stripeDisconnect Stripe. Clears stripe_account_id. There is no plan-tier check; any tenant can disconnect.
/api/payments/intentCreate a Stripe PaymentIntent for a booking. Body: { bookingId, paymentType?: 'full'|'deposit', customerEmail?, customerName? }. Returns { paymentIntentId, clientSecret, mode }.
/api/payments/confirmRead-after-write check. The webhook is the source of truth. Body: { bookingId }. Returns the booking row.
/api/payments/reportsAggregate payments grouped by status. No date-range query parameters today. Returns rows of { status, c, total }.
/api/payments/:id/refundRefund a payment. Body: { amount?, reason? }. <Code>amount</Code> is in MAJOR units (dollars); omit for a full refund. In test mode the database is updated directly; in live mode a Stripe refund is created.
Common questions
- When do I get paid? Default is 2-day rolling payouts. Configurable in Stripe.
- Can I set the deposit to a percentage? Yes, in service settings. 10–100% allowed.
- Can I charge no-show fees? Yes. Set the no-show fee in Settings → Policies. The fee is charged at the time of the no-show action, not before.
- What if Stripe is down? BookFlow will still let customers book, but the deposit step will show "Payment processing is temporarily unavailable — try again in a few minutes". No booking is created without a successful payment.
- Can I use my existing Stripe account? Yes. Use "Sign in" instead of "Sign up" in the onboarding flow. Your existing customers and saved cards are available immediately.
Email hello@netwit.ca or call +1-604-206-8169. NetWit responds in 1 business day.