# Buy a domain

Source: https://modulify.ai/docs/publish/buy-a-domain

Search for a domain from the sidebar, buy it for your workspace, renew it yourself or automatically, and change its registrant or move it away.

You can buy a domain without leaving Modulify. A domain you buy belongs to the workspace, sits on the **Domains** page next to the others it owns, and is registered through Name.com, the registrar Modulify works with.

## Open the Domains page

Choose **Domains** in the sidebar, under **Projects**. The address is `/dashboard/domains`. The page is headed **Domains**, `Find a name for your next site and buy it for this workspace. Modulify registers it, adds the DNS records your sites and email need, and reminds you before it expires.`, and has two tabs:

- **Buy a domain**, where the page opens, holds the search and the popular extensions.
- **Your domains** lists the domains the workspace owns, with the number of domains next to it. Its address is `/dashboard/domains/owned`, so a link or a reload opens it straight away.

The two tabs share one search. A name you search on **Buy a domain** is already in **Search by domain name** when you switch to **Your domains**, and a name you type there is searched when you switch back.

You can also buy a domain from a site's **Domain** panel, and Modulify connects it to that site for you, see [Buy a domain for a site](https://modulify.ai/docs/publish/custom-domains#buy-a-domain-for-a-site).

Everyone in the workspace can search, see the list and open the page of each registered domain. Buying and renewing a domain spend money, so they and removing a failed or released domain need the **Manage billing** permission, which only the workspace owner holds. So do the registrant, auto-renew, the transfer lock and the transfer code on a domain's page. For anyone else the **Buy** buttons and those controls are disabled with the tooltip `You do not have permission to do this.` A domain's DNS records and nameservers need the **Manage domains** permission instead, see [Manage DNS for a bought domain](https://modulify.ai/docs/publish/manage-dns). See [Members and roles](https://modulify.ai/docs/reference/members-and-roles).

## Search for a name

On the **Buy a domain** tab, type a name such as `acme` or a full domain such as `acme.com` in the search box. The results appear as soon as you stop typing, and Enter shows them straight away.

Until you search, **Extensions** lists what each extension costs to register for its first term and to renew. It starts on **Popular**, the extensions Modulify features with `.com` first. Choose **All** in the dropdown next to the search box to list every extension Modulify sells, in alphabetical order, which the address keeps as `?extensions=all`. The list makes way for the results while a search is shown and comes back once you empty the box.

Modulify sells the extensions Name.com registers, apart from those whose registry needs extra details Modulify cannot collect yet, such as `.us` or `.eu`. A bare name is checked against the extensions Modulify features, such as `.com`, `.net`, `.org`, `.co`, `.io` and `.ai`. A full domain is checked first, followed by the featured extensions. Each result shows its price and the term that price covers, for example `$12.99 / year`, or `$159.98 / 2 years` for an extension sold for at least two years, with what renewing it costs underneath, for example `Renews at $14.99 / year`.

- A full domain you typed gets a card of its own at the top. When you can buy it, the card reads **Available**, with the price, what renewing it costs and a **Buy** button. Otherwise its badge reads **Taken**, **In this workspace**, **Registering** or **Not on sale**, as explained below.
- The other names follow under **More options**, the free ones first and the ones that are taken or already in the workspace last. A bare name has no card of its own, so its results start straight away.
- **Buy** appears on every domain you can buy.
- **Taken** means someone else has registered it.
- **In this workspace** means the workspace already owns it.
- **Registering**, on the card of a full domain you typed, means the workspace bought it and the registrar has not confirmed the registration yet. Under **More options** such a name reads **In this workspace**.
- **Not on sale** means Modulify cannot sell the name right now, because Name.com could not check it or gave no price for it, or because the name has characters other than a to z, 0 to 9 and hyphens. Such a name, like `münchen`, is listed in its encoded form, `xn--mnchen-3ya.com`.
- A **Premium** badge marks a name the registry prices above its usual rate.

Every name the search checked is listed at once, with nothing more to load.

Search for an extension Modulify does not sell, such as `acme.local`, and a note under the box reads `.local domains are not on sale here, so here is what is open for acme.`, with the results for `acme` underneath. The same happens for an extension whose registry needs extra details, such as `.us`. Now and then such an extension still shows a price, and its **Buy** dialog then reads `.us domains need registry details Modulify cannot collect yet, so they cannot be bought here!` in place of the total.

A leading `https://`, a `www.` and anything after the domain are ignored, so pasting `https://www.acme.com/about` searches for `acme.com`. A search that cannot be read returns `Enter a name like acme or acme.com!` The cross in the box clears the search.

One person can run 30 searches a minute. Past that the search answers with how long to wait, for example `You are searching for domains too fast. Try again in 42 seconds!`

### Link to a search

The search you run is written into the address, as `/dashboard/domains?name=acme.com`, so reloading the page runs it again and a teammate who opens the link sees the same results for the workspace they are in. A link can start the search too:

| Link | Searches |
| --- | --- |
| `/dashboard/domains?name=acme` | `acme` against the featured extensions |
| `/dashboard/domains?name=acme.com` | `acme.com` first, then the featured extensions |
| `/dashboard/domains?name=acme&tld=com` | The same as `name=acme.com` |

When a link carries `tld`, it is added to the first part of `name`, so `?name=acme.com&tld=net` searches `acme.net`. The same `name` filters the other tab, so `/dashboard/domains/owned?name=acme` opens **Your domains** on the domains whose name has `acme` in it. Someone who is signed out signs in first, and the search runs once they are in. The `BuyUrl` of every result in the [Domain HTTP API](https://modulify.ai/docs/publish/domain-http-api) is a link of this kind.

## Register it

Click **Buy** next to the domain you want. The dialog is headed **Register domain**, `Pick a term and add the details of whoever will own the domain.`, with the domain under it. **Cancel** closes it and leaves the results as they were.

### Pick a term

**Registration term** runs from 1 to 10 years. A `.ai` domain is sold for at least 2 years. Some extensions are sold only for certain terms, and the list offers only those. Changing the term prices the domain again, and the line under the form shows the whole amount, for example `Total for 2 years`. Under it, **Renewal after that** shows what renewing the domain costs today, for example `$14.99 / year`, so you know the price of the years that follow. It is left out when the registrar gives no renewal price. When the price cannot be loaded, that line says why instead. When the reason can pass, for example the registrar did not answer or you priced domains too fast, a **Try again** button sits next to it.

### Add the registrant

The registrant is the person or company that legally owns the domain. Every field marked with a star is required.

| Field | Notes |
| --- | --- |
| First name and Last name | The owner, or the contact person at the company |
| Email | Name.com sends the verification email here |
| Phone | A dial code picker and a number field, see below |
| Company | Leave it empty when a person owns the domain |
| Address, Address line 2, City, State or region, Postal code | The owner's postal address. Address line 2 is optional, and the postal code takes up to 16 characters |
| Country | Choose it from the list, which you can search and which shows each country's flag. Kosovo is in it |

**Phone** is two controls. The first picks the dial code and shows its flag and the code, such as `+1`. Open it and search by country name or by code. The second takes the rest of the number. A plus sign and the country code cannot be typed into it, so type the number the way you dial it locally: with `+383` picked, `044 857 116` is saved as `+38344857116`. Pasting a full international number that starts with `+` picks its dial code for you. On a form that starts without a phone number, the dial code follows the **Country** you choose until you pick one yourself. When the number cannot be a real one for its dial code, the field shows an error once you leave it, for example `Enter a real phone number for +383.`

WHOIS privacy is switched on for free, so these details stay out of the public WHOIS record. A few extensions do not offer WHOIS privacy. For those the dialog reads `This extension does not offer WHOIS privacy, so the registry may publish these details.` instead. The form starts with the first name, last name and email of your Modulify account, and you can change any of them. The next time you buy a domain for the same workspace, it starts with the details you entered on your last order there instead. Someone who has not ordered a domain in that workspace sees only their own account details, even when someone else ordered one.

> **Confirm the email from Name.com**
>
> When the registrant details are new to Name.com, it emails the registrant to confirm them. Confirm within 15 days, otherwise the domain can be suspended until you do.

### Auto-renew starts on

Every domain bought in this dialog starts with auto-renew on, so Modulify renews it for you before it expires, on the saved card of whoever bought it, see [Auto-renew](https://modulify.ai/docs/publish/buy-a-domain#auto-renew). To have it renewed only when you renew it yourself, turn **Auto-renew** off on the domain's **Settings** tab once it is **Active**, see [Turn it on or off](https://modulify.ai/docs/publish/buy-a-domain#turn-it-on-or-off).

### Pay

**Pay** shows the total, for example **Pay $12.99**. It stays disabled until every required field is filled in, the phone number is a possible one for its dial code and the price has loaded.

Under the total, a notice reads `Charged immediately from your card.`, with a **Manage** button. It asks **Do you want to continue?**, `Stripe opens in a new tab on the page for changing your card.`, and **Open billing** opens the Stripe billing portal on card management in a new tab, with the dialog still open behind it.

The payment uses the card saved on the owner's account. If there is no saved card, the card is declined or the bank asks you to confirm the payment, a **Do you want to continue?** prompt reads, for example, `Stripe checkout opens in a new tab to pay $12.99 for acme.com. The domain is registered once the payment goes through.` **Go to checkout** opens a Stripe checkout page in a new tab, where you pay, and closes the dialog. **Cancel** closes that checkout for you, so nothing is charged and **Pay** works again. If you leave the page while **Pay** is still working, the checkout page does not open and is closed for you. Paying on a Stripe checkout page opened from this dialog also saves that card to the owner's account. A checkout link opened by an AI client or through the HTTP API does not. Later purchases and renewals try the account's default card first, and a saved card when there is no default.

When the card is charged straight away, the domain is registered while you wait and you get a **Domain registered** toast, `acme.com now belongs to this workspace.` The domain shows under **Your domains** as **Active**, and its search result reads **In this workspace**.

The tab you started in shows **Payment page opened**, `Finish on Stripe in the new tab. This page updates by itself once it goes through.` After you pay, the new tab comes back to the **Your domains** tab of the workspace that placed the order, even if you switched to another one in the meantime, with a **Payment received** toast, `Your domain updates here as soon as the registrar confirms the order.` A new domain shows as **Pending** for a few moments and then turns **Active** on its own, in both tabs. Go back from the checkout page without paying and the new tab shows **Checkout canceled**, `No payment was taken and no domain was registered.`, back on the **Buy a domain** tab with the search for that domain running again. A purchase started from a site's **Domain** panel comes back to that panel instead. If that checkout page could not be closed for you, the toast reads `No payment was taken, but the checkout page stays open for up to an hour.` instead. A checkout link that belongs to a workspace you are not a member of, for example one forwarded to you, opens the Domains page without a toast.

### When it does not go through

| Message | What happened |
| --- | --- |
| `acme.com is no longer available!` | Someone registered the domain after you searched |
| `This workspace already owns this domain!` | The workspace already holds it |
| `acme.com expired, so renew it from its row instead of buying it again!` | The workspace's own registration of the domain has expired but can still be renewed |
| `The price changed since you opened this window. Check the new price and try again!` | The price moved while the dialog was open. Nothing was charged and the new total loads on its own |
| `An earlier checkout for this domain is still open. Please try again in a minute!` | An earlier Stripe checkout page for the same domain could not be closed yet |
| `A payment for this domain is already being processed!` | An earlier payment for the same domain is still being handled, or was started a moment ago |
| `Phone must be a real number with its country code, like +14155550100!` | The phone number is not a possible number for its country code |
| `This workspace has started too many domain orders this hour. Try again in 12 minutes!` | The workspace already started 10 domain purchases and renewals this hour |
| `Your bank is still processing this payment. Check back in a few minutes before trying again!` | The bank has not settled the card payment yet. If it goes through later and no domain was registered for it, it is refunded on its own |
| `The payment could not be confirmed yet. Check back in a few minutes before trying again!` | Stripe did not confirm the card payment in time. If it went through and no domain was registered for it, it is refunded on its own |

When the answer to **Pay** never arrives, for example because the connection dropped, the dialog closes, the list reloads and a **Purchase not confirmed** toast reads `It may have gone through, so check your domains before you buy this one again.`

If the registrar refuses the domain after you paid, the payment is refunded on its own. The domain stays on the list as **Failed** with the reason underneath, for example `We could not register this domain, so your payment was refunded.`

Once in a while the registrar takes longer to confirm an order. You then get a **Payment received** toast, `Your payment went through and the registrar is still confirming the order.`, and a new domain stays **Pending** until the order is settled. Until then its search card reads **Registering**, and it cannot be connected to a site or added as an email domain. When the registrar was only busy, Modulify sends the order again every hour for up to 6 hours. If the registrar never completes it, the payment is refunded.

## Read the list

The **Your domains** tab lists every domain the workspace owns, newest first. A workspace with none reads `No domains`, `Domains this workspace buys show up here.`, with a **Buy a domain** button that opens the **Buy a domain** tab.

| Column | Shows |
| --- | --- |
| Domain | The domain. A failed or released domain also shows why |
| Status | **Active**, **Expiring soon**, **Expired**, **Pending**, **Failed** or **Released** |
| Registered | The day it was registered |
| Expires | The day the current term ends |
| Auto-renew | A badge reading **On**, **Off**, or **Failed** when the latest automatic attempt for the current expiry date did not go through, see [Auto-renew](https://modulify.ai/docs/publish/buy-a-domain#auto-renew). A pending, failed or released domain shows `-` |
| Renewal | What renewing costs at today's price, for example `$14.99 / year` |
| DNS | **Managed here** while the domain uses Modulify's nameservers, **Other nameservers** once it uses others. A pending, failed or released domain shows `-` |

A domain turns **Expiring soon** in its last 30 days and **Expired** once that day has passed, see [After a domain expires](https://modulify.ai/docs/publish/buy-a-domain#after-a-domain-expires). **Pending** means the registrar has not confirmed the registration yet. **Released** means the workspace no longer holds the domain at Name.com, because it was moved to another registrar, or it expired and was deleted or registered again, by this workspace or anyone else. When Name.com stops listing a domain, Modulify checks it again every hour and shows it as released once Name.com has not listed it for a day and shows the name free or registered elsewhere. A released domain reads `This workspace no longer holds this domain at the registrar.` and cannot be changed or renewed, but it can be bought again once it is open for registration. Its DNS records are deleted when it is released.

Search the list with **Search by domain name**, narrow it with the status filter and order it by **Newest**, **Oldest**, **Name** or **Expiry date**. **Expiry date** lists the domains that expire soonest first, with expired ones ahead of the rest, and puts domains with no expiry date yet, such as pending ones and failed ones that were never registered, last. A search with no result reads `No matching domains`, `Try a different search or status filter.`

If the list cannot be loaded it reads **Could not load domains**, `Check your connection and try again.`, with a **Try again** button. When only the next batch fails as you scroll, the domains already shown stay on the list and a **Could not load more domains** toast reads `The rest of the list loads again shortly.`

Each row's menu holds **Manage DNS**, **Renew domain** and **Remove domain**.

## Open a domain's page

Click the row of a registered domain, or choose **Manage DNS** from its row menu. The domain's page opens at `/dashboard/domains/<domain ID>`, where the ID is the one Modulify gives the domain, not its name. It is headed with the domain, its status and a line such as `Registered Oct 7, 2026. Expires Oct 7, 2027.` It has three tabs:

- **DNS records** and **Nameservers**, covered in [Manage DNS for a bought domain](https://modulify.ai/docs/publish/manage-dns).
- **Settings**, which holds auto-renew, renewing by hand, the registrant, the transfer lock and the transfer code, covered below.

### Notices above the tabs

When the domain needs renewing, one notice shows above the tabs, whichever tab is open.

| Notice | Text | When |
| --- | --- | --- |
| **This domain has expired** | `Its sites and email can stop working. Renew it by Nov 1, 2027 to keep it, after that the registrar releases it.` While the last day is not known yet, it reads `Its sites and email can stop working. Renew it soon to keep it, before the registrar releases it.` | The domain is **Expired**, see [After a domain expires](https://modulify.ai/docs/publish/buy-a-domain#after-a-domain-expires) |
| **Auto-renew failed** | The reason, followed by `Renew it yourself to keep it.` | The latest automatic renewal failed, see [When an attempt fails](https://modulify.ai/docs/publish/buy-a-domain#when-an-attempt-fails) |
| **Expires on Oct 7, 2027** | `Auto-renew is off, so renew it to keep it.` | The domain is **Expiring soon** and auto-renew is off |

Each notice has a **Renew domain** button that opens the dialog in [Renew a domain](https://modulify.ai/docs/publish/buy-a-domain#renew-a-domain). For anyone without the **Manage billing** permission it is disabled with the tooltip `You do not have permission to do this.`

The row of a pending, failed or released domain does not open, and its **Manage DNS** is disabled with the tooltip `DNS opens once the domain is registered.`, `This order failed, so the domain was never registered.` on a failed one, or `This workspace no longer holds this domain.` on a released one.

Switching to another workspace while a domain's page is open takes you back to the **Domains** page, because the domain belongs to the workspace you left.

## Renew a domain

A domain is renewed in one of two ways. While **Auto-renew** is on, Modulify renews it for you before it expires, see [Auto-renew](https://modulify.ai/docs/publish/buy-a-domain#auto-renew). While it is off, the domain is renewed only once you renew it yourself, and otherwise it expires on its date. Name.com's own auto renew stays off for every domain Modulify registers, and Modulify turns it off again if it is ever switched on, so Name.com never charges anyone by itself. Modulify emails reminders as the date gets close, see [Emails about your domains](https://modulify.ai/docs/publish/buy-a-domain#emails-about-your-domains).

You can renew any domain yourself, with auto-renew on or off, for example to add several years at once. On the **Your domains** tab, open the row menu and choose **Renew domain**. On the domain's page, choose the **Settings** tab. It starts with a card of two rows, **Auto-renew** and **Renew now**. The **Renew now** row reads `Adds the years you pick to its expiry date, Mar 21, 2027.` and holds the **Renew domain** button. The [notices above the tabs](https://modulify.ai/docs/publish/buy-a-domain#notices-above-the-tabs) carry the same button. The dialog is headed with the domain, for example **Renew acme.com**, and reads `It expires on Mar 21, 2027. The years you pick are added to that date.` For a domain that has already expired it reads `It expired on Mar 21, 2027. The years you pick are added to that date.`

Pick how long under **Renew for** and click **Pay**. Under the total, the notice `Charged immediately from your card.` has the same **Manage** button as in the **Register domain** dialog. Payment works the same way as when you bought it, and a renewal that goes through shows a **Domain renewed** toast and the new date under **Expires**. When it needs a Stripe checkout page, the **Do you want to continue?** prompt reads, for example, `Stripe checkout opens in a new tab to pay $12.99 to renew acme.com. Its new expiry date shows once the payment goes through.` **Go to checkout** opens it in a new tab and closes the dialog, and **Cancel** closes that checkout for you. A renewal paid there brings the new tab back to where you started it, the **Your domains** tab or the domain's page, and the tab you started in shows the new date by itself. Going back from a renewal's Stripe checkout page without paying shows **Checkout canceled**, `No payment was taken and the domain was not renewed.` A renewal costs what the extension costs on the day you renew, which can differ from what the domain cost when you bought it.

If the expiry date moved after you opened the dialog, because a renewal already went through, nothing is charged, the dialog closes, the domain reloads and the **Could not renew domain** toast reads `This domain was renewed since you opened this window. Check its new expiry date before you renew it again!` The same happens when the renewal is refused for another reason that comes from the domain itself, for example `A renewal for this domain is already being processed!` When the answer to **Pay** never arrives, for example because the connection dropped, the dialog closes, the domain reloads and a **Renewal not confirmed** toast reads `It may have gone through, so check the expiry date before you renew this domain again.`

A domain can be registered for at most 10 years ahead, so the longest renewal you can pick shrinks as the time left on the domain grows. A domain that already runs close to that ceiling cannot be renewed, and the dialog says `This domain is already registered for the longest term allowed!`

**Renew domain** works on active, expiring and expired domains. On a pending one it is disabled with the tooltip `Only a registered domain can be renewed.`, on a failed one with `This order failed, so the domain was never registered.`, and on a released one with `This workspace no longer holds this domain.`

Before it takes a payment, Modulify checks that Name.com still lists the domain. When it does not, nothing is charged and the **Could not renew domain** toast reads `Name.com does not list this domain right now, so it cannot be renewed. Try again later!` If Name.com stops listing it after you paid, for example while a Stripe checkout page was open, the payment is refunded.

### After a domain expires

After its expiry date a domain can still be renewed at the normal renewal price for a number of days that Name.com sets for each extension, 25 days for `.com` and most extensions today. The **This domain has expired** notice on the domain's page names the last day, see [Notices above the tabs](https://modulify.ai/docs/publish/buy-a-domain#notices-above-the-tabs). AI clients and the HTTP API read that day as `RenewBy` on the domain, which is null while Name.com has not reported the grace days of the extension yet.

After that day Name.com removes the domain from the account, and it shows as **Released**. Modulify has no redemption or restore step, so renew the domain before then.

## Auto-renew

Every bought domain has an **Auto-renew** switch. While it is on, Modulify renews the domain itself before it expires. Modulify does the renewal, not Name.com, whose own auto renew stays off, so Name.com never charges anyone by itself.

### Turn it on or off

A domain you buy in the **Register domain** dialog starts with auto-renew on, see [Auto-renew starts on](https://modulify.ai/docs/publish/buy-a-domain#auto-renew-starts-on).

For a domain the workspace already owns, open its page and choose the **Settings** tab. It starts with a card of two rows. The first is **Auto-renew**, `Renews the domain for another year before it expires, on the saved card of whoever turns it on.`, with a switch. The second, **Renew now**, renews the domain by hand, see [Renew a domain](https://modulify.ai/docs/publish/buy-a-domain#renew-a-domain).

Turning it on shows an **Auto-renew on** toast, `It renews by itself before it expires.` It needs a saved card, because that card pays for the renewals. Without one, a dialog asks **Add a card first?**, `Auto-renew charges a saved card. Billing opens in a new tab to add one, then turn it on.`, and **Open billing** opens the Stripe billing portal on card management in a new tab. Add the card there, then turn the switch on again.

Turning it off asks first: `Turn off auto-renew for acme.com?` with `It then expires on Oct 7, 2027 unless you renew it yourself.` Confirm with **Turn off**, and the **Auto-renew off** toast reads `Renew it yourself before it expires.`

Only the workspace owner can change the switch, because it needs the **Manage billing** permission, like buying and renewing a domain, and only while the domain is **Active** or **Expiring soon**. For anyone else it is disabled with the tooltip `You do not have permission to do this.`, and on an expired domain with `Renew this domain before you change it.` A change that is refused for another reason shows a **Could not change auto-renew** toast with the reason.

### Who pays and how much

Modulify charges the saved card of the person who turned auto-renew on, the default card in their billing details. For a domain bought in the **Register domain** dialog, that is the person who bought it. No checkout page opens. That person must still be able to manage billing for the workspace when the renewal is due. When a workspace is transferred to a new owner, auto-renew is turned off for its domains, and the new owner turns it on again to have them renewed on their own card.

A renewal adds one year, or the shortest term the extension renews for when that is longer, at the renewal price of that day, the one the **Renewal** column shows.

### When it renews

Modulify tries 14 days before the expiry date and, while the domain is not renewed yet, again 7, 3 and 1 days before it. It checks every hour for domains that are due. A renewal that goes through moves the expiry date on by the term and sends the `acme.com was renewed` email.

Nothing is tried after the expiry date. An expired domain can still be renewed by hand until the last day of its grace period, see [After a domain expires](https://modulify.ai/docs/publish/buy-a-domain#after-a-domain-expires).

### When an attempt fails

If the card is declined or missing, or the bank asks you to confirm the payment, that attempt fails and nothing is charged. The workspace owner and members get the email `We could not renew acme.com automatically` with the reason, and the next attempt tries again. If the registrar refuses the renewal after the payment went through, the payment is refunded.

After a failed attempt, the domain's row on the **Your domains** tab shows a **Failed** badge under **Auto-renew**, and the domain's page shows an **Auto-renew failed** notice above its tabs with the reason, for example `The person who turned on auto-renew has no saved card.`, followed by `Renew it yourself to keep it.` To do that, use the **Renew domain** button on the notice, see [Renew a domain](https://modulify.ai/docs/publish/buy-a-domain#renew-a-domain).

Turning **Auto-renew** off and on again clears the failure, and the card charged from then on is the saved card of whoever turned it back on. When the domain is in its last 14 days, Modulify then tries again within the hour.

## Change the registrant

The **Settings** tab of a domain's page has a **Registrant** card, `The person or company that legally owns the domain. Privacy protection keeps these details out of public WHOIS.`, followed by the details on file. The second sentence shows only while WHOIS privacy is on for the domain. Only the workspace owner sees them. Everyone else reads `Only the workspace owner can see and change the registrant.`

Click **Edit registrant**. The dialog takes the same fields as when you bought the domain, see [Add the registrant](https://modulify.ai/docs/publish/buy-a-domain#add-the-registrant), and reads `Name.com may email the registrant to confirm new details, and a change of owner can lock transfers for 60 days.` **Save registrant** stays disabled until every required field is filled in and the phone number is a possible one for its dial code. A change that goes through shows a **Registrant updated** toast, `Name.com may email the registrant to confirm the new details.`

A change can be refused for the same reasons as at checkout, for example `Phone must be a real number with its country code, like +14155550100!` or `Email is invalid!`, and the **Could not update registrant** toast names the reason. On an expired domain **Edit registrant** is disabled with `Renew this domain before you change it.`

## Move a domain to another registrar

**Transfer lock** and **Transfer code** on the **Settings** tab are for moving the domain away from Name.com. Only the workspace owner can use them, and only while the domain is **Active** or **Expiring soon**. For anyone else the controls are disabled with `You do not have permission to do this.`, and on an expired domain with `Renew this domain before you change it.`

A domain on Modulify's nameservers keeps its DNS records here only while the workspace holds it. Before you move it, point it at the nameservers of the DNS host you will use and add its records there, see [Change the nameservers](https://modulify.ai/docs/publish/manage-dns#change-the-nameservers). Once the domain shows as **Released**, Modulify deletes its DNS records, so a domain still on Modulify's nameservers stops answering.

### Transfer lock

**Transfer lock**, `Keeps the domain from being moved to another registrar. Turn it off only while you move it.`, is a switch. Turning it off asks first: `Unlock acme.com?` with `Anyone with its transfer code can then move it to another registrar. Lock it again once you are not moving it.` Confirm with **Unlock domain**, and the **Domain unlocked** toast reads `It can be moved to another registrar with its transfer code.` Turning it back on needs no confirmation, and the **Domain locked** toast reads `Nobody can move it to another registrar now.`

The registrar can also hold a lock of its own, for example after a change of owner. The row then reads `The registrar keeps this domain locked until Dec 6, 2026.`, and the switch is disabled with the tooltip `The registrar keeps this domain locked for now.`

### Transfer code

**Transfer code**, `The registrar you move the domain to asks for this code. Keep it private.`, has a **Get transfer code** button. It opens **Transfer code for acme.com**, `Give it only to the registrar you are moving the domain to. Turn off the transfer lock before you start the move.`, with the code in a field you can copy. **Done** closes it.

If Name.com cannot hand out a code, the **Could not get the code** toast reads `The registrar is not giving out a transfer code for this domain right now. A domain usually cannot move in its first 60 days or for 60 days after its owner changed!`

## Remove a failed or released domain

A failed or released domain stays on the list so you can see what happened. To clear it, choose **Remove domain** from the row menu and confirm. For a failed domain the confirmation reads `This clears the failed order from the list. It does not change the refund for that order.`, and for a released one `This clears the domain from the list. The workspace no longer holds it at the registrar.`

Only failed and released domains can be removed. On any other domain the item is disabled with the tooltip `Only a failed or released domain can be removed.`

## Use the domain for a site

A bought domain connects to a site like any domain you own: enter it in the site's **Domain** tab. That works once its registration is confirmed. While the domain is still **Pending**, connecting it is refused with `acme.com is still being registered, so connect it once its registration is confirmed!` A domain bought from that tab is connected for you as soon as its registration is confirmed, see [Buy a domain for a site](https://modulify.ai/docs/publish/custom-domains#buy-a-domain-for-a-site). While the domain uses Modulify's nameservers, Modulify adds the site's records to the domain's DNS for you, and deletes them when the domain leaves the site. The same goes for an email domain of a site. See [Records Modulify manages](https://modulify.ai/docs/publish/manage-dns#records-modulify-manages).

To use a domain you bought somewhere else, see [Connect a custom domain](https://modulify.ai/docs/publish/custom-domains).

## Emails about your domains

Modulify emails the workspace about its domains. Each email links to the domain's page, or to the **Your domains** tab of the Domains page, and switches you to the workspace that owns the domain first.

| Email | Subject | Sent to | When |
| --- | --- | --- | --- |
| Registered | `acme.com is now yours` | Owner and members | A registration goes through |
| Renewed | `acme.com was renewed` | Owner and members | A renewal goes through, whether you renewed it or auto-renew did |
| Expiring | `acme.com expires in 30 days` | Owner and members | For a domain with auto-renew off: when 30 days are left, again at 7 days and at 1 day |
| Renews automatically | `acme.com renews automatically on 07 Oct 2027` | Owner and members | For a domain with auto-renew on: when 30 days are left, in place of the three expiring emails |
| Expired | `acme.com has expired` | Owner and members | Once, after the expiry date has passed. It says how long the domain can still be renewed for, such as `25 days` |
| Auto-renew failed | `We could not renew acme.com automatically` | Owner and members | An automatic renewal attempt failed and nothing was charged. It gives the reason |
| Registration failed | `We could not register acme.com` | Whoever paid, and the owner | A paid registration did not go through and the payment was refunded |
| Renewal failed | `We could not renew acme.com` | Whoever paid, and the owner | A paid renewal did not go through and the payment was refunded |
| Refund | `Your payment for acme.com was refunded` | Whoever paid, and the owner | The payment for a domain order was refunded outside a failed registration or renewal |

The workspace owner always gets the registered, renewed, expiring, renews automatically and expired emails. Every other member gets them too, unless they switched off **Domains** under **Email** on the **Notifications** tab of their account, see [Email notifications](https://modulify.ai/docs/reference/your-account#email-notifications).

The auto-renew failed email is about a payment, so it goes to the owner and every member and cannot be switched off. The last three are about payments too, so they go to the person who paid and to the workspace owner, even after the workspace changed hands, and cannot be switched off. A refund that comes with a failed registration or renewal is covered by that email, so no second email is sent for it.

## On the mobile app

In the Modulify app for iPhone and Android, **Domains** in the **Workspace** tab's list opens the domains the workspace bought. It loads, refreshes and saves through the same requests as the web, so its confirmations, toasts and refusals read the same.

- Each domain is a card with its name, its status, **Registered**, **Expires**, **Renewal**, **Auto-renew** and **DNS**. The search box, the status filter and the sort sit above the list, and more domains load as you scroll.
- Tap a registered domain's card to open its page, or the three dots for **Manage DNS** and **Remove domain**.
- The app does not search for, buy or renew domains, so it has no **Renew domain** button. Those stay on the web, see [Search for a name](https://modulify.ai/docs/publish/buy-a-domain#search-for-a-name) and [Renew a domain](https://modulify.ai/docs/publish/buy-a-domain#renew-a-domain). The notices above the tabs still say when a domain has expired, when auto-renew failed or when a domain expires soon with auto-renew off.
- On a phone with the app installed, the link in an email about a domain opens the app on that domain's page, or on **Domains**, in the workspace that owns it, after you sign in if you are signed out.
- The **Settings** tab has the **Auto-renew** switch, the expiry date and the renewal price, **Registrant** with **Edit registrant**, **Transfer lock** and **Get transfer code**. Turning auto-renew on without a saved card leaves it off and asks **Do you want to continue?**, `Auto-renew needs a saved card. This domain opens on the Modulify website in your browser, where you can add one.` **Continue** opens the domain's **Settings** tab on the web in your phone's browser, not inside the app, and the **Add a card first?** dialog appears there once you are signed in, see [Turn it on or off](https://modulify.ai/docs/publish/buy-a-domain#turn-it-on-or-off). Add the card, then turn auto-renew on again in the app or on the web.
- Where the web shows a tooltip on a disabled control, the app writes the same text under it.

### Can an AI client or my own code buy a domain?

Yes, for the workspace owner, with a token that holds the `domains:buy` scope, over MCP or the [HTTP API](https://modulify.ai/docs/api). It never charges a card: `buy_domain` and `renew_domain` return a Stripe checkout link, and the domain is bought or renewed only once you pay there. Paying on that link does not save the card to the owner's account, so a domain bought this way starts with auto-renew off unless the call asks for it with `autoRenew`. `set_domain_auto_renew`, behind the same `domains:buy` scope, turns auto-renew on or off afterwards, and turning it on needs a saved card. Pass `connectProjectId` to `buy_domain` and Modulify connects the new domain to that site once its registration is confirmed. See [Bought domains](https://modulify.ai/docs/mcp/tools#bought-domains).

### Can chat help with domains?

Yes, in a site's chat. It can list what each extension costs, check which names are free and what they cost, price a term, list the workspace's bought domains, and read or change their DNS records and nameservers, asking you first before it changes or deletes a record or moves the nameservers. Buying and renewing a domain, its registrant, its auto-renew switch, its transfer lock and its transfer code stay yours: chat sends you to **Buy a domain** in the site's **Domain** tab, which buys the domain and connects it to the site, or to the **Domains** page. See [Buy a domain for a site](https://modulify.ai/docs/publish/custom-domains#buy-a-domain-for-a-site).

### Can teammates buy domains?

Only the workspace owner can, because buying a domain needs the **Manage billing** permission. Everyone in the workspace can search and see the list, and anyone with the **Manage domains** permission can change a domain's DNS records and nameservers.

### Who owns the domain?

The registrant you enter when you buy it. Modulify registers it for that person or company through Name.com. The workspace owner can change it later, see [Change the registrant](https://modulify.ai/docs/publish/buy-a-domain#change-the-registrant).

### Can I manage the DNS of a domain I bought here?

Yes, on the domain's page. See [Manage DNS for a bought domain](https://modulify.ai/docs/publish/manage-dns).

### Does a domain renew on its own?

Yes, while **Auto-renew** is on for it. Modulify then renews it before it expires, on the saved card of whoever turned auto-renew on. With it off, the domain is renewed only when you renew it yourself. See [Auto-renew](https://modulify.ai/docs/publish/buy-a-domain#auto-renew).

### Will I be reminded before a domain expires?

Yes. For a domain with auto-renew off, Modulify emails when 30 days are left, at 7 days, at 1 day and once more after the domain has expired. For a domain with auto-renew on, one email when 30 days are left says it renews automatically, and after that you hear when the renewal goes through, when an attempt fails or once the domain has expired. See [Emails about your domains](https://modulify.ai/docs/publish/buy-a-domain#emails-about-your-domains).

### What happens to my domains if I delete the workspace?

While the workspace still holds a domain that has not expired, deleting it asks once more, `Delete it anyway?`. If you go ahead, the domains leave the **Domains** list with the workspace and stay registered until their term ends, but nothing renews them, auto-renew included, no reminders are sent and nobody can manage them in Modulify. To keep one, move it to another registrar before you delete the workspace, see [Move a domain to another registrar](https://modulify.ai/docs/publish/buy-a-domain#move-a-domain-to-another-registrar). Deleting your account works the same way for every workspace you own. See [Delete a workspace](https://modulify.ai/docs/reference/workspaces#delete-a-workspace).