Create a PaymentIntent on the platform account with on_behalf_of set to the connected account ID; this shifts presentment and statement descriptor to the connected account.
Do not set destination or transfer_data at PaymentIntent creation when using on_behalf_of alone — the charge settles to the platform's balance initially.
After the PaymentIntent is confirmed and funds are in the platform balance, create a Transfer via POST /v1/transfers specifying amount, currency, and destination (the connected account ID).
Use transfer_group on the PaymentIntent and the Transfer to link them for reconciliation without tying the transfer to a specific charge.
To collect a platform fee, subtract the fee amount from the transfer amount rather than using application_fee_amount — only destination charges support application_fee_amount natively.
Monitor transfer.created and transfer.failed webhooks on the platform account to track fund movement.
Known gotchas
on_behalf_of determines the business entity whose compliance settings, statement descriptor, and bank statement name appear — ensure the connected account is properly onboarded before using it.
Separate charges + transfers means the platform bears refund liability; if you refund the customer, you must also reverse the transfer manually.
transfer_group is a free-form string — use a consistent scheme (e.g., order ID) and enforce it in your code to keep reconciliation tractable.
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