Create a charge or PaymentIntent on the platform account and set transfer_group to a unique identifier (e.g., order id) shared across all related transfers
After the charge succeeds, create one or more transfers via POST /v1/transfers with destination set to a connected account id, transfer_group matching the charge, and optionally source_transaction set to the charge id
Setting source_transaction links the transfer to the charge — Stripe will only allow the transfer if the source charge has sufficient funds and prevents the funds from being paid out before the charge clears
Retrieve transfers via GET /v1/transfers?transfer_group={group_id} to list all transfers associated with a given order or payment for reconciliation
To partially reverse a transfer after a refund, use POST /v1/transfers/{transfer_id}/reversals with the amount to claw back; this debits the connected account's balance
Verify that the sum of all transfer amounts does not exceed the net charge amount (gross charge minus Stripe fees) — Stripe will reject transfers that exceed the available balance sourced from the charge
Known gotchas
Unlike destination charges, separate charges and transfers do not automatically link the refund to the transfer — if you refund the charge, you must manually create a transfer reversal to recover funds from the connected account
source_transaction only works with charges created on the platform account; it cannot reference charges made directly on a connected account
Transfers with source_transaction are subject to a settlement window — the charge must clear before Stripe releases the funds for the transfer; check the exact timing window in current docs as it can vary by payment method
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