Skip to main content
In this guide you’ll create a checkout that belongs to your platform, name a seller account as the destination, send the customer to it, and confirm the payment from a webhook. By the end the charge sits in your platform’s balance and the seller’s share has moved to its own. This is a destination charge. Your platform is the merchant of record, which is what a marketplace’s customer expects: they bought from the marketplace, not from the seller directly. See Choose your integration if that does not describe your case.

Before you start

  • A seller account. It does not need a payment-accepting capability on this shape, and does not need payouts active until it withdraws. See Create an account.
  • A product to sell. See Products.
  • Your own card_collection (or whichever payment method you offer) active on your platform, since your platform is the one being checked, not the seller. See Capabilities.

Steps

1

Create the checkout as your platform

Do not send X-Account-Id. Name the seller in transfer_data.destination and set platform_fee: the seller receives what is left of the sale after it, so a destination charge with no fee leaves your platform nothing to pay Bachs’s processing fee from.
checkout_id names the checkout for your own records and for GET calls; checkout_url carries a separate token, not the id, so do not parse one out of the other.
2

Send the customer to the checkout

Redirect them to checkout_url. Bachs hosts the payment page and collects the charge against your platform.
3

Confirm from the webhook

Bachs sends checkout.completed once the customer finishes. Check data.payment_status: paid means a charge was made. organization_id on the event is your platform, since the checkout was your platform’s.
Event
No Connect event routing to worry about here: this event is your platform’s own, so it arrives on any endpoint the same as any other event of yours. That is specific to this shape; a direct charge’s event originates with the account instead.
4

Read the seller's payout back

The seller’s share settles as a transfer from your platform to the seller once the charge settles. List it with kind=payout.
status is paid once settlement has posted the movement, pending before it has. The transfer carries the full "19000.00" the customer paid, because you named your cut with platform_fee. Your "2000.00" settles separately, readable from GET /v1/platform_fees. If you instead fix the seller’s share with transfer_data.amount, the transfer carries only that amount and your platform mints no separate fee record. See Destination charges for both forms.

What happens next

The charge settles into your platform’s pending_balance, then available_balance. The seller’s share moves at the same time, into its own balance. From there the seller withdraws on its own payouts capability. See Payouts.

Next steps