Stripe offers 3 methods to create a multiparty payment: Direct Charge, Destination Change, and Separate Charges and Transfers. If you are a visual person like me the documentation may not be enough to clarify which option would be best for your scenario. Here we’ll fill a few gaps that are missing from the official documents.
Direct Charge
The Direct Charge method is relatively straightforward. Your platform has to implement stripe account onboarding to connect accounts. As a result, your platform will be able to facilitate payments for these accounts and collect application fees in the process.
With this method, the connected account is responsible for the Stripe fees.
const paymentIntent = await stripe.paymentIntents.create(
{
amount: 10000,
currency: 'usd',
application_fee_amount: 1000,
},
{
stripeAccount: '{{CONNECTED_STRIPE_ACCOUNT_ID}}',
}
)
*Note that without stripeAccount
parameter this intent will be created for your own account.
Destination Charge
The Destination Charge can be visualized as follows.
In this scenario, the payment is routed to a connected account directly. It is the platform’s responsibility to collect fees in the process. Important to note that in this scenario the platform is responsible for stripe fees. Therefore the platform should calculate and include stripe fees in the application fees.
Separate Charges and Transfers
Separate Charges and Transfers, as the name suggests, consist of separate steps that exist in Stripe’s API autonomously. The element that connects these API calls is transfer_group
the parameter which is passed to paymentIntents.create
invocation.
// Create a PaymentIntent:
const paymentIntent = await stripe.paymentIntents.create({
amount: 10000,
currency: 'usd',
transfer_group: '{ORDER10}',
})
The scheme below is a visual representation of the money flow. As you can see the funds first land on the platform’s balance. The following transfer step can use the funds from the payment to credit the connected account.
The payment will have an additional Transfer Group
field on the platform’s dashboard.
On the connected account’s dashboard will appear another payment for the amount of transfer.
Lingo:
Platform - is the master account that facilitates payments and the account to which other accounts connect.
Connected Account - an account that is connected to a platform (e.g. Express, Standard, or Custom account).