Overview
Every registered domain requires WHOIS contact information — typically four contact types: registrant, admin, tech, and billing. In most cases all four point to the same person, but they can be set independently.
Commerce caches registrar-side contact IDs in domain_contacts to avoid re-creating contacts on every registration.
Contact Types
| Type | Purpose |
|---|---|
| Registrant | Legal owner of the domain |
| Admin | Administrative contact (often same as registrant) |
| Tech | Technical contact for DNS questions |
| Billing | Billing contact for registrar communications |
Contact Fields
| Field | Format | Notes |
|---|---|---|
| First name | string | |
| Last name | string | |
| Company | string | Optional |
| Should be a working address — ICANN may verify | ||
| Phone | E.164 | e.g. +12025551234 — Commerce converts format per registrar |
| Address line 1 | string | |
| Address line 2 | string | Optional |
| City | string | |
| State / Province | string | Use abbreviation where registrar requires it |
| Postal code | string | |
| Country | ISO 3166-1 alpha-2 | e.g. US, GB, DE |
Pre-Fill on Registration
When a client reaches the registration form at /client/order/domain, Commerce pre-fills all four contact types from the client's profile. The client can edit any field before submitting.
Contact Creation at the Registrar
On first domain registration by a client:
- Commerce checks
domain_contactsfor an existing entry for this client + registrar combination. - If none found: calls the registrar's contact create API (e.g.
contacts/addfor ResellerClub,contacts.createfor OpenSRS). - The registrar returns a contact ID (registrar-specific identifier).
- Commerce stores the contact ID in
domain_contacts.
On subsequent registrations by the same client, the cached contact ID is reused — no redundant API calls.
Updating Contacts
Local Update (Commerce Only)
- Go to Admin → Domains → [domain] → Contacts tab.
- Edit any field.
- Save.
This updates the domain_contacts record in Commerce's database only. The change is not automatically pushed to the registrar.
Pushing to Registrar
After a local update, click Sync on the domain detail page. This calls getDomainInfo to refresh the local record from the registrar, but does not push local changes back. To push contact updates to the registrar, you must use the registrar's own portal or API — Commerce does not implement a updateContact method.
For most domains, registrant contact changes require a formal change-of-registrant process at the registrar (ICANN 2016 Transfer Policy). Check registrar documentation.
WHOIS Privacy Interaction
When WHOIS privacy is enabled, the registrant contact details are replaced with proxy contact information in public WHOIS results. The real contact details are still stored in Commerce and at the registrar internally.
See WHOIS Privacy for details.
domain_contacts Table Structure
| Column | Description |
|---|---|
id |
Primary key |
client_id |
Linked Commerce client |
registrar_module |
Module slug (e.g. resellerclub) |
registrar_contact_id |
Contact ID returned by the registrar API |
type |
registrant, admin, tech, billing |
first_name, last_name, etc. |
Contact field values |
created_at, updated_at |
Timestamps |