WHM Reseller Hosting: How to Create and Manage cPanel Accounts
If you're reselling hosting through WHM, your first few cPanel accounts usually go fine — then someone oversells disk space, a client's site gets suspended for no clear reason, or you realize your reseller ACL is too locked-down to even change a package. Here's how to set up WHM reseller hosting properly, from package creation to day-to-day account management, without the surprises.
What WHM Reseller Hosting Actually Gives You
A reseller account is a WHM login with a subset of root's power, scoped to the accounts it owns. You get access to Account Functions (create, suspend, terminate, modify), Package Manager for your own hosting plans, and — depending on the ACL you're assigned — DNS zone editing and support ticket-style tools. What you don't automatically get is full root access to the server: things like WHM's Tweak Settings, Service Manager, or firewall configuration stay with the server owner unless explicitly granted.
This matters because a lot of reseller confusion comes from assuming WHM works like cPanel with more buttons. It doesn't — it's a permission boundary, and getting that boundary right up front saves you from either locking a reseller out of basic tasks or handing them more server control than you meant to.
Before You Start
- Root or WHM access on the parent server (as the hosting company, not the reseller).
- A rough idea of how many accounts and how much disk/bandwidth you're planning to sell — this drives your package limits.
- Decide if the reseller needs their own private nameservers (branding) or will use yours.
- Know whether this reseller account should be able to create other resellers — usually no.
Step 1: Create a Hosting Package First
Don't create the reseller account before you've thought through packages — WHM will let you skip this and it's how servers end up with a dozen one-off, undocumented plans. Go to WHM > Packages > Add a Package and set:
- Disk Quota — in MB, not GB, so double-check the units field.
- Monthly Bandwidth — set a real number, not "unlimited," even if you plan to rarely enforce it. Unlimited packages make it impossible to catch a runaway account early.
- Max Email Accounts / Databases / FTP Accounts / Subdomains — leave generous but not infinite.
- CGI Access and Shell Access — leave shell access off unless the client specifically needs SSH.
Name packages predictably: reseller_basic_5gb, reseller_pro_25gb. You'll thank yourself in six months when you have thirty packages and can't remember which is which.
Step 2: Create the Reseller Account
In WHM, go to Create a New Account like you would for any cPanel account, then after creation open Resellers > Manage Reseller Privileges and enable reseller status for that account. This is the step people miss — creating the account doesn't make it a reseller by itself.
From there, set:
- ACL (Access Control List) — start from the default reseller ACL, then trim. Don't grant "all" unless this person is effectively a co-admin.
- Resource limits owned by the reseller — this is the total disk space and bandwidth the reseller can allocate across all their client accounts combined. If you skip this, a reseller with a 5GB package can create two hundred accounts and quietly consume the whole server.
- Overselling — WHM lets you allow a reseller's package limits to exceed what they actually own, on the assumption most clients won't use their full quota. Fine in moderation; dangerous if left uncapped.
If the reseller wants their own branded nameservers (ns1.theirbrand.com), set those up as glue records at the domain registrar first, then assign them under Resellers > Nameserver IPs — otherwise their client accounts will show your nameservers in WHOIS, which looks unprofessional for a white-label setup.
Step 3: Creating cPanel Accounts Under the Reseller
Once logged in as the reseller (or delegated to do it for them the first time), account creation works the same as top-level WHM: Create a New Account, pick a package, assign a domain. The reseller will only see packages they created or were given access to — not your server-wide package list.
For anyone scripting bulk account creation, whmapi1 is faster than clicking through the UI:
whmapi1 createacct username=clientsite domain=clientsite.com \
password='GeneratedStrongPass1!' plan=reseller_basic_5gb \
contactemail=client@example.com
Run this as the reseller's WHM user (via su to their account or an API token scoped to them), not as root, so the account gets correctly attributed as belonging to that reseller.
Managing Accounts Day to Day
| Task | WHM UI Path | whmapi1 Command |
|---|---|---|
| Suspend an account | List Accounts > Suspend | whmapi1 suspendacct user=clientsite reason="Nonpayment" |
| Unsuspend | List Accounts > Unsuspend | whmapi1 unsuspendacct user=clientsite |
| Change package | Upgrade/Downgrade an Account | whmapi1 changepackage user=clientsite pkg=reseller_pro_25gb |
| Terminate | Terminate an Account | whmapi1 removeacct user=clientsite |
| Check disk usage | List Accounts (shows % used) | whmapi1 accountsummary user=clientsite |
Terminate is irreversible without a backup, so before running it — either manually or via a script — confirm a current backup exists (Backup > Backup Configuration or your off-site backup job). Don't rely on the account being recoverable after the fact.
Common Problems and How to Fix Them
Reseller can't see an option you know exists in WHM
Almost always an ACL gap. Go to Resellers > Edit Reseller Nameservers and Privileges, select the reseller, and check whether the specific function (DNS editing, SSL install, package creation) is ticked. Resellers inherit nothing by default beyond the base ACL you assigned at creation.
"Sorry, you don't have any packages available"
The reseller has no packages assigned to their account, or their owned resource limits are already exhausted. Check Resellers > Resource Limits — if disk/bandwidth owned is at or near the cap, they can't create new accounts until you raise it or they free up space by removing an old one.
Client accounts show your nameservers instead of the reseller's branded ones
The domain was registered or the account created before the branded nameservers were configured. Existing accounts don't retroactively pick up new nameserver settings — you have to update each domain's registrar nameservers manually, or use WHM > Change Site's IP Address combined with a DNS zone edit for accounts already on the server.
Server running out of resources despite "correct" package limits
This is usually overselling stacking up across multiple resellers, not one misconfigured account. Run whmapi1 listaccts or check WHM > Show Bandwidth Usage server-wide, then compare actual usage against what's been sold in aggregate — not just per-package limits.
Prevention: Keep It Manageable Long-Term
- Cap owned resources per reseller instead of leaving them unlimited, even for resellers you trust.
- Review package sprawl quarterly — merge or retire packages nobody's actively using.
- Keep a documented ACL template so every new reseller starts from the same baseline instead of ad-hoc permissions.
- Set up disk and bandwidth usage alerts at the server level (WHM > Notification Settings) so you catch overselling before a client's site goes down.
- If a reseller needs shell access for any of their clients, grant it per-account rather than server-wide by default.
Frequently asked questions
Can a WHM reseller account create other reseller accounts?
Only if you explicitly grant that in their ACL. By default, reseller status doesn't cascade — a reseller you create can make regular cPanel accounts, but can't turn any of them into resellers unless you check that permission yourself.
What's the difference between package limits and reseller resource limits?
Package limits (e.g. 5GB disk) apply to each individual cPanel account created from that package. Reseller resource limits are a separate cap on the total disk and bandwidth the reseller can allocate across every account they own combined — hit that ceiling and they can't create new accounts even if individual packages have room.
Do I need dedicated IPs for reseller nameservers?
Yes, for proper white-labeling. Branded nameservers like ns1.theirbrand.com need their own glue records pointing to dedicated IPs registered at the domain registrar. Sharing your main server IP for reseller nameservers works technically but breaks the white-label appearance if a client looks up WHOIS.
Why did a reseller's account creation fail with a quota error even though the package has space?
Check the reseller's own resource limits, not just the package. WHM enforces both — the package must have room, and the reseller's total owned disk/bandwidth allocation across all their accounts must also have room. Either one being maxed out blocks new account creation.