Create a product
Products are created from your dashboard or via the API. An API creation request needsname 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 itsprice_type. Bachs supports three modes:
fixed(the default): Provideamountas a decimal string; every customer pays that exact amount. You may omitprice_typewhen creating this kind of product.free: No charge. Omitamountor sendnull.custom: The customer decides how much to pay, commonly called pay-what-you-want. Setpreset_amountfor a suggested price shown prefilled at checkout, andminimum_amountand/ormaximum_amountto bound what the customer can enter. Apreset_amountset alongside bounds must fall within them. Setminimum_amountto"0.00"to allow free.
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 withcurrency_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 abilling_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 bothintervalandfrequency; the checkout response usesrecurring.interval_countfor its interval count.intervalisday,week,month, oryear;frequencyis 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.
