Fetch all balance transactions for the payout period via GET /v1/balance_transactions with type=transfer and created[gte]/[lte] date range; paginate through all results using the starting_after cursor parameter.
For each balance transaction of type transfer, retrieve the associated Transfer object via the source field to get destination (connected account ID), amount, and source_transaction (original charge ID).
Build a reconciliation table: group transfers by connected account, summing the net amounts after fee deductions; compare the sum per connected account to your internal order records for the same period.
Fetch the corresponding Payout objects on each connected account (using the Stripe-Account header) via GET /v1/payouts to confirm that the aggregated transfer amounts flowed through to the connected account's bank account.
Identify discrepancies: transfers that appear in your internal records but not in Stripe balance transactions indicate a failed or cancelled Transfer; transfers in Stripe but not in your records indicate a reconciliation gap requiring investigation.
Export the balance transaction list as a CSV via the Dashboard or the Stripe Sigma/Data Pipeline product for bulk reconciliation against your accounting system.
Known gotchas
Balance transactions use Stripe's settlement currency, which may differ from the presentment currency for cross-border charges — the exchange_rate field on the balance transaction shows the conversion used; ensure your reconciliation logic converts amounts to a consistent reporting currency using this field.
Transfers created via separate charges and transfers do not have an application_fee balance transaction type — your platform fee is the amount difference between the charge and the sum of transfers; calculate it explicitly rather than querying for a fee transaction.
Stripe Sigma and Data Pipeline use different data freshness windows than the REST API — Sigma typically reflects data with up to a 12-hour lag; do not use Sigma for real-time reconciliation, only for batch/overnight reconciliation runs.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp