Skip to content

Plans

A plan is what you sell. It bundles resource limits, feature flags and one or more prices, and every subscription is an instance of a plan in force for one customer.

Create and edit plans under Admin → Plans, or POST/PATCH /api/v1/plans. A plan belongs to a node pool (which servers its sites may be placed on) and, optionally, a database pool.

Limit Controls
maxSites Sites the subscription may have (0 = unlimited)
maxDomainsPerSite Domains and aliases per site
maxDatabases Databases per subscription
maxCronJobs Cron jobs per subscription
diskMB Disk quota, enforced as a filesystem project quota
inodes Inode quota
bandwidthGB Monthly bandwidth (0 = unmetered)
pooledResources Whether CPU/memory/tasks are shared across the subscription’s sites or set per site
cpuPercent CPU quota, in percent of one core (cgroup CPUQuota)
memoryMB Memory ceiling (cgroup MemoryHigh/MemoryMax)
tasks Process/thread ceiling (cgroup TasksMax)
ioWeight Relative disk I/O priority
phpWorkers Maximum PHP-FPM worker processes
phpMemoryLimitMB Ceiling for the site’s own memory_limit
maxUploadMB Ceiling for PHP upload size
maxExecutionSeconds Ceiling for PHP execution time
phpSleepMinutes Default PHP sleep time; 0 = platform default (15 min), -1 = always on
cacheMB Valkey cache size; 0 = no cache
maxDBConnections Concurrent database connections
cronMinIntervalMinutes Shortest interval allowed between a site’s cron runs

Sensible defaults (used for a new plan): 10 sites, 20 domains per site, 20 databases, 20 cron jobs, 20 GB disk, 500,000 inodes, unmetered bandwidth, pooled resources on, 200% CPU, 2 GB memory, 256 tasks, I/O weight 100, 8 PHP workers, 512 MB PHP memory limit, 256 MB uploads, 120-second execution limit, the platform’s default PHP sleep, 128 MB cache, 40 database connections, 5-minute cron interval floor.

Feature Enables
sshShell SSH/SFTP shell access, not just SFTP
databaseTunnel SSH tunnel access to the site’s database
wordpressTools Managed WordPress updates and the WordPress tools page
customCertificates Uploading a custom TLS certificate for the site’s domains
wafControl Letting the customer change their own site’s WAF mode
phpAlwaysOn Letting the customer keep their site’s PHP always on, and set a shorter sleep time than the plan default
backups Whether the plan includes backups at all
backupRetentionDays Outer bound on snapshot retention (0–3650 days)
phpVersions Which PHP branches the plan’s sites may choose (empty = every supported branch)

Add one price per billing interval:

Field Value
interval month or year
amount / currency Shown in the storefront
providerPriceId The matching Stripe price_... ID

A plan can only be bought online for intervals that have a Stripe price ID attached; see Billing for connecting Stripe. A trialDays value on the plan is applied automatically at checkout.

A plan is active (sold on the storefront), hidden (bought only by staff, for grandfathered or custom deals), or retired (kept for existing subscriptions, no longer sold). sortOrder controls where it appears relative to other plans. A plan can only be deleted once no subscription — active or terminated — still references it; retire it instead to stop selling it.

Plans with the WordPress tools feature get a default WordPress update policy (minor core releases only, daily, spread over a window). Plans can set their own — see WordPress.

A reseller brand’s own staff create and price their own plans, on the platform’s default node pool unless platform staff assign another; only platform staff choose node and database pools for a brand’s plans directly, and only platform staff set prices for plans that bill through the platform’s own Stripe account. See Brands.