Skip to main content
A product in Bachs is a billable item your customers can purchase. You define the name, pricing, and currencies once; Bachs handles the rest at checkout.

Create a product

Products are created from your dashboard or via the API. An API creation request needs name and a price object with currency. If you omit price_type, Bachs uses fixed; fixed pricing also needs amount as a decimal string. Choose free or custom explicitly for those modes. An omitted or null fixed-price amount is invalid. For example, this creates a fixed-price product using the default price_type:

Name

The title of your product. This is shown to customers at checkout and appears across your dashboard and reports.

Pricing

A product’s pricing is set by its price_type. Bachs supports three modes:
  • fixed (the default): Provide amount as a decimal string; every customer pays that exact amount. You may omit price_type when creating this kind of product.
  • free: No charge. Omit amount or send null.
  • custom: The customer decides how much to pay, commonly called pay-what-you-want. Set preset_amount for a suggested price shown prefilled at checkout, and minimum_amount and/or maximum_amount to bound what the customer can enter. A preset_amount set alongside bounds must fall within them. Set minimum_amount to "0.00" to allow free.
preset_amount, minimum_amount, and maximum_amount are for custom pricing. A non-null amount is for fixed pricing; omit it or send null for free and custom.

Amount

Amounts are decimal strings in the currency: "29.00" for $29.00, "75000.00" for ₦75,000.00. Always send a string, never a number, and always two decimal places. This applies to amount, minimum_amount, maximum_amount, and any currency_options amounts.

Currency

Every product has a primary currency, which is the default currency your customers are charged in. It can be any supported currency, including one your account does not hold a balance in. See Charge in any currency for the full list. The customer’s payment currency, your Bachs balance currency and your payout destination currency are separate. Balances can be held in USD or NGN; you can pay out to your own accounts in the supported payout currencies. International bank and mobile money payouts use your USD balance, with a quote when the destination currency differs. See Supported currencies.

Local-currency pricing

By default customers pay in your product’s primary currency. You can also set exact prices per currency with currency_options, or, on a USD-priced product, let adaptive pricing auto-convert at checkout so customers pay in their own local currency. See Sell in local currencies for the full setup and the list of supported currencies.

Recurring pricing

Give a product a billing_cycle to make it recurring. A recurring product is billed on a schedule through a subscription; a product with no billing_cycle is a one-time purchase.
  • billing_cycle: the cadence. Product creation requires both interval and frequency; the checkout response uses recurring.interval_count for its interval count. interval is day, week, month, or year; frequency is the number of intervals per cycle ({ "interval": "month", "frequency": 3 } = every three months).
  • trial_period (optional), a free trial before the first charge, expressed as the same cadence shape. Only meaningful on a recurring product.
A product’s billing_cycle is fixed once set. You can add a cadence to a one-time product, but you can’t change an existing one; create a new product for a different cadence. This protects existing subscribers from surprise changes.
Completing a checkout for a recurring product creates the subscription and bills the first cycle. Subscriptions are USD card only today.

Update a product

You can update a product’s name, description, and price at any time.

Archive a product

Products on Bachs cannot be deleted. Instead you can archive a product to stop it from being available for new purchases. Archiving does not affect existing customers. They keep their access. You can unarchive a product at any time from the dashboard or via the API.