Skip to content
Create account or Sign in
The Stripe Docs logo
/
Ask AI
Create accountSign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
APIs & SDKsHelp
OverviewAccept a paymentUpgrade your integration
Online payments
OverviewFind your use case
Use Payment Links
Use a prebuilt checkout page
Build a custom integration with Elements
Build an in-app integration
Use Managed PaymentsRecurring payments
In-person payments
Terminal
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment operations
Analytics
Balances and settlement time
Compliance and security
Currencies
Declines
Disputes
Fraud prevention
Radar fraud protection
Payouts
    Overview
    Payout reconciliation
    Payout trace IDs
    Payout statement descriptors
    Multi-currency settlement
    Next-day settlement
    Instant Payouts
    Customized start of day
    Minimum balances for automatic payouts
ReceiptsRefunds and cancellations
Advanced integrations
Custom payment flows
Flexible acquiring
Multiprocessor orchestration
Beyond payments
Incorporate your company
Crypto
Agentic commerce
Financial Connections
Climate
Verify identities
United States
English (United States)
HomePaymentsPayouts

Payout reconciliation

Know which transactions are included in a given payout.

Sending funds from your Stripe available balance to your bank account generates a payout object. Automatic payouts occur routinely according to your payout schedule and can include funds from multiple transactions.

Stripe provides the following ways to review the transactions included in an automatic payout:

  • Open a payout in the Stripe Dashboard.
  • View or download the payout reconciliation report.
  • Retrieve the payout details through the Stripe API as documented in this guide.

Reconciliation for manual payouts

You control the timing and amount of manual payouts, so Stripe can’t identify which transactions are included in each payout. You’re responsible for reconciling payouts you create against your transaction history.

Find the Payout ID

You need a payout’s id (po_xxx) to retrieve information about the payout’s transactions. To get it:

  • Listen to the payout.reconciliation_completed webhook event.
  • Call List Payouts to review a list of payouts.
  • Retrieve it from your own database.

You could retrieve the Payout to access its properties, but this won’t include the individual transactions that make up the total amount.

Retrieve payout sample response
{ "id": "po_001", "amount": 8000, "currency": "usd", "status": "paid", ... }

List BalanceTransactions

Every funds movement in or out of your Stripe account creates a BalanceTransaction. Pass the payout ID in your list BalanceTransaction request to filter the results by only transactions associated with that payout.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl -G https://api.stripe.com/v1/balance_transactions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d payout=po_xxx

If you need more results than the default 10, set the limit parameter in the request or use Stripe’s auto-pagination.

The response returns an array of BalanceTransactions objects for the specified payout:

List balance transactions sample response
{ "object": "list", "data": [ { "id": "txn_001", "amount": 10000, "type": "charge", "source": "ch_001", ... }, { "id": "txn_002", "amount": -2000, "type": "refund", "source": "re_001", ... }, ...

The type property identifies the underlying activity that generated the transaction. for example:

  • charge: A payment from your customer.
  • refund: Funds you returned to your customer.
  • stripe_fee: A Stripe fee you paid.
  • payout: The payout itself, which is also a transaction that moved funds from your Stripe account to your bank account.

See balance transaction types for a complete list.

Expand balance transaction resources

The source property of each BalanceTransaction identifies the underlying object representing the transaction type, such as ch_xxx for a Charge or re_xxx for a Refund. To retrieve these objects without making extra API calls, update the previous code using expand.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl -G https://api.stripe.com/v1/balance_transactions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d payout=po_xxx \ -d "expand[]"="data.source"

The response contains the expanded source object for each BalanceTransaction in the payout:

Expanded source sample response
{ "object": "list", "data": [ { "id": "txn_001", "amount": 10000, "type": "charge", "source": { "id": "ch_001", "amount": 10000, "metadata": { ... }, ... }, ... }, { "id": "txn_002", "amount": -2000, "type": "refund", "source": { "id": "re_001", "amount": 2000, "reason": "requested_by_customer", ... }, ...

Use the following code to access the source object properties such as id and amount.

Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
balance_transactions['data'].each do |txn| obj = txn['source'] puts "#{obj['id']} #{obj['amount']}" end
Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc