Domain registrars

Dynadot Registrar — setup and reference

Configure Dynadot Registrar credentials, contacts, domain actions, confirmation and registry limitations.

Platform
Laravel / PHP
Laravel
13
PHP
8.4
Database
Dedicated MySQL-compatible production database

Module and release scope

This guide covers Dynadot Registrar 1.0.0, Extension API 1, from the reviewed product source. Its declared core range is 1.3.6–1.3.99. Use the matching released core and signed provider package; a version label alone does not install the required contracts. Source availability does not mean the module is bundled in every currently downloadable product, installed on your server, enabled or certified for your merchant/server account. Nothing in this guide enables a provider or changes your existing connections.

Open System → Domain registrars (newer source may group these as Payments, Domain services or Hosting services). Install the reviewed signed package through Modules & addons or the integration workspace's Install tab, enable the module separately, add an account/connection, save its own credentials, run its stated Test and explicitly enable the connection. Saving or retesting disables the connection until you enable it again. Start with the provider's test environment where supported; otherwise use an isolated account or server.

Exact connection fields

These are the fields declared by this module. Secret values are entered privately and encrypted by the application. Defaults are configuration hints, not approved live merchant settings. Internal fields are populated by the module and are not operator-editable.

Key / label Type Required Default / guidance
environment — Environment select Yes Default: "sandbox" Choices: sandbox = REST v2 sandbox, live = REST v2 live
api_key — REST API key secret Yes Use the account-specific value described below.
api_secret — REST API secret secret Yes Use the account-specific value described below.
currency — Registrar settlement currency select Yes Default: "usd" Choices: usd = USD, aud = AUD, gbp = GBP, eur = EUR, cad = CAD, nzd = NZD, inr = INR, aed = AED
allow_writes — Allow domain purchases and changes boolean No Default: false
allow_automated_renewals — Allow paid-invoice automated renewals boolean No Default: false

This module implements Dynadot's current signed REST v2 API. It does not use API3, which Dynadot lists as legacy and scheduled for retirement. Dynadot currently labels its REST documentation beta and warns that endpoints may change. Validate the module in sandbox for your account and TLDs before allowing real purchases. Installation leaves the module disabled, with writes and automated renewals disabled by default.

Connection setup

In Dynadot navigate to Tools → API and generate the REST API key and API secret. Use the separate sandbox pair first. Configure the installation's public IP in the API allowlist where required by your account. Select the matching environment and settlement currency, save, then run Test. Test reads one domain-inventory page and does not place an order. Fund your registrar account before using live purchases.

Fixed hosts are https://api-sandbox.dynadot.com and https://api.dynadot.com, with /restful/v2 paths. The module sends Bearer authentication and signs the exact path, query and JSON body using Dynadot's Base64 HMAC-SHA256 X-Signature format. Requests have bounded response size and timeouts, with no redirects or automatic retries. No webhook endpoint is required by this package; synchronize domains to read remote state. Dynadot's account-specific rate limits still apply.

Domain operations

Supported: availability; registration; transfer in; renewal; synchronization; nameservers; lock/unlock; and EPP retrieval. Registration supplies the actual customer contact, all four WHOIS roles and at least two distinct nameservers. The nameserver field on purchase is domain.name_server_list; changes use nameserver_list. The phone is split into country calling code and national number. No account default contact is used when customer details are missing.

A pre-created, owned Dynadot contact can be selected with contact_id in optional provider options instead of an inline contact. It is verified using GET /contacts/{contact_id} before the purchase; the resulting domain's registrant contact ID must match afterward. Maintain special registry eligibility on that contact in Dynadot when required. For inline contacts, post-registration synchronization reads the assigned contact and compares all submitted fields.

Registration accepts an integer 1–10 years, with a minimum of two years for .ai. Additional TLD term/eligibility restrictions remain enforced by Dynadot. Availability must explicitly classify the name as non-premium; register_premium and transfer_premium are false. Premium and indeterminate availability require manual review. Transfers accept one year and require auth_code. Current DNS is preserved unless explicit nameservers are supplied. Successful transfer submission remains pending until remote completion.

After registration the module explicitly disables registrar auto-renewal with renew_option: donot; failure to confirm that change keeps the activation pending. Customer invoices control renewal purchases. Renewal requests include the current remote expiry year and refuse late-renewal surcharges. Because the owned-domain API does not provide a reliable premium-renewal discriminator, an administrator must check the remote classification/fee and pass non_premium: true in optional provider options before each renewal. The automation switch does not bypass this review. Premium renewals need separate reviewed handling in Dynadot's dashboard.

Confirmation and recovery

Activation requires an owned domain in active state, no disable/hold/unverified flags, a real registry expiry covering the purchased term, and matching customer contact and DNS. Renewals must cover the full purchased extension of the remote expiry. Updates are checked by a fresh readback. Contact, verification, DNS or purchase uncertainty remains pending with safe diagnostics.

If a submission times out, inspect the Dynadot order and synchronize before trying again. The product records submitted uncertainty rather than retrying a charge. Do not store credentials or customer data in the module source or package.

Provider documentation

← All EmailaBiller guidesGet help →

Need help with EmailaBiller?

Tell us the product version and what you are trying to do. Keep passwords and private keys out of your message.

Contact Emaila