Skip to content

Products and pricing Admin ​

Opening a product that does not exist returns PRODUCT_NOT_FOUND. Ordering a product that is not Active returns PRODUCT_NOT_AVAILABLE. If no base currency has been set up, price lookups return BASE_CURRENCY_NOT_CONFIGURED.

How products are organised ​

Products are grouped under product groups. Each group has a name, a description and an Active/Inactive status. There is no screen to create or edit product groups yet; groups are created by the initial data migration and seeded on a fresh install.

Products inside a group appear together on the storefront.

The Products screen ​

Go to Settings → Products. Subtitle: "Manage hosting plans and services available for purchase."

Columns: Name, Group, Type, Monthly price, Annual price (both in the base currency), a "+" count of other currencies the product is priced in, and Status.

Product types ​

TypeWhat it represents
Shared HostingShared web hosting plan
VPSVirtual private server
DedicatedDedicated server
EmailMailboxes and mail hosting
Add-onAn extra attached to another service
BackupBackup storage and restore
DigitalA licence, credit pack or digital good delivered by a fulfilment plugin
OtherAny other or custom service
Domain and SSL are not offered as type cards on the create form. Domain pricing is configured on the TLD Pricing screen and SSL products are created through the Other type.

Create a product ​

Go to Settings → Products → Create Product and fill in the form.

  1. Product Type — choose the type card that matches the service.

  2. Product Group — select the group this product belongs to. If the group does not exist yet, it can be created through the API for now (PRODUCT_GROUP_NOT_FOUND).

  3. Product Name — the name shown to customers.

  4. Slug (URL) — the URL path for the product page on the storefront (e.g. /products/starter).

  5. Package Name — the hosting package used when an account is created on the server. Required for provisioned types; leave blank for Add-on, Digital and Other (PRODUCT_PACKAGE_MISSING if the provisioner expects it but it is missing).

  6. Server Group — the group of servers the provisioner may use. "None (auto-select by module)" lets the module choose. See Servers and provisioning.

  7. Description — a short description shown on the storefront.

  8. Sort order — position inside the group, lowest first. Products with the same number are sorted by name.

  9. Recommended plan — tick to show a "Recommended" badge on the storefront. Only one product per group can be recommended; saving this clears the badge from the others.

  10. SKU — optional unique code used by fulfilment plugins to identify the product (letters, digits, hyphens, underscores or dots; at most 64 characters).

  11. Metadata — optional JSON object passed to the fulfilment plugin (at most 16 KB).

  12. Grace period (days) — days a service stays usable after its due date before it is suspended.

  13. Hidden — tick to set the product Inactive and hide it from the order form. An inactive product cannot be ordered (PRODUCT_NOT_AVAILABLE).

  14. Click Create Product.

Billing cycles and prices per currency ​

The pricing grid is part of the product form. It has one row per enabled currency. Each row shows:

ColumnMeaning
EnabledWhether this currency is offered for this product
CurrencyCurrency code; the base currency is tagged "Base"
MonthlyPrice per month
QuarterlyPrice per three months
Semi-annualPrice per six months
AnnualPrice per year
BiennialPrice per two years
A blank price makes the product unsellable on that cycle in that currency. Attempting to order such a product returns ORDER_PRODUCT_PRICE_UNAVAILABLE.

There is no setup fee field. Clients billed in a non-base currency pay the price you enter for that currency directly — exchange rates are not applied to product prices.

Update Product Prices on the Currencies screen opens a picker where you choose which currencies to recalculate. The selected currencies have their product prices overwritten by converting from the base currency at the stored exchange rate.

What you can change after creation ​

You can edit the name, description, slug, package name, sort order, recommended flag, hidden flag and pricing at any time. The product type and group cannot be changed after the product is created.

The plan specification ​

In the product list, open the row actions menu for a product and click Edit specification to open the Specification dialog.

  • Add a line — enter a Feature name and a value.
  • Remove a line — click the remove button on the row.

Feature names line up across products in a comparison table, so use the same spelling for the same feature across products. A name can only appear once per product; a duplicate is refused (PRODUCT_FEATURE_LABEL_DUPLICATE). The comparison table on the storefront stays hidden until at least one product in the group has a specification line.

  • Recommended — only one product per group can carry the Recommended badge. Setting it on a product clears it from all others in the same group.
  • Hidden — sets the product Inactive and removes it from the storefront order form. An inactive product cannot be ordered by anyone (PRODUCT_NOT_AVAILABLE).

Not available yet ​

Service Addons and Promotions are placeholder screens and are not functional.

Was this page helpful?

Released under the AGPL-3.0 License.