List all payouts for a period via GET /v1/payouts with arrival_date[gte] and arrival_date[lte]; each payout object includes id, amount, arrival_date, and status
For each payout, fetch all balance transactions associated with it via GET /v1/balance_transactions?payout={payout_id}&limit=100 and page through using starting_after
Group balance transactions by type: charge, refund, dispute, adjustment, stripe_fee, and payout; sum each group's net field to verify they reconcile to the payout amount
For each balance transaction of type charge, retrieve the charge object using the source field to get the original charge ID, then fetch the associated PaymentIntent, customer, and invoice if applicable
Write each balance transaction line to your GL: charges credit revenue, refunds debit revenue, stripe_fees debit payment processing expense, and disputes debit a dispute reserve account
Reconcile the payout amount in your bank statement against the payout object's amount; a mismatch suggests an additional payout was split or combined — check for payout.updated events in your webhook logs
Known gotchas
Stripe may combine multiple payouts into a single bank deposit or split a single payout across multiple bank credits depending on your bank's processing; always reconcile on payout ID, not on bank deposit amount
Balance transaction fees are itemized in the fee_details array within each balance transaction object, not just as a single stripe_fee line — use fee_details for detailed cost accounting
Connect platform charges appear in balance transactions with a source_transfer field; these require additional lookups to the connected account to get the original charge details, complicating multi-account reconciliation
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