Skip to content
Shahid Malla

WHMCS VPS and Cloud Server Provisioning: Modules, Options, Lifecycle

How WHMCS VPS provisioning works: the module functions behind create, suspend, terminate and upgrade, the Virtualizor and SolusVM modules, configurable options for resources and templates, and a lifecycle test.

· Published · Updated · 7 min read
On this page (8 sections)

WHMCS VPS and cloud server provisioning needs three pieces: a server module that calls your virtualization platform's API, a Server/VPS product mapped to a plan on that platform, and configurable options for what the customer chooses, such as the operating system, location or memory. WHMCS then drives create, suspend, unsuspend, terminate and upgrade through that module.

How does WHMCS run the lifecycle of a VPS?

WHMCS decides when something must happen, and the module does it on the platform. Each event calls a named module function, listed on the supported functions page, and the timing comes from Automation Settings and the product's own settings.

Event in WHMCSModule functionWhat must happen on the platformSetting that controls it
New order paid or acceptedCreateAccountBuild the VPS from a plan and templateAutomation options on the product's Module Settings tab
Invoice overdueSuspendAccountStop the VPS and keep the customer from starting itEnable Suspension and Suspend Days
Overdue invoice paidUnsuspendAccountStart it againEnable Unsuspension
Long overdueTerminateAccountDestroy the VPS and its disks, free the IP addressesEnable Termination and Termination Days
Upgrade or downgrade order paidChangePackageResize, for a new product or for changed configurable optionsThe product's Upgrades tab
Client changes the passwordChangePasswordReset the root passwordShown only if the module defines it and the service is active

One detail matters for support. Automation Settings says a service you suspended by hand with a custom reason, such as Awaiting ID Verification, is not unsuspended automatically when the customer pays.

Which provisioning module fits your virtualization platform?

Use the module your platform's vendor publishes, and confirm it supports your WHMCS version before you build anything. These are the ones I checked today:

PlatformHow it connectsWhat I confirmed on 12 October 2026
Virtualizor (Softaculous)Server module, downloaded from Virtualizor and uploaded to /modules/servers/virtualizorThe WHMCS documentation lists create, suspend, unsuspend, terminate, change package, change password, usage updates and a client area link, plus start, reboot, power off, stop and VNC. The Virtualizor WHMCS module page says to add only the master server and that Virtualizor uses ports 4081 to 4085. It says "Compatible with WHMCS 8", so ask about 9.0.
SolusVM 2 (prepaid)The SolusVM WHMCS VPS pre-paid provisioning module, solusvm2vpsThe module overview covers provisioning, power actions, reinstalls, upgrades and downgrades, SSH keys and cloud-init. Its requirements page lists WHMCS 7.0 or higher and PHP 7.4.x, while WHMCS 9.0 requires PHP 8.2 or higher. Ask the vendor which PHP versions it supports now.
SolusVM (version 1)Server module bought and installed following SolusVM's instructionsThe WHMCS page ticks create, suspend, unsuspend and terminate, but not change package, change password or usage updates, although its description mentions upgrades. Test before you sell upgrades. Not supported on WHMCS Cloud.
SolusIOThe official WHMCS SolusIO addonA different model: post-pay. Customers sign up and manage VMs in the SolusIO panel, uptime is billed at an hourly token rate, and WHMCS invoices the usage.
Proxmox VENo module in the WHMCS documentationThird-party or custom. My WHMCS Proxmox integration guide covers it.

Reselling a public cloud provider's servers works the same way on the WHMCS side, through a third-party or custom server module that calls the provider's API. I name no cloud modules here because I did not review any for this guide.

How do you connect the platform and spread VPS across nodes?

Add the platform at Configuration > System Settings > Servers with Add New Server, choose the module, enter the host and API credentials, and click Test Connection. WHMCS offers a Continue button when the test fails. Do not use it for a VPS platform; fix the firewall, port or credentials first.

For several nodes, either the platform or WHMCS chooses. Virtualizor's module takes a default node or node group in the product's Module Settings and can let the customer pick a region through a configurable option. Where WHMCS chooses, put servers in a server group and pick a fill type: add to the least full server, measured against each server's Maximum No. of Accounts, or fill the default server until it is full.

How do you set up a VPS product in WHMCS?

Create it at Configuration > System Settings > Products/Services with the Server/VPS type, which asks the customer for a hostname, root password and nameserver prefixes at order time. Then:

  1. On Module Settings, choose the module and map the product to a plan on the platform. Virtualizor asks for the server, the virtualization type, the plan and the default node or group, and loads the plan list only after you save the first two.
  2. Choose when the product is set up. WHMCS offers on order, on first payment, on manual acceptance, or never. I use first payment, and manual acceptance for new customers when abuse is a concern.
  3. Give the module somewhere to store the VPS ID. Virtualizor's module needs a vpsid custom field. A custom module can use service properties: $params['model']->serviceProperties->save([...]) writes to custom fields, and names such as Dedicated IP and Username go to the core service fields.

How do configurable options set VPS resources and OS templates?

Each resource the customer can choose is a configurable option, and the module reads it by name. The names and units come from the module's documentation, not from WHMCS. My WHMCS configurable options guide covers option types, pricing and the value|label format.

Customer choiceOption type I useVirtualizor moduleSolusVM 2 module
Operating systemDropdownOperating System option, or an OS custom fieldOperating System
LocationDropdownRegion, set to a server group IDLocation
MemoryDropdownRAM, in megabytesMemory
DiskDropdownSpace, in gigabytesDisk Space, plus one Additional Disk on KVM
vCPUDropdownCPU CoresVCPU
Extra IPv4QuantityNumber of IPsExtra IP

Two module behaviors are worth knowing. In Virtualizor, a configurable option value replaces the plan's value, while options named additional_ram, additional_space and similar add to it. SolusVM 2's Application option works only for reinstalls, not for new orders.

Templates live on the platform, and the WHMCS list must match it. Virtualizor's OS custom field takes template names exactly as shown under Media > OS Templates in its admin panel, not file names, and an OS must come from either that field or a configurable option. When you retire a template, hide the sub-option in WHMCS instead of deleting it, so existing services keep their value.

How do VPS upgrades and downgrades reach the server?

List the target products on the product's Upgrades tab and tick Configurable Options. When the upgrade order is paid, WHMCS calls ChangePackage, which runs for both product and option changes. The customer is credited for the unused part of the cycle and charged the new price for the rest, and the next due date stays the same.

The module must refuse what the platform cannot do live, such as shrinking a disk, and return a clear error. To stop an impossible product change before checkout, the ShoppingCartValidateUpgrade hook receives the service ID and the target product ID and can return error messages. Virtualizor also warns against changing WHMCS-created VMs in its own panel, for example adding disks there, because the two systems drift apart.

How do you test the full VPS lifecycle before selling?

Run every function in the lifecycle table on a staging copy of WHMCS against a test node.

  1. Order through the public order form with every operating system and location. Pay with a gateway in test mode.
  2. Read the Module Log at Configuration > System Logs. Confirm the VPS exists with the right plan, template, location and IP address, and log in with the credentials WHMCS sent.
  3. Suspend from the admin area and confirm the VPS is stopped, not only flagged. Unsuspend it.
  4. Upgrade one option, then try a disk downgrade and confirm the refusal is clear.
  5. Terminate and confirm the VPS, its disks and its IP addresses are released.
  6. Block the API port and repeat an action. The failure should appear under Utilities > Module Queue.
  7. Set a short Suspend Days value on staging and let a test invoice go overdue, so the cron path runs once.

What are the limits and risks of selling VPS through WHMCS?

WHMCS only sends commands. Capacity, IP pools, templates, backups and abuse handling stay your work on the platform.

  • Failed actions wait for a person. The Module Queue documentation says WHMCS will not retry a failed action automatically. Someone has to check the queue and click Retry.
  • Upgrades of WHMCS itself. WHMCS 9.0 requires PHP 8.2 or higher. A module whose vendor lists older PHP or WHMCS versions can block your upgrade, so ask before you plan one. My WHMCS upgrade guide has the checklist.
  • Billing model. Prepaid monthly VPS and post-pay usage billing are different products. Choose one before you choose a module.
  • No module fits. Then the answer is a custom server module, described in my provisioning module guide.

If you need a module written or reviewed, I do that as WHMCS custom module development, and the platform side as hosting infrastructure work.

Last reviewed 12 October 2026. Disclosure: I sell WHMCS and web development work, including custom provisioning modules, so I am not neutral. I am CTO at ElySpace, a freelance developer for Marmaids LLC, and founder of WHMCSPilot and MagizAI. Module details come from the WHMCS 9.0 documentation and the Virtualizor and SolusVM documentation as I read them on that date.

Share this article

Shahid Malla

Written by

Shahid Malla

Freelance WHMCS developer and web designer with 13+ years of client work. CTO at ElySpace, freelance developer for Marmaids LLC, and founder of WHMCSPilot and MagizAI.

Got a project like this?

Tell me what you need and I will send a written quote within one business day.