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 WHMCS | Module function | What must happen on the platform | Setting that controls it |
|---|---|---|---|
| New order paid or accepted | CreateAccount | Build the VPS from a plan and template | Automation options on the product's Module Settings tab |
| Invoice overdue | SuspendAccount | Stop the VPS and keep the customer from starting it | Enable Suspension and Suspend Days |
| Overdue invoice paid | UnsuspendAccount | Start it again | Enable Unsuspension |
| Long overdue | TerminateAccount | Destroy the VPS and its disks, free the IP addresses | Enable Termination and Termination Days |
| Upgrade or downgrade order paid | ChangePackage | Resize, for a new product or for changed configurable options | The product's Upgrades tab |
| Client changes the password | ChangePassword | Reset the root password | Shown 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:
| Platform | How it connects | What I confirmed on 12 October 2026 |
|---|---|---|
| Virtualizor (Softaculous) | Server module, downloaded from Virtualizor and uploaded to /modules/servers/virtualizor | The 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, solusvm2vps | The 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 instructions | The 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. |
| SolusIO | The official WHMCS SolusIO addon | A 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 VE | No module in the WHMCS documentation | Third-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:
- 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.
- 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.
- Give the module somewhere to store the VPS ID. Virtualizor's module needs a
vpsidcustom 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 choice | Option type I use | Virtualizor module | SolusVM 2 module |
|---|---|---|---|
| Operating system | Dropdown | Operating System option, or an OS custom field | Operating System |
| Location | Dropdown | Region, set to a server group ID | Location |
| Memory | Dropdown | RAM, in megabytes | Memory |
| Disk | Dropdown | Space, in gigabytes | Disk Space, plus one Additional Disk on KVM |
| vCPU | Dropdown | CPU Cores | VCPU |
| Extra IPv4 | Quantity | Number of IPs | Extra 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.
- Order through the public order form with every operating system and location. Pay with a gateway in test mode.
- 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.
- Suspend from the admin area and confirm the VPS is stopped, not only flagged. Unsuspend it.
- Upgrade one option, then try a disk downgrade and confirm the refusal is clear.
- Terminate and confirm the VPS, its disks and its IP addresses are released.
- Block the API port and repeat an action. The failure should appear under Utilities > Module Queue.
- 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.