Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
About Stripe payments
    Overview
    Currencies
    Declines
    Payouts
      Payout reconciliation
      Payout trace IDs
      Payout statement descriptors
      Multi-currency settlement
      Instant Payouts
      Customized start of day
      Minimum balances for automatic payouts
    Recurring payments
    3D Secure authentication
    Refund and cancel payments
    Balances and settlement time
    Receipts
    Handle webhook events
    SCA readiness
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Elements
Payment scenarios
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsAbout Stripe paymentsPayouts

Payout reconciliation

Know which transactions are included in a given payout.

Copy page

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
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
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
balance_transactions['data'].each do |txn| obj = txn['source'] puts "#{obj['id']} #{obj['amount']}" end
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc