Reseller modules

Sell domains from
your own billing system.

One API, five modules. Your wallet, your prices, your brand — customers never see who we buy from. Plain PHP and curl, no Composer: a module that needs Composer is a module that won't install.

WHMCS

Built against this platform

Built and exercised against the WHMCS registrar API. Still register one cheap domain end to end before you sell.

Setting it up

  1. 1

    Upload the module

    Unzip into modules/registrars/ so you end up with modules/registrars/dbanidomains/dbanidomains.php.

  2. 2

    Activate it

    Setup → Products/Services → Domain Registrars → find Dbani Domains → Activate.

  3. 3

    Paste your credentials

    API URL, key and secret. Save.

  4. 4

    Test the connection

    Click Test Connection. It calls a read-only endpoint — no order needed to prove the plumbing works.

  5. 5

    Import the TLDs

    Domain Pricing → Import from Registrar. Pulls every extension and all three prices in one call. Add your margin on top.

What it does

The same list for every platform — they all wrap the same API.

Feature Supported Notes
Availability search Yes
Register Yes Settles against your wallet
Transfer in Yes Adds a year, as the registry requires
Renew Yes
Nameservers Yes Read and write
Registrar lock Yes Read and write
Auth / EPP code Yes Some registries email it instead — the module says so
Expiry sync Yes
TLD + price import Yes Every extension, all three prices, one call
Contact (WHOIS) editing Yes Registrant only — every role points at it
Premium domains Yes Flagged, with the real price
ID protection (WHOIS privacy) Yes Where the registry permits it — see below
DNS host records Not yet Not yet
Email forwarding Not yet Not yet

When something goes wrong

"The API key or secret was rejected" (401)

Either the credentials are wrong, or your host strips the Authorization header before it reaches PHP — some shared hosts do. Ask them to let it through. The secret is only shown once when you create a token; if you have lost it, delete the token and make a new one.

"Your wallet does not have enough in it" (402)

Exactly what it says. Top up in the client area and retry — nothing was charged, and nothing was half-registered.

"Could not reach the registrar API"

Outbound HTTPS is blocked, or the URL is wrong. It should end in /api/v1 with no trailing slash.

"Returned something that was not JSON"

Almost always your host serving an error page. Open the API URL in a browser: you should see a JSON error, not HTML.

The auth code comes back empty

Not a bug. Some registries email the code to the registrant rather than returning it over the API. The module tells you which case you are in instead of showing an empty box.

ID protection is refused on a domain (422)

Also not a bug, and retrying will never help. A number of registries do not permit registrar-provided privacy at all: .us and .au prohibit it outright, while .eu, .de, .ca, .uk, .nl, .fr, .it and .br redact private individuals at the registry instead, so there is no toggle to sell. The API returns the specific reason rather than a generic failure. Leave ID Protection unticked for those extensions in your billing platform, or it will offer customers a switch that cannot work.

A method never fires (Blesta / HostBill / WiseCP)

Most likely a method-name mismatch with your version. Compare against a bundled registrar module on your platform and rename to match — the adapter is thin on purpose, and the API calls underneath are the part that is already tested.