Buy a domain and manage its DNS
This example takes a new studio from choosing a domain to managing a blog DNS record. You can then use www for the Stillform static website example.
Replace YOUR_DOMAIN with the exact domain you choose. Replace <plan-id>, <execution-id>, and <record-id> with your own returned values, removing the brackets. The commands below are instructions, not a pre-completed purchase or a fixed-price offer.
1. Sign in and check what you already own
After installing the public CLI, run these separately:
nameslink login
nameslink whoami
nameslink doctor
nameslink capabilities --json
nameslink domain list --json
Check the account and API address. The public default is https://www.nameslink.com/api. If the account already owns a suitable usable domain, skip the purchase and continue with DNS. A normal domain typically has NORMAL status; WAIT_EFFECT or REDEEM_PERIOD is not a ready-to-use result. Hosting eligibility is checked separately.
2. Find and check one domain
nameslink domain search stillform --limit 5
nameslink domain check "YOUR_DOMAIN" --json
Select one available domain eligible for a new-registration Plan. Search results may include aftermarket listings; they are not the same purchase flow. Search and availability prices are reference information. The next step obtains the quote for the selected domain.
3. Review a purchase Plan
nameslink plan "Register my selected domain" --domain "YOUR_DOMAIN" --domain-only --json
nameslink wallet balance --json
--domain-only limits this Plan to the domain. It does not publish a website or silently add other products. Creating the Plan does not buy the domain.
Check the returned information before continuing:
| What to check | Where to look |
|---|---|
| Exact spelling and suffix | domain |
| Purchase or reuse | domainMode; REUSE means an existing domain, not a new registration |
| Live registration mode | domainRegistrationMode |
| Registration term | steps[].details.registrationYears on the domain-registration step |
| Currency and total | total.currency and total.amount, compared with the wallet balance |
| This exact Plan | Keep planId and digest |
With no --years, the registry's current minimum term is used. To request a different term, create and review the appropriate quote before approving it. Do not treat an old search price as the amount you are authorizing.
A new live purchase has domainMode=PURCHASE and domainRegistrationMode=LIVE. If the Plan instead says REUSE, it is reusing an existing domain. If the mode or target is different from your intention, check the account, endpoint, and selected domain before continuing.
4. Approve and verify the purchase
In your own interactive terminal:
nameslink apply <plan-id> --watch
Review the displayed domain, term, actions, and total. Continue only if you intend to pay for that exact purchase. The terminal asks for approve followed by the actual domain. Complete every requested identity-verification factor in the same terminal prompt.
If registrant details or balance are missing, follow the returned completion or top-up instructions and continue the original Plan. Do not start a second purchase to get past an interruption.
Save the execution ID. If the terminal closes, inspect the original execution:
nameslink status <execution-id> --watch --json
nameslink events <execution-id> --json
nameslink domain list --json
An accepted request or wallet debit alone is not registration proof. Wait for execution state=SUCCEEDED, then check that the exact domain appears in this account with a usable status such as NORMAL. If delivery is still pending, continue checking it. A failed or unknown result needs its original recovery path; do not buy again on assumption.
5. Check DNS before changing it
nameslink dns status "YOUR_DOMAIN" --json
nameslink dns records list "YOUR_DOMAIN" --json
nslookup -type=NS YOUR_DOMAIN
Confirm the zone is usable and its authoritative name servers are the ones serving the domain. Records stored in a DNS service will not affect public lookups if the domain delegates to a different provider.
This example uses blog, leaving www available for static hosting. A static-hosting publication configures its own required records; do not add an arbitrary www A record for that workflow. Entries marked managed: true belong to an application and are read-only here. Do not use their observation keys as editable record IDs.
6. Add a blog record and verify it
The addresses 192.0.2.10 and 192.0.2.20 below are documentation addresses, not usable hosting targets. Replace them with your server's real IPv4 address before executing. If a service gives you a CNAME target instead, use its exact record type and value.
nameslink dns records add "YOUR_DOMAIN" --name blog --type A --value 192.0.2.10 --ttl 600
The proposed change is:
| Field | Example |
|---|---|
| Host | blog.YOUR_DOMAIN |
| Type | A |
| Value | Your server's IPv4 address |
| TTL | 600 seconds |
Review the zone, name, type, value, and TTL. The terminal requires confirm followed by the actual domain and may request MFA. Use the real prompts; never paste verification codes into command arguments or shell history.
The CLI normally follows the DNS task. If it returns a pending task, use the returned status command. For a TASK receipt, the command has this form; use BATCH instead only if the receipt says so:
nameslink dns operations show TASK <operation-id> --watch --json
nameslink dns records list "YOUR_DOMAIN" --name blog --type A --json
Check the matching record's returned id, name, and value. Then query public DNS, using the actual complete hostname:
nslookup -type=A blog.YOUR_DOMAIN
The task can succeed before recursive caches refresh. Check the authoritative delegation, answer, and TTL; do not repeatedly add the same record. A DNS answer also does not prove that your web server or HTTPS is ready.
7. Update or remove that same record
Use the editable record ID obtained above, rather than a task ID or a record from another zone. Check it before each change:
nameslink dns records show "YOUR_DOMAIN" <record-id> --json
nameslink dns records update "YOUR_DOMAIN" <record-id> --value 192.0.2.20 --ttl 600
nameslink dns records list "YOUR_DOMAIN" --name blog --type A --json
If the update is still pending, follow its returned operation-status command as in step 6. After it succeeds, run nslookup -type=A blog.YOUR_DOMAIN again and check the new real IP, allowing for the previous TTL.
For cleanup, first check the exact record again. Delete only the record you intend to remove, approve the displayed deletion, and verify the result:
nameslink dns records show "YOUR_DOMAIN" <record-id> --json
nameslink dns records delete "YOUR_DOMAIN" <record-id>
nameslink dns records list "YOUR_DOMAIN" --name blog --type A --json
Wait for the deletion task to succeed, then confirm that this record ID is absent from the list. Query public DNS again after the relevant cache TTL; other records for the same name may still produce answers. Deleting one record does not require the whole name to return NXDOMAIN.
Deleting a DNS record does not cancel or refund the domain registration.
To publish the studio page next, return to the static-hosting example. A purchased domain and available hosting resources are separate checks; use the current hosting capability and domain selector to confirm eligibility.
Use the official Skill
Install the official Skill in a compatible tool, then give that tool one task at a time:
Check the domains I already own. If I need a new one, show me available choices, then obtain a Plan for the domain I select. Show the exact term, currency, total, and wallet balance before asking me to approve purchase. After registration succeeds, propose a blog A record using the server IP I provide. Ask separately before creating, updating, or deleting DNS.
Purchase automation binds approval to the returned Plan digest; DNS automation uses its own reviewed change and --yes. Neither skips MFA. In JSON mode, follow the same challenge's returned send-code and secure code-file continuation commands. See interruption recovery.