Split payments in Bubble use Stripe Connect to automatically divide a single customer payment between your platform and one or more recipients. You create Stripe Connected Accounts for each recipient, process the payment with transfer instructions, and Stripe handles the fund distribution. This is essential for marketplaces, service platforms, and any app where multiple parties share revenue from a single transaction.
Overview: Split Payments in Bubble
This tutorial shows how to split a single payment between your platform and one or more recipients using Stripe Connect in Bubble.
Prerequisites
- A Bubble app with a payment flow
- A Stripe account with Connect enabled
- API Connector plugin installed
- Understanding of REST API calls and backend workflows
Step-by-step guide
Enable Stripe Connect on your Stripe account
Enable Stripe Connect on your Stripe account
Log into your Stripe Dashboard. Go to Settings → Connect settings. Enable Connect. Choose your platform type (marketplace). Set the default commission/application fee. In your Stripe Dashboard under Developers → API keys, ensure you have your platform's Secret Key. This key is used for all Stripe Connect API calls from Bubble.
Expected result: Stripe Connect is enabled on your platform account with settings configured.
Create Connected Accounts for recipients
Create Connected Accounts for recipients
For each recipient (vendor, service provider, creator), create a Stripe Connected Account via the API Connector. POST to https://api.stripe.com/v1/accounts with type=express. After creation, generate an onboarding link by calling /v1/account_links with the account ID. Redirect the recipient to this link to complete identity verification. Store the Stripe account ID on their Bubble user or vendor record.
Expected result: Recipients have Connected Accounts with completed identity verification.
Process a payment with application fee (platform commission)
Process a payment with application fee (platform commission)
When a customer checks out, create a PaymentIntent with the application_fee_amount parameter. This automatically splits the payment: the application fee goes to your platform, the remainder goes to the connected account. Use the API Connector to POST to https://api.stripe.com/v1/payment_intents with amount, currency, application_fee_amount, and transfer_data[destination] set to the recipient's Connected Account ID.
1{2 "amount": 10000,3 "currency": "usd",4 "application_fee_amount": 1500,5 "transfer_data[destination]": "acct_recipient123",6 "payment_method": "pm_card_visa",7 "confirm": true8}Pro tip: application_fee_amount is in cents. For a $100 payment with 15% commission: amount=10000, application_fee_amount=1500.
Expected result: The payment is processed with the fee going to your platform and the remainder to the recipient.
Split payments between multiple recipients
Split payments between multiple recipients
For orders involving multiple vendors, use separate transfers instead of the application_fee approach. Process the full payment to your platform first, then create individual transfers to each recipient's Connected Account. POST to https://api.stripe.com/v1/transfers with amount, destination (connected account ID), and transfer_group (to link related transfers). Calculate each recipient's share minus your platform commission.
Expected result: A single customer payment is split between multiple recipients with the platform retaining its commission.
Handle refunds for split payments
Handle refunds for split payments
When refunding a split payment, you need to reverse both the customer charge and the transfers. Use Stripe's refund API on the original PaymentIntent. Stripe automatically reverses the transfer to the connected account. For partial refunds, specify the amount and Stripe prorates the reversal. Update your Payment and Order records to reflect the refund status. For marketplace disputes, track which party is responsible.
Expected result: Refunds properly reverse both the customer charge and the recipient transfers.
Complete working example
1SPLIT PAYMENTS — WORKFLOW SUMMARY2====================================34STRIPE CONNECT SETUP:5 Enable Connect in Stripe Dashboard6 Create Connected Accounts for recipients7 Store account IDs in Bubble database89SINGLE RECIPIENT (application fee):10 PaymentIntent:11 amount: total in cents12 application_fee_amount: commission in cents13 transfer_data[destination]: recipient account ID14 Result: fee → platform, remainder → recipient1516MULTIPLE RECIPIENTS (transfers):17 Step 1: Charge full amount to platform18 Step 2: Transfer to each recipient:19 POST /v1/transfers20 amount: recipient's share21 destination: account ID22 transfer_group: order ID2324COMMISSION CALCULATION:25 Platform fee = total * commission_rate / 10026 Recipient payout = total - platform fee27 All amounts in cents2829REFUNDS:30 POST /v1/refunds on original PaymentIntent31 Stripe auto-reverses connected transfers32 Update Payment + Order recordsCommon mistakes when creating Split Payments in Bubble
Why it's a problem: Specifying application_fee_amount as a percentage instead of cents
How to avoid: Calculate the fee amount: total_amount * commission_rate / 100, then pass the result in cents
Why it's a problem: Transferring to accounts that have not completed onboarding
How to avoid: Check the connected account's charges_enabled status before processing transfers
Why it's a problem: Not linking transfers with a transfer_group for multi-vendor orders
How to avoid: Always set transfer_group to the order ID when creating transfers for multi-recipient payments
Best practices
- Verify connected accounts are fully onboarded before processing transfers
- Use transfer_group to link related transfers for clean reporting and refund handling
- Calculate fees in cents and double-check amounts before processing
- Store Stripe transaction IDs on all payment and transfer records
- Test thoroughly with Stripe's test mode before going live
- Set up webhooks for transfer.paid and transfer.failed events
- Implement a payout dashboard where recipients can see their earnings
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I'm building a marketplace in Bubble.io where buyers pay once and the payment splits between the platform (15% commission) and the vendor. How do I implement this with Stripe Connect?
Set up split payments for my marketplace. When a buyer purchases from a vendor, charge the full amount and automatically split: 15% to the platform, 85% to the vendor's Stripe Connected Account. Handle refunds that reverse both sides.
Frequently asked questions
What types of Stripe Connected Accounts should I use?
Express accounts are recommended — Stripe handles onboarding, identity verification, and payout management. Standard accounts give recipients more control but require more integration work.
Can I split a payment between more than two recipients?
Yes. Use the transfer approach: charge the full amount to your platform, then create individual transfers to each recipient's Connected Account.
When do recipients receive their payouts?
Stripe pays out to Connected Accounts on a rolling basis (typically 2 business days after the transfer). Recipients configure their payout schedule in their Stripe Express dashboard.
Can I change the commission rate per vendor?
Yes. Store the commission_rate on each Vendor record. Calculate the application_fee_amount dynamically based on each vendor's rate during checkout.
Can RapidDev help implement payment splitting for my platform?
Yes. RapidDev specializes in Stripe Connect integration with split payments, commission management, and payout dashboards for marketplace platforms in Bubble.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation