Plans & Products

How to structure your billing catalog with categories, products, pricing tiers, and resource limits.

The billing catalog is a three-level hierarchy: categories contain products, and products contain pricing tiers. Everything is managed in Admin → Billing → Catalog.

Internally, each product has a single underlying plan record that holds its resource limits, and that plan owns the pricing tiers — but the admin UI only exposes categories, products, and pricing tiers, so this is transparent in day-to-day use.

Categories

A category is the top-level grouping visible on the /billing page.

FieldDescription
NameDisplay name shown in the category grid
DescriptionShort text shown below the name
IconOptional image shown in the category card
BannerOptional wide image shown at the top of the category detail page

Category detail pages are served at /billing/[slug] where the slug is derived from the category name.

Products

Products live inside a category and represent a distinct hosting tier or offering.

FieldDescription
NameDisplay name shown in the product list
DescriptionOptional detail text
FeaturedHighlighted visually in the product grid (only one featured product per category)

Pricing tiers

Each product can have multiple pricing tiers — one per billing duration. Users pick a duration during the purchase wizard.

DurationPeriod
7day7 days
1month1 month
3months3 months
6months6 months
1year1 year

The price is stored in the instance's default currency (set in Admin → Billing → Settings).

Resource limits

Resource limits are defined once per product, not per pricing tier — every duration of a product provisions the same CPU, RAM, disk, and other limits; only the price and billing period change between tiers.

LimitUnitDescription
CPUcoresApplied to the server on purchase
RAMGBApplied to the server on purchase
DiskGBApplied to the server on purchase
BackupscountStored on the plan, but not currently enforced — the server gets no backup limit
AllocationscountStored on the plan and used for the sold-out/capacity check, but the server is only ever given the single allocation picked during purchase
DatabasescountStored on the plan, but not currently enforced — the server gets no database limit
Allowed eggsegg IDsIf set, restricts which server types the user can select
Node restrictionsnode IDsIf set, limits which nodes the server may be placed on

Capacity is checked at purchase time using a soft check against RAM and disk (not CPU) — nodes can be configured to allow overallocation up to a headroom percentage.

Uploading images

Category icons and banner images are uploaded via the panel's file API. When using the admin UI, the upload is handled for you. If you're managing the catalog via API, send a multipart/form-data POST to:

POST /api/files/upload/billing-image

The response returns the file URL to store in the category record.

On this page