decisionshared last reviewed 2026-05-21

Stripe Connect (Express) is the default for multi-vendor marketplaces

Context

Aspire's marketplace products (Alby Studio, Alby Place, future Aspire Marketplace projects) need to onboard merchants + accept their customers' payments + take a platform fee + payout to merchants. Without a default, each new marketplace re-debates Stripe vs Zinga Pay vs PayPal vs Square vs custom escrow.

Detail

Options considered

OptionProsCons
A โ€” Stripe Connect (Express)Battle-tested, AU support, Express dashboard handles merchant onboarding KYC, Connect Webhooks for split paymentsPer-transaction fee (~2.9% + 30ยข AUD card) + payout fees
B โ€” Custom escrow on PostgresFull controlCompliance nightmare, AU regulatory risk, no FDIC/AFCA-equivalent protection
C โ€” Zinga Pay (Aspire's own payment rail)Aspire-controlled, no platform fee leakageNot yet built; defers shipping marketplaces
D โ€” PayPal MarketplacesFamiliar to consumersWorse merchant UX than Stripe, AU support patchy

Decision

We chose: Stripe Connect (Express) โ€” option A.

Rationale

Architecture

Customer โ†’ checkout.stripe.com (Express flow)
         โ†’ Stripe Connect splits payment:
             - Vendor receives (price - platform_fee_pct)
             - Platform (Aspire) receives platform_fee_pct
         โ†’ Stripe Webhook โ†’ alby-studio /api/webhooks/stripe
             โ†’ Update Order.status = paid
             โ†’ Send merchant notification (Telegram per [[shared/decisions/telegram-bot-pattern]])
             โ†’ Send customer receipt (SendGrid)

Constraints we accepted

Per-marketplace customization

Each marketplace has its own Stripe platform account (e.g., alby-studio platform = acct_alby_studio_prod). Cross-marketplace vendor accounts are NOT shared โ€” a vendor selling on Alby Studio AND a future Aspire Marketplace would have 2 separate Connect accounts.

Revisit trigger

Actions

Related

๐Ÿ”— Relationships

graph LR stripe_connect_marketplace_default["stripe-connect-marketplace-default"]:::self stripe_connect_marketplace_default --> telegram_bot_pattern["telegram-bot-pattern"] stripe_connect_marketplace_default --> graphify_audit_2026_05_21["graphify-audit-2026-05-21"] stripe_connect_marketplace_default --> aspire_llm_gateway_only_egress["aspire-llm-gateway-only-egress"] stripe_connect_marketplace_default --> aspire_hub["aspire-hub"] classDef self fill:#715EE3,color:#fff,stroke:#291F50;