> For the complete documentation index, see [llms.txt](https://docs.thoth.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.thoth.id/web-app/naming-rules-and-fees.md).

# Naming Rules & Fees

Which names are valid, what they cost per year and how expiry works.

## What makes a valid name

A thoth.id name must be:

* Between **3 and 80 characters** long.
* Made up of **lowercase letters `a–z`, digits `0–9`, and hyphens `-`**.
* **ASCII only** — no accents, emoji or other Unicode. This is deliberate: it stops names that look identical from being different names.

And it must not:

* **Start or end with a hyphen** — `-name` and `name-` are rejected.
* Contain **two hyphens in a row** — `my--name` is rejected, `my-name` is fine.

The search box lowercases and trims what you type, so `Satoshi` is treated as `satoshi`. Anything that still breaks a rule comes back as [**Not supported**](/web-app/search.md#not-supported), with the reason and, when possible, a valid suggestion.

| Name        | Valid? | Why                                 |
| ----------- | ------ | ----------------------------------- |
| `satoshi`   | Yes    |                                     |
| `my-name`   | Yes    | Single hyphen in the middle is fine |
| `web3-2026` | Yes    | Digits are fine                     |
| `ab`        | No     | Shorter than 3 characters           |
| `my--name`  | No     | Consecutive hyphens                 |
| `-name`     | No     | Leading hyphen                      |
| `café`      | No     | Non-ASCII character                 |

## What a name costs

The fee is **per year**, paid in **HTR**, and depends on the **length of the name**:

```
fee per year = base fee × length multiplier
```

There are three tiers of multiplier — for **3-character**, **4-character**, and **5-or-more-character** names. Shorter names are scarcer, so they carry the bigger multiplier: a 3-letter name costs more per year than a 10-letter one.

Both the base fee and the multipliers are stored in the nano contract and can be changed by the contract's developer address, so this documentation deliberately doesn't quote figures. **The number you see in the app is read live from the contract**: in search results, on the [registration page](/web-app/register.md), on the landing page's price table and in the [Renew dialog](/web-app/renew.md). It's the one that will be charged. There are no network fees on Hathor on top of it.

Developers can read the same values with [`getFeeInfo`](/sdk-reference/fee-information/getfeeinfo.md), [`calculateFee`](/sdk-reference/fee-information/calculatefee.md) and [`getFeeStructure`](/sdk-reference/fee-information/getfeestructure.md).

### Terms

You can pay for **1 to 10 years** at a time, both when registering and when renewing. There's no discount for buying more years — the total is simply the yearly fee multiplied by the term.

## Expiry and the renewal window

| Phase              | What it means                                                                                                             |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| **Active**         | Everything works normally                                                                                                 |
| **Renewal window** | The name has expired and no longer resolves. It can still be renewed, and nobody else can register it. Lasts **30 days**. |
| **Available**      | The renewal window is over. The name is released and anyone can register it.                                              |

See [Renew a Name](/web-app/renew.md) for how to extend before that happens.

## Other limits

Set by the nano contract:

| Limit                     | Value                                               |
| ------------------------- | --------------------------------------------------- |
| Names managed per address | **100**                                             |
| Records per name          | **20**                                              |
| Record key length         | 1–**50** characters (letters, numbers, underscores) |
| Record value length       | 1–**200** characters                                |
| Total size of all records | 10,000 bytes                                        |
| Avatar image upload       | **5 MB**                                            |
| Name token symbol         | First **5** characters of the name, uppercased      |

The record limits are covered in more detail on the [Records](/web-app/domain-page/records.md) page. The contract calls the renewal window its *grace period*; SDK methods such as [`getGracePeriodDays`](/sdk-reference/contract-information/getgraceperioddays.md) use that name.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.thoth.id/web-app/naming-rules-and-fees.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
