What you’ll build
A checkout that belongs to an account. The account is the merchant of record, the sale lands in its balance, and your platform fee moves up to you as part of settling the charge. By the end you’ll have created the checkout as the account, sent the customer to it, confirmed the payment with a webhook, and read your cut back.When to use it
- The account transacts with its own customers, not yours.
- The customer may never need to know your platform exists.
- Each charge belongs to exactly one account.
The flow
1
Create the checkout as the account
Send
X-Account-Id with the account’s id. Its presence, on its own, is what makes this a direct charge. Add platform_fee for your cut, in the base currency of the sale, taken from the account’s proceeds.platform_fee carries the amount because there is one; a checkout with none returns "platform_fee": null rather than "0.00". The key is always present.2
Send the customer to the checkout
Redirect the customer to
checkout_url. Bachs hosts the payment page and collects the charge against the account.3
Confirm with the webhook
Bachs sends checkout.completed once the customer finishes. Check Use
data.payment_status: paid means a charge was made.A direct charge’s event originates with the account. Your platform receives it only on an endpoint with event_source set to connect or all; the default is account. See Connect events.Event
account to attribute the event to the account that generated it; it is the field added specifically for that. See checkout.completed for the full payload.4
Read your cut back
Your platform fee is not a transfer: it settles as its own record. Read it from
GET /v1/platform_fees.collected_from is the account whose sale funded the fee, and earned_by is your platform. amount and currency are the fee as struck: the currency the checkout was created in, before any conversion. See Platform fees.With this shape
- The charge lands in the account’s balance, not yours.
- Your platform fee moves to your balance on the account’s settlement schedule, never sooner. See Platform fees.
- A refund debits the account’s balance.
- A lost dispute drains the account’s available balance, then its pending balance. Any amount still owed drives the available balance negative: that negative balance is the debt, and it heals as the account’s own future settlement credits land. A dispute also debits a flat dispute fee when it opens, whether it is later won or lost. See Disputes.
- The account needs the capability for every payment method it plans to accept, active before a customer can pay it that way:
card_collection,ngn_card_collection,bank_transfer,mobile_money,crypto. See Capabilities.
Errors
Direct-charge errors return the standard error envelope.
A charge priced in a currency different from the one it settles in still settles: your platform’s cut is computed in the currency the sale was priced in. See Platform fees.

