Back to Blog
Engineering6 July 20267 min read · 1,567 words

Stripe Connect: Engineering Marketplace Payments (2026)

N7

No7 Engineering Team

Growth Architecture Unit

Engineering — Stripe Connect: Engineering Marketplace Payments (2026) — illustration

Building a multi-seller marketplace requires a robust ledger architecture to handle split payouts and compliance. Implementing stripe connect is the most reliable way to route funds between buyers, platforms, and third-party sellers without triggering regulatory banking requirements. Selecting the wrong account type early in your design phase, however, will permanently lock you into suboptimal economics.

The Reality of Connect: Why Your Ledger Architecture Dictates Your Account Type

Choosing between Standard, Express, and Custom accounts is not a design preference; it is a fundamental architectural decision that determines who owns the merchant relationship and who bears the compliance burden. Your choice dictates whether your system acts as a direct payment facilitator or a passive referrer of payment traffic. When choosing a stripe connect integration path, you must evaluate the long-term operational overhead of KYC verification against your desire to control the user interface.

Standard accounts are standalone Stripe accounts connected to your platform via OAuth. The seller owns the account and deals directly with Stripe. This path costs the platform nothing in monthly platform fees, but you have minimal control over the onboarding flow or checkout interface. It is a viable path for B2B platforms where sellers are sophisticated businesses, but it introduces significant friction for consumer-facing marketplaces.

Express and Custom accounts shift the ledger responsibility to your platform. Stripe charges you around £1.60 per active monthly account to manage these, but you gain the ability to orchestrate the checkout and capture custom margins. In our experience, if you are building a platform for non-technical sellers who cannot handle a standard Stripe dashboard, Express is the bare minimum entry point.

Connect Account Type Decision Matrix

FeatureStandardExpressCustom
Monthly Fee£0around £1.60/active accountaround £1.60/active account
Payout Fee£00.25% + £0.20 per payout0.25% + £0.20 per payout
KYC SetupStripe directStripe-hosted co-brandedPlatform-owned (via API)

Stripe Connect Onboarding: Designing the KYC Flow Without Churning Sellers

Effective stripe connect onboarding relies on Stripe-hosted onboarding flows to handle complex Know Your Customer (KYC) requirements while maintaining a native-looking registration path. Offloading identity verification to Stripe's hosted web forms keeps your platform out of the scope of direct compliance audits while ensuring regulatory checks are completed before funds are paid out.

For Express accounts, Stripe provides a co-branded onboarding flow that handles ID verification, bank account collection, and business entity validation. For Custom accounts, you can either build a completely custom UI using the Stripe API or embed Stripe's pre-built Connect onboarding components. In our work with marketplace platforms, we have found that building a fully custom KYC UI is a massive engineering liability that rarely pays off. Stripe constantly updates its KYC requirements to comply with evolving UK and European anti-money laundering regulations, meaning a custom-built form will require perpetual maintenance.

Instead, using Stripe's hosted onboarding links via the Account Links API reduces your engineering surface area significantly. You generate an onboarding link by calling the accountLinks.create method, specifying the account ID, a refresh URL, and a return URL. You can read more in the official Connect account documentation to understand how capabilities are activated during this process.

Split Payments and Application Fees: Deciding Between Destination Charges and Separate Charges

Routing funds in a marketplace requires a choice between destination charges, which associate a single payment with a single connected account, and separate charges and transfers, which decouple the customer payment from the seller payout. Destination charges are the most straightforward pattern for single-item checkouts, whereas separate charges are required when a single cart contains items from multiple independent sellers. To implement these flows programmatically, developers typically use the Stripe Node.js library to orchestrate the transfers.

When a buyer checks out with items from one seller, you create a PaymentIntent using the transfer_data[destination] parameter. You can specify an application_fee_amount (for example, keeping a 10% cut of the transaction) which Stripe automatically routes to your platform's balance, while the remainder is settled directly in the connected account's balance.

However, if a customer buys a basket containing items from multiple independent sellers, destination charges will fail because a single PaymentIntent can only have one transfer destination. In this multi-seller scenario, you must use separate charges and transfers. You charge the customer's card for the full amount on your platform account, and then programmatically create separate transfers to each seller using the transfers endpoint, grouping them under a single transfer_group string for reconciliation.

How do I manage payout schedules and reserve balances safely?

Managing marketplace payouts requires configuring automated or manual payout schedules while maintaining a rolling reserve balance to cover refunds and chargebacks. Platforms must balance the sellers' desire for rapid payouts against the platform's exposure to financial liability from disputed transactions. This balance is critical because Stripe does not return processing fees on refunds, meaning every refund represents a permanent margin leak for the platform.

By default, Stripe's Connect accounts are configured for automatic daily rolling payouts. While this keeps sellers happy, it exposes your platform to severe cash flow risks if a high volume of refunds or disputes occurs. If a connected account's balance falls below zero due to a refund, Stripe will attempt to debit their linked bank account. If that debit fails, your platform account is held liable for the deficit.

To mitigate this, you can configure manual payouts or implement a delay on automatic payouts — for example, a 14-day rolling payout schedule. This delay ensures that funds remain in the connected account's Stripe balance long enough to cover the typical window for returns and disputes. In our experience, setting a minimum holding period of 7 to 14 days is a standard industry practice for high-risk marketplace categories.

Webhooks and Reconciliation: Structuring the Stripe Event Pipeline

Robust reconciliation in a marketplace payment system requires a dual-webhook architecture to ingest events from both the platform account and all connected accounts. Because financial states change asynchronously, your ledger database must rely on Stripe webhook events as the single source of truth for payment status, rather than synchronous API responses. A single missed webhook can result in mismatched ledger balances and delayed seller payouts.

To build this, you must configure two distinct webhook endpoints in Stripe: one for platform-level events (such as payment_intent.succeeded) and another wildcard endpoint configured to listen to all connected account events (such as account.updated). When processing these events, your webhook receiver must verify the signature of the incoming payload using Stripe's official SDK to protect against spoofing attacks.

In a typical Next.js architecture, you might deploy these receivers as API Route Handlers. Because these handlers must process events asynchronously, they should quickly validate the event, write the raw payload to an ingestion queue, and return a 200 OK response to Stripe within the required timeout window. Reviewing our guide on PCI-DSS 4.0 headless scoping patterns will help you understand how to keep your web servers completely out of the card data environment while orchestrating these complex backend transfers.

The Failure Modes: When Your Integration Breaks in Production

Production failures in marketplace payment architectures typically stem from unhandled webhook concurrency, mismatched currencies during transfers, and sudden KYC account suspensions. Designing for these failure modes requires defensive database locking, currency-boundary validation, and graceful UI states for restricted sellers. Ignoring these edge cases leads to double-payouts and severe compliance friction.

One common failure mode we observe is the "double-transfer" race condition. If a webhook event for a successful payment is processed twice due to network retries, or if your backend receives the webhook while a synchronous API callback is still executing, your system might attempt to call the transfers endpoint twice for the same order. To prevent this, you must enforce a unique idempotency key on every transfer request, and use database level row-locking on your ledger tables.

Another major bottleneck is currency conversion. If a customer pays in EUR, your platform account is in GBP, and the seller's connected account is in USD, Stripe will perform multiple currency conversions, each carrying a conversion margin (typically around 1.5% to 2.0%). If you do not account for these FX margins in your application fee calculations, your platform can easily lose its entire margin on international orders. We recommend reading our Adyen vs Stripe UK payment guide to understand how different payment processors handle multi-currency settlements and platform markups.

Next Steps: Implementing Your Marketplace Payments Architecture

Moving from architectural planning to a production-ready marketplace payment implementation requires mapping your commercial flows, choosing your account type, and establishing a robust testing suite. Platforms should begin by mapping out their transaction flows on paper before writing a single line of integration code. This preliminary design stage prevents costly database migrations later in the development cycle.

We recommend starting with Stripe's test environment using Express accounts to evaluate the hosted onboarding flow and verify that your webhook handlers process split payments correctly. Ensure you write integration tests that simulate various failure modes, such as failed bank debits, disputed charges, and partial refunds. This testing phase must be completed before you attempt to migrate live sellers or process real transactions.

Once your testing suite is green and you have verified your ledger's reconciliation logic against Stripe's test data, you can transition to production. Implementing marketplace payments requires rigorous edge-case testing before launching to live sellers. Ensure that your production deployment includes comprehensive logging for all API requests and webhook payloads to simplify debugging when financial discrepancies inevitably arise.

Frequently Asked Questions

The questions buyers and engineers ask us most about this topic.

Is Stripe Connect worth it for small marketplaces?

For platforms with under £1M GMV, the operational overhead of managing custom or express accounts is rarely justified. Stripe charges around £1.60 per active monthly merchant account, plus 0.25% and £0.20 per payout. For early-stage platforms, we typically recommend starting with standard accounts. While standard accounts limit your checkout customisation, they cost nothing in platform fees and offload all regulatory compliance and KYC management directly to Stripe, allowing your engineering team to focus on building the core platform before scaling.

What is the difference between destination charges and separate charges?

Destination charges are designed for single-seller transactions where the buyer pays, the platform takes a cut via an application fee, and the remainder settles in one connected account's balance. Separate charges and transfers decouple the customer's payment from the seller's payout, allowing you to charge the customer once and distribute the funds to multiple sellers. Separate charges are necessary for multi-seller carts but require the platform to act as the merchant of record, which increases your liability for chargebacks and disputes.