Skip to main content
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 if you run a platform: the currencies an account can hold as a balance. It is narrower than either list here. See Balance currencies.

Payment Collection

Card Payments

Cards are charged in USD or in NGN. Visa, Mastercard, and all major card networks are supported, along with Apple Pay and Google Pay where available. A card charge in USD settles to your Bachs balance in USD, whatever country the cardholder is in.

Fiat

Bank transfer collects in NGN only. Every other local currency here is collected through mobile money.

Crypto

Crypto is collected on the networks listed below. The token and network together decide the code you send.
To fetch the live list of supported collection currencies, call GET /v1/currencies/supported. The response is grouped by fiat and crypto.

Balance Currencies

A balance currency is one you can hold money in. It is a narrower set than what you can collect, because collecting in a currency does not mean we keep a balance in it: a payment in a currency you do not hold is converted into one you do. USD is always held and cannot be turned off. Any other currency here has to be enabled on the account before it can be used. 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. This holds for one-time and recurring (subscription) checkouts alike: a subscription priced in a currency you do not hold still bills each renewal in that currency and settles the proceeds as your settlement currency (USD unless you hold the priced one). A subscription keeps its price currency for its whole life, since renewals run months later without the buyer present. This matters most if you run a platform. A new account holds only USD, so a connected account that sells subscriptions in its own market has to be given that currency first. See Currencies the account holds for the call that does it, and Charge in any currency for how pricing and settlement differ.
Collecting in a currency that is not on this list still works. The payment converts into a currency you hold, at the rate quoted on the charge. See How Conversion Works.

Withdrawals

Global payouts are available to all Bachs users. Account verification, destination approval and sufficient available funds are still required.

Fiat

EUR destinations include France, Germany, Spain, Italy and the Netherlands. See Supported currencies for the country list, your bank or wallet details and funding requirements. International bank and mobile money withdrawals draw from your USD balance. A payout in another currency needs a conversion quote. These destination currencies do not add currencies you can hold as a balance; see Balance currencies. SWIFT withdrawals are not currently offered. A BIC required for a SEPA destination identifies the bank; it does not select a SWIFT payout.

Crypto

GET /v1/currencies/payout-supported lists configured withdrawal currencies, grouped by fiat and crypto. A currency appearing in the response does not mean every withdrawal method supports it. Use a supported destination type and check is_usable before withdrawing.

How Conversion Works

For a cross-currency payout, create a quote before sending the payout. The quote shows from_currency, to_currency, from_amount, to_amount, exchange_rate and expires_at. from_amount is the source amount to convert; to_amount is the amount payable in the destination currency. The withdrawal fee is added to the source amount, so your balance must cover both. The quote request’s amount is in the source currency. Send the quote’s quote_id with the registered destination ID and omit amount from the payout request. For a same-currency payout, send amount without a quote. That amount is what your destination receives. Reconcile the payout using total_debited, which includes the fee. See Overview and Fees.

Create Payout

Initiate a withdrawal to a configured payout destination.

Withdrawal Webhook Events

Receive real-time updates on withdrawal status.