If you sell hosting and don't sell domains, you're handing every customer to a registrar that probably also sells hosting. Adding domain sales to WHMCS is mostly a configuration job — pick a registrar, paste the API credentials, map the TLDs to prices. But the details determine whether domains become a profit center or a support sink.
I've integrated half a dozen different registrar APIs into WHMCS over the years. Here's the practical guide.
How WHMCS handles domains under the hood
WHMCS treats domains as a separate product type from services. Each domain is tied to:
- A TLD config (price, billing cycle, available periods, which registrar handles it).
- A registrar module (the code that talks to the registrar's API).
- An optional nameserver template (default NS to set on registration).
Same domain product flows through registration, transfer, renewal, expiry — all driven by the registrar module's functions. Pick the right registrar and most of this is automatic.
Step 1 — Pick the right registrar
WHMCS ships modules for 30+ registrars. The ones I actually deploy:
| Registrar | When I pick it |
|---|---|
| OpenSRS / Tucows | Mid-to-large hosting brands. Stable API, deep WHMCS support, reasonable wholesale pricing. |
| Enom | US-focused hosts. Strong TLD coverage. Pricing varies by tier — negotiate. |
| ResellerClub | India/regional hosts. Aggressive pricing, good TLD support for international markets. UI can be clunky. |
| Namecheap | Smaller hosts starting out. Good UI for the customer's view, decent wholesale rates. |
| NameSilo | Privacy-included pricing makes the math simpler. Smaller TLD catalog. |
| OpenProvider | European hosts. Strong on ccTLDs (.de, .fr, .nl). Excellent API. |
What I check before committing:
- Wholesale pricing for the TLDs your customers actually buy. Get .com/.net/.org plus your top 5 regional TLDs.
- API reliability. Ask for uptime statistics. Some registrars are great until their API goes down for a day.
- WHMCS module quality. Check the latest module's date and known issues on the WHMCS marketplace page.
- Transfer and renewal mechanics. Some registrars charge a transfer-in fee plus a renewal; some include 1 year of renewal in the transfer.
Step 2 — Get API credentials
Sign up for a reseller account with your chosen registrar. Once activated, find their API section. You'll typically get:
- API username / reseller ID.
- API key / password.
- API endpoint URL (often a test endpoint and a production endpoint).
- Possibly an IP allowlist requirement — your WHMCS server's outbound IP must be whitelisted.
Always start in test mode. Every registrar I've worked with has a sandbox where domain registrations don't actually register but the API responses are realistic. Get the full flow working there before flipping to production.
Step 3 — Configure the WHMCS registrar module
WHMCS Admin → Setup → Domain Registrars → click your registrar → Activate. Paste credentials. Save.
If you don't see your registrar listed, install the module: upload to /modules/registrars/ per the registrar's installation instructions.
Always click Test Connection (most modules expose this). It calls a no-op API endpoint and confirms credentials work.
Step 4 — Configure TLDs and pricing
Setup → Domain Pricing. This is where most of the work happens.
For each TLD you'll sell:
- Auto Registration: pick the registrar module. Without this, orders get created but nothing reaches the registrar.
- DNS Management / ID Protection / Email Forwarding: check what's available. Some registrars include these free; others charge separately.
- Registration prices: per period (1 year, 2 year, etc.). Set markup over your wholesale cost.
- Renewal prices: usually same as or slightly higher than registration.
- Transfer-in price: many people set this at break-even — transfers are about acquisition, not profit on the first year.
- Grace period & redemption period: copy from your registrar's policy. These determine when WHMCS marks a domain "expired" vs "redeemable."
Save markup as a percentage, not flat dollars. Wholesale pricing changes; flat markups become wrong over time. I use 30-50% markup over wholesale for common TLDs, less for premium ones like .com (margin is thin anyway).
Step 5 — Nameserver templates
If you're a hosting company, you almost always want every domain that gets registered to point to your nameservers by default. Configure them:
Setup → Domain Registrars → [your module] → Default Nameservers:
ns1.yourhostingbrand.com
ns2.yourhostingbrand.com
For free domains bundled with hosting, this is critical — the moment the customer's domain registers, it must point to your servers so the hosting starts working without manual DNS setup.
Step 6 — Bundle domains with hosting
The single most effective use of WHMCS domain integration: free first-year domain with hosting purchase.
Configure: Setup → Products/Services → edit a hosting product → Pricing tab → Free Domain. Set:
- Free Domain: Free Domain (free first year only) or Free Domain with Renewals (every year).
- Allowed TLDs: typically .com, .net, .org (anything you can afford to give away).
- Minimum billing cycle: yearly or longer (don't give away a domain on a monthly plan).
Now the order form prompts the customer to pick a domain when they buy hosting; the domain registers automatically; both items appear on a single invoice.
How to verify end-to-end
- Test mode: place a test order including a domain. Confirm the order completes, the domain appears in Clients → Manage Domains, and the registrar's sandbox shows the registration attempt.
- Try a transfer-in in test mode with a real EPP code (most sandboxes accept any valid-format EPP).
- Try a renewal in test mode. WHMCS triggers renewals via the cron based on the next-due-date.
- Switch to production credentials. Place one small live order with your own card. Verify the domain actually registers at the registrar (visible in your reseller control panel). Refund yourself after.
Common pitfalls
"Domains register at the registrar but WHMCS shows 'Failed'." Wholesale balance is low. Some registrars accept the registration request but the API returns an error if your prepaid balance can't cover it. Top up at the registrar's panel.
"Default nameservers aren't applied." Either your registrar module ignores the WHMCS-side default nameserver setting (check the module docs), or the customer chose a different nameserver option at checkout. Some order forms expose nameserver fields — verify yours doesn't or that defaults are pre-filled.
"Renewals are charged in WHMCS but the domain expires anyway." The WHMCS invoice was paid but the renewal API call failed. Open Utilities → Logs → Module Log, filter by your registrar module, look for the failed call. Common cause: registrar balance too low, or auto-renewal wasn't enabled at the registrar side as well as WHMCS.
"Customer's transfer is stuck pending for days." Transfers require the customer to approve at the losing registrar's end. WHMCS shows "Pending Transfer" until the API reports success. Add a status-check cron task that updates pending transfers — most registrar modules have one.
"Cross-TLD pricing inconsistency." Set up a pricing-sync script or use the registrar module's "Sync Pricing" button (if available). Hand-maintained pricing across 50 TLDs is impossible.
My take — domain strategy that pays
- Pick one primary registrar. Two if you have specific TLD reasons. Don't try to be a domain marketplace.
- Bundle aggressively. Free first-year domain with hosting is one of the highest-ROI offers you can make.
- Don't try to compete with Namecheap on price. Compete on "managed for you" — your customers don't want a domain console; they want their hosting + domain to just work.
- Monitor renewal failures weekly. A failed renewal is a customer churn event. Catch them within days, not after the domain expires.
Going further
- WHMCS domain registrars documentation
- Domain pricing configuration
- Build a custom domain registrar module — if you need to integrate one WHMCS doesn't ship.
I set up and optimize domain reseller operations inside WHMCS — registrar selection, TLD pricing, bundled offers, renewal monitoring. If you want this dialed in, tell me about your hosting business and I'll send a quote in 24 hours.