Installation - Hetzner Storage Box for WHMCS
Requirements
- WHMCS 8.x or later
- PHP 8.2+
- cURL extension enabled
- Ioncube v14 and above
- A Hetzner account with Storage Box API access (Bearer token, generated from the Hetzner Cloud Console)
1. Upload
Copy the contents of the deliverable zip's modules/ folder into your WHMCS root, merging with the existing modules/ directory:
modules/servers/hetzner_storage_box/
modules/addons/hetzner_storage_box/
Both modules must be present on disk before the next step — the addon's activation check refuses to run until it finds the provisioning module's classes.
2. Activate the addon
WHMCS Admin → Configuration → Addon Modules → find Hetzner Storage Box Manager → Activate.
Activation creates the shared database tables used by both modules. No separate activation step exists for the provisioning module — WHMCS provisioning modules are just files; they become available the moment you select them on a product.
After activating, grant the addon permission to the admin roles that should manage it (Configuration → Addon Modules → the same row → Configure/Access Control), then open it from the admin sidebar.
3. Enter your license key
The addon is gated behind a license key, Open Addons → Storage Box Manager → License, paste the key issued at purchase, and save. Nothing else in the addon is reachable until this shows Active.
4. Add an API account
Addons → Storage Box Manager → Accounts → add a name and the Hetzner API Bearer token for the Hetzner customer account you want to provision from. You can add more than one account (e.g. separate Hetzner customer accounts for different resellers) — each WHMCS product picks one via its own config option.
Use Test on the row to confirm the token works before assigning it to a live product.
5. Create or configure a product
WHMCS Admin → Products/Services → Products/Services → create a new product (or edit an existing one) with Module Name set to Hetzner Storage Box Manager.
On the Module Settings tab, configure:
| Setting | Notes |
|---|---|
| API Account | Which account (from step 4) this product provisions through |
| Storage Box Type | Loaded live from Hetzner once an account is selected |
| Location | Fallback only — the customer's own Location choice at order time (a Configurable Option, generated the first time you save the product) takes priority |
| Price Markup % | Applied on top of Hetzner's own price when this product's prices are synced |
| Default Access: Samba / SSH / WebDAV / ZFS / Reachable Externally | Protocol state a new Storage Box is created with |
| On Terminate | Delete the Storage Box at Hetzner, or leave it and just unlink the service |
| On Suspend | Revoke all protocol access, or take no action |
| Show Tab: Snapshots / Subaccounts / Access Settings / Provider Actions | Per-product dashboard tab toggles |
| Client May: Manage Snapshots / Manage Subaccounts / Change Access Settings / Reset Password / Rename / Manage Snapshot Plan | Per-product client-area capability toggles (admins always retain full access regardless of these) |
| Order Form Styling | Restyles the order form to match the module's own dashboard look |
| Reference Prefix | Used to name newly-created Storage Boxes, e.g. sb-482 |
Save the product once — this auto-creates the admin-only custom field (storageBoxId | Storage Box ID) every service of this product uses to remember which Hetzner Storage Box it owns, and generates the Location configurable option customers see at checkout.
How linking works
The custom field created in step 5 is the ONLY place a service's Storage Box id is stored. It's populated automatically the first time the service is provisioned. To link an existing, already-created Storage Box to a service instead (migrating in a box you created outside WHMCS, for example), go to Addons → Storage Box Manager → Storage Boxes, find the box, and use Assign to enter the WHMCS service id — Unassign reverses it without touching anything at Hetzner. Every dashboard action — client area or admin — resolves the box id from this field alone; nothing is ever accepted from the request itself.
Uninstalling
Deactivating the addon (Configuration → Addon Modules → Deactivate) preserves all stored data — API accounts, activity history, everything. To remove data permanently, drop these tables manually after deactivation:
Then remove the modules/servers/hetzner_storage_box/ and modules/addons/hetzner_storage_box/ directories. Removing files without dropping tables (or vice versa) is safe — WHMCS just stops seeing the module.