Payment Architecture
Two-Sided Marketplace
The platform operates as a two-sided marketplace:- Organizations: Pay for bounties using Stripe Checkout
- Contributors: Receive payouts via Stripe Connect accounts
- Platform: Facilitates secure escrow and transfers
Payment Flow Overview
Platform Fees
The platform charges fees based on your subscription plan:| Plan | Platform Fee | Fee-Free Allowance |
|---|---|---|
| Free | 5% | $0/mo |
| Basic | 4% | $500/mo |
| Pro | 3% | $5,000/mo |
| Pro+ | 2% | $50,000/mo |
Learn more about pricing tiers and fee-free allowances in the Pricing & Plans guide.
Funding Bounties
Creating Checkout Session
When creating a bounty, organizations can choose to fund immediately or pay later:Stripe Customer Creation
Organizations automatically get Stripe customers:- Created on first bounty funding
- Customer ID stored in organization record
- Reused for all future bounties
- Verified and recreated if missing from Stripe
Payment Confirmation
Payments are confirmed via Stripe webhooks:- User completes Stripe Checkout
- Stripe sends
checkout.session.completedwebhook - Platform captures payment and updates bounty
- Bounty status changes from
drafttoopen - Payment status changes from
pendingtoheld
Stripe Connect Integration
Developers must set up Stripe Connect to receive payouts.Connect Account Setup
Initiating Onboarding
Account Status
Check your Connect account status:Account Requirements
Stripe may require additional information:- Currently Due: Must be provided to receive payouts
- Eventually Due: Will be required in the future
- Past Due: Overdue requirements blocking payouts
Express Dashboard
Access your Stripe Express Dashboard to manage:- Banking information
- Payout schedule
- Tax information
- Identity verification
- Transaction history
Receiving Payouts
Payout Creation
When a submission is approved:- Platform creates transfer to Connect account
- Payout record created with
pendingstatus - Stripe processes transfer
- Payout status updates to
processingthencompleted - Funds appear in Connect account balance
- Stripe handles bank deposit based on payout schedule
Payout Statuses
- pending: Transfer initiated, awaiting processing
- processing: Stripe processing the transfer
- completed: Successfully transferred to Connect account
- failed: Transfer failed (retried automatically)
Viewing Payout History
Account Balance
Check your Connect account balance:Balances are in USD cents and converted to dollars for display. Funds move from pending to available based on Stripe’s standard timeline.
Transaction Records
All payment operations are logged:Transaction Types
- payment_intent: Initial bounty funding
- transfer: Payout to contributor
- refund: Cancelled bounty refund
- payout: External bank payout
Transaction Details
Each transaction records:- Bounty ID
- Transaction type
- Amount
- Stripe ID for verification
- Timestamp
Activity Tracking
View your complete payment activity:Refunds
Cancelled bounties trigger automatic refunds:- Cancellation request approved
- Payment intent cancelled in Stripe
- Refund created for original amount
- Funds returned to organization’s payment method
- Transaction recorded with type
refund
Security Features
Payment Locks
Prevents duplicate payment operations:- Idempotent payment processing
- Operation tracking prevents double-charging
- Redis-based distributed locking
- Automatic lock expiration
Circuit Breaker
Protects against Stripe API failures:- Monitors Stripe API health
- Automatically opens circuit on repeated failures
- Prevents cascade failures
- Auto-recovery when Stripe is healthy
Webhook Verification
All Stripe webhooks are verified:- Signature validation
- Event deduplication
- Secure endpoint authentication
- Automatic retry on failure
Common Issues
Bounty stuck in draft status
Bounty stuck in draft status
Payment webhook not received yet. Wait 1-2 minutes. If persists, contact support with bounty ID.
Connect onboarding incomplete
Connect onboarding incomplete
Additional information required. Check Connect status for requirements list. Access dashboard to provide missing information.
Payout showing as failed
Payout showing as failed
Stripe will automatically retry failed transfers. Check Connect dashboard for account issues. Ensure banking information is correct.
Balance not showing in bank account
Balance not showing in bank account
Funds transfer from Connect balance to bank based on payout schedule (typically 2-7 business days). Check Stripe Express Dashboard for payout schedule.
Cannot create Connect account
Cannot create Connect account
Error likely indicates Connect not enabled in Stripe Dashboard. Enable Connect in Stripe settings: dashboard.stripe.com/settings/connect
Best Practices
Complete Onboarding Early
Set up your Stripe Connect account before working on bounties to receive payouts immediately upon approval.
Verify Banking Info
Double-check your banking information in Stripe Express Dashboard to avoid payout delays.
Monitor Requirements
Regularly check for new Stripe requirements to maintain payout capability.
Track Activity
Review payment activity regularly to reconcile earnings and ensure all payouts processed correctly.
Payment Support
For payment-related issues:- Check Stripe Express Dashboard for detailed error messages
- Review platform activity logs
- Contact support with transaction/payout ID
- For Stripe account issues, contact Stripe support directly