StripeAndrew RobinsonExplainer
Keeping funds where they belong: Implementing fund segregation in Stripe Connect
Summary
Marketplaces using Stripe Connect’s separate charges and transfers can pool seller funds with platform revenue, exposing them to payouts, unrelated disputes, fees, refunds, and operational mistakes. In response to anticipated PSD3 changes and tighter Commercial Agent Exemptions, Stripe introduced Segregated Separate Charges and Transfers, which places captured payment funds in an allocated balance that cannot fund payouts and can only be transferred to connected accounts. The integration enables allocated_funds on PaymentIntents, transfer_group tracking, source_transaction-linked transfers, and application fees collected from the same allocation; balances are inspected through the API. The post also details split transfers, refund and reversal ordering, dispute handling, prerequisites, and limitations including card-only support, preview-header requirements, and sandbox-only testing, presenting segregation as a way to make fund flows traceable and operationally safer.
Context
Using separate charges and transfers, a platform’s Stripe balance can contain funds belonging to many sellers alongside the platform’s own revenue. Automatic payouts, unrelated disputes or chargebacks, Stripe fees, refunds, and operational errors can therefore affect seller funds. The post also describes regulatory pressure under PSD2, EMD2, UK client money rules, and anticipated tighter Commercial Agent Exemptions under PSD3.
Approach / What changed
Enable allocated_funds on each PaymentIntent and use transfer_group to track the payment lifecycle. Transfer funds with source_transaction tied to the original charge, optionally collecting an application fee in the same call. The integration supports splitting one allocation across multiple connected accounts, uses allocated funds first for refunds, returns reversed transfers to the allocated balance, and uses Balance Transfers for certain dispute and hanging-balance cases.
Takeaways
Captured allocated funds remain outside the platform’s available balance, cannot be used for payouts, and can only be transferred to connected accounts. The API exposes per-payment allocated and transferred amounts through the PaymentIntent’s latest charge.
A transfer can use source_transaction to draw from one payment’s allocated balance and application_fee_amount to collect a platform fee. The fee is additive to the transfer amount, and multiple transfers can share an allocation without exceeding the original charge.
Refunds first consume any remaining allocated balance, while transfer reversals return funds there. Dispute fees always debit the platform balance; allocated funds can be moved back to the seller or to the platform depending on the outcome and currency match.
Source and freshness
- Source
- stripe.dev
- Published
- Added to Yomu
- Last updated
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.