Marketplace Fresh
Build a marketplace to connect sellers with customers and facilitate the exchange of goods or services.
What a marketplace integration looks like
- Your platform is the merchant of record — customers see your brand, not the seller's
- You collect payment from buyers
- You pay out to sellers after taking a fee
- You pay Stripe fees and manage disputes
Charge types for marketplaces
| Charge type | When to use |
|---|---|
| Destination charges | Single seller per transaction. Platform charges the customer and transfers to seller. |
| Separate charges + transfers | Multiple sellers per transaction, or seller unknown at time of charge. |
Destination charges (single seller)
bash
curl https://api.stripe.com/v1/payment_intents \
-u "sk_test_YOUR_KEY:" \
-d amount=10000 \
-d currency=usd \
-d "transfer_data[destination]=acct_SELLER" \
-d "transfer_data[amount]=8500" \
-d "automatic_payment_methods[enabled]=true"The platform keeps $15 (1500 cents), the seller receives $85 (8500 cents).
Alternatively use application_fee_amount to have Stripe deduct the fee after the full amount is transferred:
bash
curl https://api.stripe.com/v1/payment_intents \
-u "sk_test_YOUR_KEY:" \
-d amount=10000 \
-d currency=usd \
-d "transfer_data[destination]=acct_SELLER" \
-d application_fee_amount=1500Separate charges + transfers (multi-seller)
Create a charge on the platform, then create separate transfers to each seller:
bash
# Step 1: Create charge on platform
curl https://api.stripe.com/v1/payment_intents \
-u "sk_test_YOUR_KEY:" \
-d amount=20000 \
-d currency=usd \
-d "automatic_payment_methods[enabled]=true"
# Step 2: Transfer to seller A
curl https://api.stripe.com/v1/transfers \
-u "sk_test_YOUR_KEY:" \
-d amount=9000 \
-d currency=usd \
-d destination=acct_SELLER_A \
-d "source_transaction=ch_CHARGE_ID"
# Step 3: Transfer to seller B
curl https://api.stripe.com/v1/transfers \
-u "sk_test_YOUR_KEY:" \
-d amount=8000 \
-d currency=usd \
-d destination=acct_SELLER_B \
-d "source_transaction=ch_CHARGE_ID"Platform keeps 3000 cents ($30) from the $200 transaction.
Monetization
Common revenue strategies:
- Commission per transaction — keep a percentage of each sale via
application_fee_amountor partial transfer - Listing fees — charge sellers a subscription via Stripe Billing
- Premium features — Instant Payouts for accelerated access to funds (you earn the fee)
- Issuing — give sellers branded cards to pay with
Use the platform pricing tool in Dashboard → Connect → Platform pricing to automate application fee logic.
Merchant risk
Your platform covers negative balances of your connected accounts. Implement risk controls:
- Use Radar for Platforms to screen for high-risk sellers and buyers
- Set reserve requirements on connected accounts
- Monitor
balance.availableand connected account balances
Seller onboarding
Use Stripe-hosted onboarding or embedded components:
bash
# Create connected account for seller
curl https://api.stripe.com/v1/accounts \
-u "sk_test_YOUR_KEY:" \
-d "controller[fees][payer]=application" \
-d "controller[losses][payments]=application" \
-d "controller[stripe_dashboard][type]=express"
# Create onboarding link
curl https://api.stripe.com/v1/account_links \
-u "sk_test_YOUR_KEY:" \
-d "account={{SELLER_ACCOUNT_ID}}" \
--data-urlencode "refresh_url=https://example.com/refresh" \
--data-urlencode "return_url=https://example.com/return" \
-d type=account_onboarding \
-d "collection_options[fields]=eventually_due"Seller dashboard
Give sellers visibility into their sales and payouts via:
- Express Dashboard — Stripe-hosted mini-dashboard for payouts and dispute management
- Embedded components — Mount account management UI inside your application
Key webhook events for marketplaces
| Event | Action |
|---|---|
payment_intent.succeeded | Fulfill the order, trigger seller payout |
account.updated | Check if seller has unmet requirements |
payout.failed | Notify seller to update bank details |
charge.dispute.created | Start dispute response process |
transfer.reversed | Track reversal for refund accounting |