Limits and known gaps
Everything the module cannot do and why, all of it Porkbun API constraints: EPP retrieval, registrar lock, multi-year terms, premium domains, .uk transfers and rate limits.
Everything the module cannot do, and why. All of these are Porkbun API constraints rather than module decisions — but they are the things you need to know before committing, so they are stated plainly rather than buried.
Cannot be done through the API at all
| Gap | Detail | Workaround |
|---|---|---|
| EPP / auth code retrieval | No API endpoint exists | Porkbun dashboard: Domain Management → the domain → Get Authorization Code. Regenerated each time you view it |
| Registrar lock toggle | Not exposed | Dashboard |
| ID protection toggle | Free WHOIS privacy is applied automatically at registration; there is no after-the-fact switch | Account Security Settings sets the account default |
| Multi-year terms | Registration and renewal are for the registry-minimum term, usually one year, per call | Renew additional years manually, or set the module to sell one-year terms only |
| Premium domains | Cannot be registered, renewed or transferred | Handle in the dashboard and invoice manually |
.uk inbound transfers | Cannot be initiated via API | Dashboard. Registration and management of .uk work normally |
| The account’s first ever registration | Blocked from the API as an anti-abuse measure | Register one domain manually, once |
How the module handles each
It does not paper over them.
- Premium domains are marked unavailable in search results, and registration and transfer refuse them before the customer is charged — rather than taking an order that will fail at the registrar with the money already taken.
- Multi-year orders register one year and write a note to the module log. The pricing sync can switch years 2–10 off in WHMCS so the longer terms are never offered.
- EPP retrieval returns a message telling the admin exactly where to get the code, rather than a generic failure.
- Domains not opted in to API Access are flagged in the module log by the daily sync, before you find out at renewal time.
Operational constraints
Prepaid credit
The account runs on a balance you top up. There is no invoicing and no credit terms. A balance that hits zero overnight means failed renewals in the morning.
Turn on auto top-up. Porkbun also offers per-account monthly spend limits and low-balance alerts.
Rate limits
| Operation | Default limit |
|---|---|
| Single availability check | 10 per 10 seconds |
| Bulk availability check | 200 domains per 60 seconds, max 25 per call |
| Registration attempts | 1 per second |
| Successful registrations | 1000 per 24 hours |
All per account, and all configurable per API key on request. Comfortable for normal volumes.
The module is built to stay inside them: renewal prices come from the cached TLD price list rather than a lookup per domain, so a bulk renewal run makes one pricing call rather than one per domain; availability checks are batched 25 at a time against the separate bulk budget.
Webhook delivery requirements
Porkbun delivers only to https:// on port 443, resolving to a public address. Private, loopback, link-local and CGNAT targets are refused, re-checked before every delivery.
An endpoint that fails 20 deliveries in a row is disabled at Porkbun’s end, which is why the domain sync cron should stay enabled regardless.
Things that are easy to misread as bugs
The WHMCS DNS tab does nothing. The domain is probably not using Porkbun’s nameservers. The DNS tab manages Porkbun-hosted DNS; if you pointed the domain elsewhere, records live there.
Deleting a DNS record in WHMCS does not delete it at Porkbun. Full DNS sync (allow deletes) is off by default. Off, the module only adds and updates.
Two renewals on the same day produce one charge. The idempotency key includes the date, so a same-day repeat replays the original response. This is deliberate — the alternative failure mode is double-charging on a network timeout.
A transfer price of 0.00 is not free. Porkbun quotes 0.00 for transfers it does not price, .uk among them. The pricing sync leaves whatever WHMCS already holds rather than publishing a zero.
The nightly pricing sync is not running. Click Save Changes on the registrar config page. WHMCS only scans for the module’s hooks.php when the module is activated or saved.