The three parties
Every flow on Bachs involves the same three parties.- You, the business. You create products, create checkouts, receive webhooks, hold a balance and withdraw from it.
- Your customer. They pay at checkout with a card, a bank transfer, mobile money or crypto, in their own currency. All payment methods are available through a single checkout, and your customer sees only the methods relevant to their currency and location.
- Bachs. It renders the hosted checkout, processes the payment, holds the funds in your Bachs balance, and sends the money to your payout destination when you ask.
The flow of a payment
A one-time sale moves through five objects: a product, a checkout session, a payment, your balance and a payout.- Product. One thing you sell, from your catalog. A checkout is priced with a
product_cartof catalog products, or with a rawpricingamount when you have no product to reference. - Checkout session. It ties a price to a customer and returns a hosted
checkout_url. Bachs resolves pricing, handles currency conversion, selects payment methods and processes the payment. You send the customer to the URL and listen for the result. - Payment. When the checkout is paid, Bachs redirects the customer to your
success_urland sendscheckout.completedandcollection.succeededto your webhook endpoint. Either can arrive first: fulfil the order on whichever arrives first, once. A free checkout sends onlycheckout.completed. - Balance. Funds collected through Bachs are held in your Bachs balance.
- Payout. A payout moves money from your balance to your own bank account or wallet. You save a destination, get a quote if the currencies differ, create the payout, then track
payout.paidorpayout.failed. An accepted payout is not proof of completion.
Three currency sets
Collection currencies and withdrawal currencies are separate. What you can collect from customers is not the same as what you can withdraw. A third set matters as well: the currencies an account can hold as a balance, which is narrower than either of the other two.
Holding a currency decides what an account settles in, not what it can charge in. A checkout can be priced in any supported currency, held or not, and converts on the way to the balance at the rate quoted on the charge. On the way out, international bank and mobile money withdrawals draw from your USD balance, and a payout in another currency needs a conversion quote, created before you send it, that fixes the source and destination amounts. You are never forced to convert.
Sandbox and live
Bachs runs two separate deployments with the same API. Endpoints, request structure and response shapes are identical; only the base URL and the keys change.
API keys are environment-specific, so a key only works against its own URL. Nothing is shared between the two, not balances, customers, payout destinations, webhook endpoints or API keys. Sandbox payments are simulated, succeed by default, and send the same webhooks as production, so you can test your handler against every outcome before anything real moves.
Sandbox keys are available the moment you sign up. Live keys need account verification, which happens once and covers your product, your identity and your withdrawal account. Most reviews finish within 48 hours. Once you are verified, going live means swapping your API keys.
Read next
Pay-ins and withdrawals
How customers pay you, and how you receive your funds.
Payment statuses
Understand payment charge statuses, what each one means, and how substatuses add detail.
Subscriptions
A subscription is one customer’s ongoing relationship with a recurring product.
Payouts
Understand payouts and choose the dashboard or API flow.

