---
title: Selling Domains Through eNom
description: "eNom is the most complete registrar integration in RackHelm: registration, transfer, renewal, nameservers, in-portal DNS records, registrar lock, EPP code retrieval, ID Protect privacy, bulk availability search, name suggestions, a TLD price importer and SSL certificate resale all run through…"
url: "https://rackhelm.com/documentation/registrar-enom/"
updated: "2026-09-24"
category: "Integrations: Domains & SSL"
---

# Selling Domains Through eNom

eNom is the most complete registrar integration in RackHelm: registration, transfer, renewal, nameservers, in-portal DNS records, registrar lock, EPP code retrieval, ID Protect privacy, bulk availability search, name suggestions, a TLD price importer and SSL certificate resale all run through it. This article is for operators; for how domain orders flow through the platform in general, read [How domain registration works in RackHelm](/docs/how-domain-registration-works/) first.

## Before you start

- An eNom reseller account, and the API username and password for it.
- This server's outbound public IP added to your eNom account's API allowlist. eNom refuses API calls from unlisted addresses with *User not permitted from this IP address*.
- The `edit_integrations` permission.

## Get your credentials

The API username is your eNom reseller login. The password is either the account password or an API token issued in the eNom reseller portal. Add this server's IP to the API allowlist in the same portal — RackHelm can tell you which address it will present: set **Platform Settings → General & System → External IP** and eNom calls will carry that value.

## Configure the panel

1. Open **Integrations → eNom** (`/admin/panels/enom`).
2. Fill the fields below.
3. Press **Test API**. RackHelm runs a `check` command against `example.com`; a green **OK** means credentials and IP allowlisting are both right.
4. Press **Save**.

![The eNom panel form with username, password, sandbox switch and timeout](/wp-content/uploads/rackhelm-docs/integrations-domains-enom-panel.png)
Test before saving — the Test button uses whatever is currently in the form, so you can validate credentials without storing them.

### Field reference

| Field | What it does |
| --- | --- |
| **Name** | Display label on the Integrations page. Defaults to `eNom`. Up to 120 characters. |
| **Active** | Master switch. An inactive panel is not offered as an integration type on products. |
| **API Username** | Required. Your eNom reseller login, sent as `uid`. |
| **API Password / Token** | Sent as `pw`. Never rendered back into the page — **leave blank to keep the stored value**. |
| **Use eNom Test environment (sandbox)** | Switches the endpoint between `resellertest.enom.com` and `reseller.enom.com`. A friendly `mode` of `test` or `live` is stored alongside it. |
| **HTTP Timeout (sec)** | Seconds to wait for eNom. Defaults to 30; minimum 5. |

> **Note:** The sandbox at `resellertest.enom.com` is a separate account with its own credentials and its own IP allowlist. Test-account credentials will not authenticate against the live endpoint, or the reverse.

## Put TLDs on sale

Fastest route is the bulk importer — see [Importing TLD pricing from eNom](/docs/importing-tld-pricing/). To do it by hand: create a product named after the TLD (`.com`, including the leading dot), open its **Provisioning** tab, set **Integration Type** to **Enom**, and enable provisioning. The product name is how the driver derives the TLD, so it must match exactly.

## What eNom supports

| Capability | Behaviour |
| --- | --- |
| Registration | `Purchase`, with registrant contact taken from the order's address (falling back to the user profile) and the term derived from the billing cycle. |
| Transfer | Requires an EPP/auth code on the order. Completion is reconciled later by the transfer sync job. |
| Renewal | `Extend` for the billing cycle's whole years. |
| Nameservers | Up to 5 — the domain page refuses to add a sixth row. |
| DNS records | Read and write, but only while the domain uses eNom's own `name-services.com` nameservers. |
| Registrar lock | Read and toggle from the customer's domain page. |
| EPP code | Unlocks the domain, then requests the auth code. eNom returns it directly or emails it to the registrant. |
| WHOIS privacy | eNom ID Protect, added at registration when the order carries a truthy `DomainPrivacy` variable. |
| Availability | Bulk checks, up to 30 names per call, plus name suggestions. |
| SSL certificates | Sold through the same panel credentials — see [Selling SSL certificates](/docs/selling-ssl-certificates/). |
| Suspend / unsuspend | Not implemented; domains have no suspend concept. |

### .uk domains through eNom

When the TLD ends in `uk`, the driver also sends the registrant's legal type and the name the domain is registered for. Those come from the customer's address record: **UK Legal Type** (`IND`, `FIND`, `LTD`, `PLC`, `PTNR`, `LLP`, `STRA`, `RCHAR`, `FCORP`, `OTHER` — defaulting to `IND`) and **Registrant Name**, which falls back to the customer's first and last name. If you sell .uk seriously, consider going direct to the registry instead — see [Selling .uk domains through Nominet](/docs/registrar-nominet/).

## The End User IP

eNom wants an end-user IP on each call. RackHelm resolves it in this order: **Platform Settings → General & System → External IP**, then the current request's IP, then the resolved server hostname, then `127.0.0.1`. Setting the company setting explicitly is worth doing — it is deterministic, and background jobs have no request IP to fall back on.

## Troubleshooting

| Symptom | Cause and fix |
| --- | --- |
| Test API shows "User not permitted from this IP address" | The server's outbound IP is not on eNom's API allowlist. Add it in the eNom reseller portal — to the sandbox account too if you are testing there. |
| Test API shows "No saved password; please enter it." | You left the password blank and nothing is stored yet. Type it once and test again. |
| "Enom Critical Error: Server ignored parameters." | eNom returned its URL-interface banner instead of XML, which almost always means the IP allowlist again. |
| "Enom returned invalid XML" | Something other than eNom answered — a proxy, a captive portal or an outage. Check outbound HTTPS from the server. |
| "Enom HTTP Error: the registrar could not be reached." | Transport failure. Raise the timeout if the network is slow; the message is deliberately generic because eNom credentials travel in the query string and must never reach the log. |
| Registration fails with "Missing SLD or TLD." | The order item has no `DomainName` variable, or the product is not named after its TLD. |
| Bulk search returns nothing | Check errors are logged but not thrown, so an allowlist problem shows as "everything unavailable". Look for `[Enom] 'Check' command reported errors` in `storage/logs/laravel.log`. |
| DNS tab missing on a customer's domain | The domain is not on eNom's `name-services.com` nameservers. Records are managed wherever the domain is delegated. |
| Cannot add a sixth nameserver | eNom's limit is five. |
| Live details on the domain page look stale | They are cached for 15 minutes. The customer's **Refresh Data** button clears both the details and DNS caches. |
