Written so you never need to open a support ticket. Every step says what to click, what you should see afterwards, and what to do if you see something else.
Hetzner Cloud Manager is two modules that work together:
- a provisioning (server) module that creates servers and runs the per-service dashboard your customers use, and
- an addon module that gives you a central panel for API accounts, servers, products and Project-wide resources.
Install both. The addon will not activate without the provisioning module.
Before you start
| You need | Notes |
|---|---|
| WHMCS 9.x or newer | Older versions are supported, if satisfied with PHP and Ioncube requirements. |
| PHP 8.2 or newer | With cURL, JSON and OpenSSL enabled — a standard WHMCS host has these. |
| Ioncube | Ioncube v14 at minimum. |
| Outbound HTTPS | To api.hetzner.cloud and to the licensing server. |
| A Hetzner Cloud account | With at least one Project. |
| Module license key | Supplied with your purchase. |
Step 1 — Upload the files
Upload these two folders into your WHMCS installation, keeping the names exactly as they are:
/modules/servers/hetzner_cloud_vps/
/modules/addons/hetzner_cloud_vps/
Check it worked: browse to System Settings → Products/Services → Servers → Add New Server. "Hetzner Cloud Manager" should appear in the Module dropdown.
"Hetzner Cloud Manager" is not in the list The upload is incomplete, or a folder was renamed. The folder name is part of how WHMCS finds the code —
hetzner_cloud_vpscannot becomehetzner-cloud-vpsorhetznercloud. Re-upload and confirmmodules/servers/hetzner_cloud_vps/andmodules/addons/hetzner_cloud_vps/directory and its content exists.
Step 2 — Activate the addon
System Settings → Addon Modules → find Hetzner Cloud Manager → Activate.
Then tick the admin roles that should see it and Save Changes.
Check it worked: an Addons → Hetzner Cloud Manager menu item appears.
"The Hetzner Cloud Manager provisioning (server) module must be installed before this addon can be activated."
"Activation failed: …" The database user could not create the module's tables. Give it
CREATEpermission on the WHMCS database and activate again.
Step 3 — Enter your license key
Open Addons → Hetzner Cloud Manager. Until the key is accepted, the License page is the only page you can reach — this is normal.
Paste your key and click Activate.
Check it worked: the status reads Active and the navigation appears.
"License verification could not be completed. Please try again." Check for a copied space at either end. The key is tied to the domain and directory WHMCS runs in; if you have moved or renamed the installation, ask for a licence reissue.
"Unable to reach the license server. Check outbound HTTPS connectivity from this server, then try again." Your host is blocking outbound HTTPS.
Step 4 — Connect your Hetzner Cloud Project
4a. Create the API token in Hetzner
- Sign in at console.hetzner.cloud.
- Choose the Project you want WHMCS to provision into.
- Security → API Tokens → Generate API Token.
- Give it a description and choose Read & Write.
- Copy the token now — Hetzner shows it once.
Read-only will not work. The module has to create and delete servers.
4b. Add it to WHMCS
Addons → Hetzner Cloud Manager → Accounts → Add Account:
| Field | What to enter |
|---|---|
| Name | Anything recognisable, e.g. Production — Nuremberg. This is what you pick in product settings. |
| API Token | The token from 4a. |
| Active | Leave ticked. |
Save, then click Test Connection on the new row.
Check it worked: a green success message.
"Unauthorized" The token was mistyped, is read-only, or has been revoked in Hetzner. Create a fresh one and paste it over the old one.
"Unable to reach Hetzner Cloud API" Your host cannot reach
api.hetzner.cloud. Ask them to allow outbound HTTPS.
Add one account per Hetzner Project. Tokens live in the module's own table and are never stored on a WHMCS server record.
How the token is protected. It is stored in an encrypted format within WHMCS. You will never see it again in full after saving — that is deliberate. Keep your own copy in a safe place at your own risk; if you lose it, generate a fresh one in Hetzner and paste it over the old one.
To change a token later: open the account row, paste the new token, save. Leaving the field blank keeps the existing one — blank never means "erase".
Isolating customers: a Hetzner token can reach everything in its Project. If you need hard separation between customers, use a separate Project — and therefore a separate account row — for each.
Step 5 — Create your first product
The fast way — import from the catalog
Addons → Hetzner Cloud Manager → Products. Pick your account and location. You will see every server type Hetzner sells there, with its monthly price, included traffic and overage rate.
Click Import as Product on the plan you want, choose a product group, and confirm. WHMCS creates the product, prices it, and sets up its options.
The product description is filled in for you — vCPU, RAM, disk and the plan's included traffic — but only when it is empty, so anything you write is never overwritten.
The manual way
System Settings → Products/Services → Create a New Product → set Module Settings → Hetzner Cloud Manager → fill in the sections below → Save Changes.
What the settings mean
| Section | Setting | What it does |
|---|---|---|
| Provisioning | Account | Which Hetzner Project this product provisions into. |
| Location | Where new servers are created. Save, then reopen the tab so Server Type reloads for that location. | |
| Server Type | The plan. Price and availability differ by location. | |
| Operating System | The default image, used when the customer is not offered a choice. | |
| Pricing | Price Markup (%) | Added to the provider price when pricing is written. |
| Client Area Features | one switch each | Every tab and button. See Step 7. |
| (every setting) | ⓘ | Hover the information icon beside any setting for what it does and when to change it. |
| Provisioning Defaults | Hostname Prefix | Names new servers <prefix>-<location>-<service id>. Leave blank to use the domain the customer entered on the order. |
| Placement Group | Places new servers in a Hetzner placement group. Create groups in the addon's Resources page; they appear here automatically. | |
| Volume Filesystem | xfs or ext4, written to an ordered volume before it is attached. |
|
| Private Network Range | CIDR used when an order includes a private network. Default 10.0.0.0/16; a /24 subnet is created inside it. |
|
| Reverse DNS Domain | Builds static.<reversed-ip>.clients.<domain> for the new server's IPv4 and any floating IP. Leave blank to skip. |
|
| Lifecycle | On Suspend | Power off (hard) · Shutdown (ACPI, guest may refuse) · Leave running. |
| On Terminate | Delete the server · Power off and keep the server. | |
| Plan Change Billing | Leave it to WHMCS (standard behaviour) · Charge the difference for the remaining days. | |
| Paid Add-ons | Snapshots · Backups · Volumes · Floating IPs · Private Networks | These cost money at Hetzner, so they stay off until you switch them on. |
The Server Type dropdown is empty Save the Location first, then reopen the tab. The list is fetched for the saved location, not the one you just picked.
A dropdown says "Select an Account above and save to load images" Choose an account, save, and reopen.