Guide · 9-minute read
Stripe Connect for invoice payments — funds in your account, no middleman.
Many billing tools 'process payments for you' — funds land with the tool, transfer to you a few days later. Stripe Connect direct charges flip that: funds settle directly to your Stripe account at the moment of payment. This guide walks through the mechanism, the fees, and what to watch for in setup.
Last updated May 27, 2026
Three flavors of Stripe Connect
Stripe Connect supports three account types: Standard, Express, and Custom. The three differ in who owns the Stripe account and who's responsible for dashboard/disputes/reporting.
Standard: you own a full Stripe account; the billing tool charges on your behalf via the Connect API. You handle disputes in your own Stripe dashboard. Best when you want full Stripe access (you can keep using your account for non-Hoursmith charges).
Express: a slimmed-down Stripe dashboard branded by the billing tool. Stripe handles compliance; the platform handles most dashboarding. Best when you don't already have a Stripe account and want minimum setup.
Custom: the platform fully owns the experience; merchants don't see a Stripe dashboard at all. Best for marketplace-style platforms where the merchant relationship is heavily mediated.
Hoursmith uses Standard. Your Stripe account is yours; we charge on your behalf using a Connect token.
Direct charges vs destination charges
Two ways to route money under Connect: direct charges and destination charges. The differences come down to who 'owns' the charge in Stripe and who pays the fees.
Direct charges: the charge is created on the connected account (yours). The funds belong to that account from the moment of the charge. The connected account pays Stripe's processing fee. The platform can take an optional application fee (Hoursmith doesn't).
Destination charges: the charge is created on the platform's account, with funds 'transferred' to the connected account. The platform pays the processing fee and bears chargeback liability.
Hoursmith uses direct charges. Funds settle to your account; you pay Stripe's standard fee (2.9% + $0.30 in the US at time of writing — check Stripe's current rates); Hoursmith adds nothing on top.
What actually happens when a client pays
Client clicks Pay on the invoice's public page. Stripe Checkout opens, branded with your business name. They enter card details on Stripe's hosted form — your billing tool never sees the card number. Stripe authorizes the card. A PaymentIntent succeeds. Stripe fires a webhook to the billing tool.
The webhook handler in the billing tool verifies the signature (using its own Connect webhook secret), looks up the invoice by metadata, and flips the invoice to Paid. The funds are already in your Stripe account — the webhook is just the system-of-record update.
Stripe pays out to your bank on your account's payout schedule (typically daily after a 2-day delay for new accounts, immediate for established ones).
The reconciliation problem and how it's handled
Webhooks fail. They get dropped, retried, timed out. If the billing tool only updates the invoice from the webhook, a dropped webhook means the invoice stays 'Sent' forever even though the client paid.
The fix is a nightly reconciliation cron: pull every Stripe event from the last 48 hours, replay them through the same handler, idempotent by event id. Dropped webhooks get caught up overnight; already-processed events are no-ops. Hoursmith ships this; check whether your tool does too.
Partial payments and refunds
Multi-part payments: client wants to pay half now, half on the 15th. The billing tool should record each part separately and only flip the invoice to Paid when the cumulative paid amount covers the total.
Refunds: refund from Stripe (or the billing tool, which routes to Stripe). The webhook fires; the billing tool reverses its ledger entry. Single accounting path means refunds and forward payments don't drift.
Overpayments: cap to the remaining balance — don't let a client double-pay an invoice and have the system 'owe' them money.
What to watch for in setup
Two configuration items matter for safety. First: webhook signing secret. Connect uses a separate signing secret from your platform webhook; route to '/api/payments/webhook' (or whatever the tool uses) with that specific secret. A signature mismatch should reject the event hard.
Second: org resolution from event.account, never from event.metadata. A malicious actor who can write to invoice metadata could spoof an org id; the only safe source of which org an event belongs to is event.account (the connected account stripeId). Hoursmith enforces this and ships an integration test guarding it; verify the same in any tool you evaluate.
How Hoursmith does it
How Hoursmith does it
Hoursmith uses Stripe Connect Standard with direct charges. Connect your Stripe account once via Settings → Payments; every invoice gets a Pay button thereafter. Funds settle to your account on Stripe's payout schedule; Hoursmith never holds or routes them. Stripe processing fees apply; Hoursmith doesn't add an application fee.
The webhook handler verifies signatures with a dedicated STRIPE_CONNECT_WEBHOOK_SECRET separate from the platform billing webhook. Org resolution is strictly from event.account, structurally — there's an integration test that asserts metadata.invoiceId from a different org cannot mutate the targeted org. A nightly reconciliation cron at /api/cron/reconcile-payments replays the last 48 hours of events idempotent by event id.
Online payments are a Studio+ feature; on Free you still get manual payment recording (wires, checks) plus shareable invoice links and view tracking.