What WHMCS does in a hosting business
WHMCS setup has four parts: install the licensed PHP application with ionCube, connect your WHM server, create INR products with GST tax rules, and run the five-minute cron. Orders then provision cPanel accounts and raise invoices. You know it worked when a test order appears in WHM's account list.
WHMCS is billing and automation software for hosting companies running reseller hosting or their own servers. A customer signs up, pays, and an account appears on your cPanel or DirectAdmin server without you creating it by hand. Renewal invoices, suspension for non-payment and support tickets run on the same cron.
- Order form, cart, invoices and renewals in one client area.
- Provisioning through WHM, so a paid order creates the cPanel account.
- Tax rules, so Indian invoices can carry GST correctly.
- Support tickets and knowledgebase, separate from your personal inbox.
Before you install: licence, PHP and database
WHMCS is commercial software. You buy a licence from WHMCS directly and enter the key during installation, and the licence is tied to the server. WebJi® does not sell WHMCS licences. Pricing and editions sit on the WHMCS site and change between releases, so confirm the cost there before you pay rather than relying on a figure in a tutorial.
| Requirement | What to have ready |
|---|---|
| PHP | PHP 8.x with the ionCube Loader enabled and the required extensions (curl, gd, mbstring, mysqli, openssl) |
| Database | A dedicated MySQL 8 or MariaDB database and user, not the hosting account's main database |
| Server | A VPS or reseller account with a dedicated document root, an SSL certificate and SSH or SFTP access |
| Licence | A WHMCS licence key, issued for the IP or hostname the installation will use |
On a WebJi® VPS or cPanel plan you get the dedicated document root and SSH access this needs. ionCube is the usual blocker. Check with php -m | grep ioncube before you upload anything; if it is missing, install the loader for your PHP version and restart PHP-FPM.
Install WHMCS step by step
The supported route is the browser installer, with files uploaded to a dedicated directory. Version 9.x is the current documentation line.
- Download the full release package from download.whmcs.com using your account, and unzip it locally.
- Upload the contents to your document root with SFTP or scp, keeping the directory structure. Do not upload the zip itself.
- Create an empty database and a user with full rights on that database only. Note the host, name, user and password.
- Set the document root to the folder holding index.php, and give the configuration file write permission for the installer only.
- Visit https://yourdomain.com/install and follow the wizard: licence key, database details, admin user, admin folder name.
- When it finishes, remove write permission and delete the install directory. The admin login stays on the custom folder you chose.
You know it worked when the admin area loads over HTTPS, the dashboard shows the WHMCS version, and the licence status reads active. If the installer says the licence is invalid, the server IP does not match the licence yet; reissue or re-check the key before changing any PHP setting.
Connect WHM so orders create accounts
Provisioning is a server record plus a product that points at it. On a cPanel hosting account you will also need WHM access, which shared plans do not include. Without both, the order completes and no account is created.
- In WHM, create an API token for a reseller or root user, scoped to account functions. An API token is safer than storing the password.
- In WHMCS open Configuration, then System Settings, then Servers, and add a server: hostname, WHM username, API token, and tick the cPanel module.
- Create a server group and add that server to it, so products can target the group rather than one machine.
- Open Configuration, then System Settings, then Products/Services, create a product group and a product, and set the module to cPanel with the server group selected.
- Place a test order from the client area with a real domain you control, and pay it through a test gateway or mark it paid manually.
- Check WHM, then List Accounts. The new account should be listed with the package you mapped to the product.
If the order stays pending, read the module log at Utilities, then Logs, then Module Log. It names the WHM API call and the exact error, which is faster than guessing at permissions.
Price products in INR and apply GST
Indian hosting invoices need the right currency and a tax rule that matches the customer's state. WHMCS handles both, but neither is on by default.
- Open Configuration, then System Settings, then Currencies, add INR with the ₹ prefix, and set it as the default currency.
- Under Tax Rules, create a rule at 18% for India, and add a state-level override if you need to separate intra-state CGST/SGST from inter-state IGST.
- In the product's Pricing tab, tick the tax rule and enter monthly, quarterly and annual prices. Leave the setup fee at zero unless you charge one.
- Confirm the client area shows the tax line before checkout, not after the invoice is generated.
Keep prices exclusive of GST in the product field if your invoices add tax on top; mixing inclusive and exclusive pricing across products is the fastest way to an audit question.
Payment gateways that work for an Indian host
WHMCS ships with Stripe, PayPal and several international gateways. Razorpay and most Indian UPI gateways arrive as third-party modules, so budget time for installing and testing one.
Test in the gateway's sandbox with a real order before you take live money. Confirm three things: the invoice marks paid automatically, the order moves to active, and the provisioning call fires. A gateway that takes payment but never activates the order is worse than no gateway.
Prove the automation with the cron job
Invoices, suspensions and provisioning all depend on one cron. Add it for the account that owns the files, every five minutes.
The command is php -q /home/USER/public_html/whmcs/crons/cron.php, adjusted to your path. Use the PHP binary that has ionCube, which is often /usr/local/bin/php or the versioned path, not plain php.
You know it worked when Configuration, then System Settings, then Automation Settings shows a last cron run within the past five minutes and no failed tasks. If it never updates, run the command by hand over SSH and read the error; a wrong PHP path or a permission problem on the attachments and downloads folders is the usual cause.
Frequently Asked Questions
How do I set up WHMCS from scratch?
Buy a licence from WHMCS, upload the release to a PHP 8.x server with ionCube, create a database, and run the browser installer. Then add your WHM server with an API token, create products, set INR and GST, and add the five-minute cron. Test with a real order.
How much does a WHMCS licence cost?
The licence is sold by WHMCS, not by WebJi®, and the price depends on the edition and term at the time you buy. Check the current figure on the WHMCS site before payment. Treat any number in an older tutorial as out of date.
How does WHMCS create cPanel accounts automatically?
A server record holds the WHM hostname and API token, and a product points at that server group with the cPanel module selected. When an order is paid, the cron calls the WHM API and creates the account. The module log shows each call.
Which payment gateways work with WHMCS in India?
Stripe and PayPal are included. Razorpay, PayU and most UPI gateways need a third-party WHMCS module installed and tested. Confirm that a sandbox payment marks the invoice paid and activates the order before going live.
Can WHMCS generate GST invoices in INR?
Yes. Add INR as the default currency, create an 18% tax rule for India, and attach it to each product. Set product prices exclusive of tax if your invoices should show GST on top. Check one generated invoice before you sell.
Why is my WHMCS cron not running?
Either the path or the PHP binary is wrong. Run the cron command by hand over SSH and read the output. Use a PHP binary with ionCube, check that attachments and downloads are writable, and confirm the automation status page updates within five minutes.

