Stripe Payouts — Complete Guide to Receiving Funds
In this tutorial, you will learn about Stripe Payouts. We cover key concepts, practical examples, and best practices to help you master this topic.
Stripe Payouts API manages transferring funds from Stripe balance to bank accounts, with scheduling options, instant payouts, and payout reconciliation for platforms and merchants.
What You'll Learn
- How Stripe payouts work and their schedule
- Creating manual and instant payouts
- Payout reconciliation and reporting
Why It Matters
Without understanding the payout system, merchants cannot predict when funds arrive, reconcile payments, or manage cash flow. The Payouts API provides programmatic control over fund transfers.
Real-World Use
Durga Antivirus Pro receives payouts from Stripe every business day. Their finance team reconciles daily payouts against the Stripe balance transactions API to match each payout with its source payments.
flowchart LR
C["Customer Payment"] --> B["Stripe Balance"]
B --> P["Payout"]
P --> BA["Bank Account"]
P --> R["Payout Report"]
B --> T["Balance Transactions"]
style P fill:#dbeafe,stroke:#2563eb
Code Examples
import stripe
stripe.api_key = 'sk_test_...'
# View pending balance
balance = stripe.Balance.retrieve()
print(f"Available: ${balance.available[0].amount / 100}")
print(f"Pending: ${balance.pending[0].amount / 100}")
# List recent payouts
payouts = stripe.Payout.list(limit=10)
for payout in payouts:
print(f"{payout.id}: ${payout.amount / 100} - {payout.status}")
Expected output: Current pending and available balances displayed; recent payouts listed with status.
# Create a manual payout
import stripe
stripe.api_key = 'sk_test_...'
payout = stripe.Payout.create(
amount=500000, # $5,000.00
currency='usd',
description='Weekly platform payout',
metadata={'period': '2026-W26'},
)
print(f"Payout created: {payout.id}")
print(f"Arrival date: {payout.arrival_date}")
Expected output: Manual payout of $5000 created; funds arrive at connected bank on the next business day.
// Instant payouts (for connected accounts)
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
async function instantPayout(amount, destination) {
try {
const payout = await stripe.payouts.create({
amount,
currency: 'usd',
destination,
source_type: 'card', // Instant payouts require card source
method: 'instant',
statement_descriptor: 'DURGA INSTANT',
});
console.log('Instant payout:', payout.id);
console.log('Arrives in 30 min or less');
} catch (err) {
if (err.type === 'StripeInvalidRequestError') {
console.error('Insufficient balance or instant not available');
}
}
}
instantPayout(5000, 'ba_connected_bank');
Expected output: Instant payout initiated with card source type for faster arrival (30 min vs 2-3 days).
# Payout reconciliation
import stripe
stripe.api_key = 'sk_test_...'
def reconcile_payout(payout_id):
payout = stripe.Payout.retrieve(payout_id)
transactions = stripe.BalanceTransaction.list(
payout=payout_id,
limit=100,
)
total = 0
for txn in transactions:
total += txn.amount
print(f" {txn.id}: ${txn.amount / 100} ({txn.description})")
print(f"Payout: ${payout.amount / 100}")
print(f"Reconciled: ${total / 100}")
print(f"Match: {payout.amount == total}")
reconcile_payout('po_12345')
Expected output: All balance transactions that compose the payout are listed and reconciled against the payout amount.
Common Mistakes
1. Assuming Daily Payouts Are Instant
Standard payouts take 2-7 business days to arrive. Instant payouts (available in some regions) arrive in minutes.
2. Not Checking Available Balance
A payout creation fails if the available balance is insufficient. Check balance.before creating payouts.
3. Forgetting Payout Destination
If no external bank account is connected, Stripe cannot send payouts. Verify account setup during onboarding.
4. No Reconciliation Process
Without reconciling payouts against balance transactions, accounting discrepancies go undetected.
5. Ignoring Payout Failure Webhooks
Payouts can fail (invalid bank details, closed account). Listen for payout.failed webhooks to alert merchants.
Practice Questions
- What is the difference between available and pending balance?
- How long do standard payouts take to arrive?
- What is an instant payout and when is it available?
- Why is payout reconciliation important?
- What Webhook should you handle for payout failures?
Answers:
- Available balance can be paid out now; pending balance includes unsettled payments.
- 2-7 business days depending on the merchant's country and industry.
- Instant payouts arrive within 30 minutes, available to eligible US merchants with card payouts.
- Reconciliation ensures all payments are accounted for and the payout amount matches individual transactions.
- payout.failed webhook triggers when a payout cannot be delivered to the bank account.
Challenge: Build a payout dashboard that shows: current balance (available/pending), creates manual payouts, lists payout history with status, reconciles each payout against balance transactions, and sends alerts on payout failures.
FAQ
Mini Project
Build a payout management system for a marketplace platform: display available/pending balance per seller, create manual payouts on demand, reconcile each payout against Transaction fees and refunds, and handle payout failure webhooks with email alerts.
What's Next
Explore Stripe Connect for marketplace payout routing, or learn about Stripe Balance API for detailed transaction reporting.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro