Website and domains
Domains, DNS and the brand website.
Privacy and analytics
We use necessary technical cookies and, only with your consent, analytics and marketing pixels to improve the website and measure campaigns.
Domains, DNS and the brand website.
Updated on January 1, 1970
Proposes domain labels tied to the brand name and checks availability and price of each in the brand's extensions. exclude lists labels already shown. Reserves and buys nothing. needs_name means the brand has no name yet.
| Field | Value |
|---|---|
| Kind | Read |
| HTTP method | POST /api/v1/site.domains.ideas |
| MCP tool | site_domains_ideas |
| Scope | site.read |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
exclude?: string[] // ≤ 100 items · default []
}Output
{
status: string
}Creates (without contactId) or edits a holder contact used to register or transfer domains. tld decides which fields the registry requires (.es asks for a tax id). Fails with invalid_input and detail invalid_contact; the screen shows the field errors returned in errors.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.contact_save |
| MCP tool | site_domains_contact_save |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
contactId?: string | null
contact: {
entityType: "person" | "company"
firstName: string // ≤ 200
lastName: string // ≤ 200
organization?: string | null
taxId?: string | null
email: string // ≤ 300
phone: string // ≤ 60
address1: string // ≤ 300
address2?: string | null
city: string // ≤ 200
state?: string | null
postalCode: string // ≤ 40
country: string // ≤ 60
}
tld?: string // ≤ 200 · default "com"
label?: string | null
makeDefault?: boolean
}Output
{
contact: {
id: string
}
| null
errors: Record<string, string> | null
}Stops offering one holder contact for new domains. Domains already registered with it keep it. Fails with not_found when it is not this brand's.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.contact_archive |
| MCP tool | site_domains_contact_archive |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
contactId: string // ≤ 64 · Id of a saved holder contact (see the contacts of the domain screen).
}Output
{
ok: true
}Opens the registration order of a domain for the brand with a holder contact. The price is quoted again on the server; premium names need confirmPremium. Charges nothing yet: the order is paid afterwards by someone who pays for the brand. Never an agent's to start.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.purchase_start |
| MCP tool | site_domains_purchase_start |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
domain: string // ≤ 253 · Full domain name, e.g. `mybrand.com`.
contactId: string // ≤ 64 · Id of a saved holder contact (see the contacts of the domain screen).
confirmPremium?: boolean
}Output
{
domainOrderId: string
brandDomainId: string
order: {
id: string
kind: string
status: string
} // A domain order as the brand sees it: kind, status and what is still due.
}Tells whether a domain held at another registrar can be transferred to Nömad, whether it needs the authorization code, whether it adds a year and what it costs. Changes nothing.
| Field | Value |
|---|---|
| Kind | Read |
| HTTP method | POST /api/v1/site.domains.transfer_quote |
| MCP tool | site_domains_transfer_quote |
| Scope | site.read |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
domain: string // ≤ 253 · Full domain name, e.g. `mybrand.com`.
}Output
{
domain: string
transferable: boolean
}Opens the order that brings a domain from another registrar, with its authorization code and holder. It is paid first and transferred afterwards. Never an agent's to start.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.transfer_start |
| MCP tool | site_domains_transfer_start |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
domain: string // ≤ 253 · Full domain name, e.g. `mybrand.com`.
authCode?: string | null
contactId: string // ≤ 64 · Id of a saved holder contact (see the contacts of the domain screen).
confirmPremium?: boolean
}Output
{
domainOrderId: string
brandDomainId: string
order: {
id: string
kind: string
status: string
} // A domain order as the brand sees it: kind, status and what is still due.
}Opens the renewal order of one of the brand's domains. It is charged when the order is paid. Never an agent's to start.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.renewal_start |
| MCP tool | site_domains_renewal_start |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
}Output
{
domainOrderId: string
brandDomainId: string
order: {
id: string
kind: string
status: string
} // A domain order as the brand sees it: kind, status and what is still due.
}Opens the order that restores a domain in its redemption period. It is charged when the order is paid. Never an agent's to start.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.restore_start |
| MCP tool | site_domains_restore_start |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
}Output
{
domainOrderId: string
brandDomainId: string
order: {
id: string
kind: string
status: string
} // A domain order as the brand sees it: kind, status and what is still due.
}Prepares the card payment of a domain order (Stripe PaymentIntent) and returns its client secret for the payment form. Only people who pay for the brand, never staff and never an agent. paid is true when nothing is left to pay.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.payment_start |
| MCP tool | site_domains_payment_start |
| Scope | site.write |
| Minimum role | Billing |
| Human confirmation | Yes |
| Doors | Screens, Apps |
| Status | Available |
Input
{
domainOrderId: string // ≤ 64
}Output
{
order: {
id: string
kind: string
status: string
} // A domain order as the brand sees it: kind, status and what is still due.
clientSecret: string | null
publishableKey: string
paid: boolean
}After the payment form confirms, reads the payment again from Stripe and registers the paid domain right away. Returns the order as it stands.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.payment_confirm |
| MCP tool | site_domains_payment_confirm |
| Scope | site.write |
| Minimum role | Billing |
| Human confirmation | No |
| Doors | Screens, Apps |
| Status | Available |
Input
{
domainOrderId: string // ≤ 64
}Output
{
id: string
kind: string
status: string
}Turns automatic renewal of one active or expired domain on or off. With it on, the renewal is charged each year. Fails with domain_not_renewable for other states.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.auto_renew_set |
| MCP tool | site_domains_auto_renew_set |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
autoRenew: boolean
}Output
{
autoRenew: boolean
}Links a domain registered elsewhere to the brand, at no charge, and returns the DNS records to set at that registrar (connection). already_yours and held_elsewhere explain a refusal.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.link |
| MCP tool | site_domains_link |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
domain: string // ≤ 253 · Full domain name, e.g. `mybrand.com`.
registrar?: string | null
}Output
{
brandDomainId: string
connection: {
domain: string
status: string
} // How a domain registered elsewhere is pointed at Nömad: the records to set and the ones still missing.
}Replaces the editable DNS records of a domain whose zone Nömad manages with records (type, name, value, ttl, priority…). Each change is kept and can be undone with site.domains.dns_undo. Invalid records come back per index.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.dns_save |
| MCP tool | site_domains_dns_save |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
records: unknown[] // ≤ 1000 items
}Output
{
ok: boolean
}Adds the records of one preset (an email provider, a site host, a verification) to the domain's zone. Can be undone with site.domains.dns_undo. preset_unavailable for an unknown preset.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.dns_preset |
| MCP tool | site_domains_dns_preset |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
preset: string // ≤ 60
}Output
{
ok: boolean
}Points a registered domain back at Nömad's nameservers (default) or delegates it to other ones (custom, up to 13). With custom nameservers Nömad no longer answers its DNS.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.nameservers_set |
| MCP tool | site_domains_nameservers_set |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
mode: "default" | "custom"
nameservers?: string[] // ≤ 50 items · default []
}Output
{
ok: true
}Turns on or off the registrar lock that prevents the domain from being transferred away. lock_not_supported when the extension has no lock.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.lock_set |
| MCP tool | site_domains_lock_set |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
locked: boolean
}Output
{
ok: true
}Puts the zone back as it was before one saved change (changeId, the latest). undo_unavailable when that change can no longer be undone.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.dns_undo |
| MCP tool | site_domains_dns_undo |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
changeId: string // ≤ 64
}Output
{
ok: boolean
}Issues the authorization code that moves the domain to another registrar. Only the owner of the brand (or staff managing it), after a sign-in that just happened; shown once and never stored. Never an agent's.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.auth_code_issue |
| MCP tool | site_domains_auth_code_issue |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
}Output
{
authCode: string
locked: boolean | null
}Sends the holder the registry's verification email again. Only while the registry still waits for it.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.verification_resend |
| MCP tool | site_domains_verification_resend |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
}Output
{
ok: true
}Sends again the email the holder uses to approve the transfer in progress. Only while the transfer waits for that approval.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.transfer_resend |
| MCP tool | site_domains_transfer_resend |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | No |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
brandDomainId: string // ≤ 64 · Id of the brand domain (`brand_domains.id`).
}Output
{
ok: true
}First version of the «Elige tu dominio» step: records the chosen domain with the price quoted now and hands the step in. Charges and registers nothing. taken, confirm_premium, already_yours, held_elsewhere and done explain a refusal.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.task_choose |
| MCP tool | site_domains_task_choose |
| Scope | site.write |
| Minimum role | Member |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
taskId: string // ≤ 64 · Id of the work's «Elige tu dominio» step.
domain: string // ≤ 253
confirmPremium?: boolean
}Output
{
ok: true
}First version of «Ya tengo dominio»: records the domain the brand already has, where it is registered and how the team reaches it, and hands the step in. Charges nothing.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.task_declare |
| MCP tool | site_domains_task_declare |
| Scope | site.write |
| Minimum role | Member |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
taskId: string // ≤ 64 · Id of the work's «Elige tu dominio» step.
domain: string // ≤ 253
registrar?: string // ≤ 200 · default ""
access?: string // ≤ 2000 · default ""
}Output
{
ok: true
}Opens the registration order inside the work's domain step: the order carries the work, so the contract's «Dominio» extra is credited. Needs a named brand (needs_name); catalogue test runs never order (test_run). Never an agent's to start.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.task_order |
| MCP tool | site_domains_task_order |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
taskId: string // ≤ 64 · Id of the work's «Elige tu dominio» step.
domain: string // ≤ 253
contactId: string // ≤ 64 · Id of a saved holder contact (see the contacts of the domain screen).
confirmPremium?: boolean
}Output
{
domainOrderId: string
brandDomainId: string
order: {
id: string
kind: string
status: string
} // A domain order as the brand sees it: kind, status and what is still due.
}Opens the transfer order inside the work's domain step; the order carries the work (pay first, then transfer). Catalogue test runs never transfer (test_run). Never an agent's to start.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.task_transfer |
| MCP tool | site_domains_task_transfer |
| Scope | site.write |
| Minimum role | Admin |
| Human confirmation | Yes |
| Doors | API, Screens, Apps |
| Status | Available |
Input
{
taskId: string // ≤ 64 · Id of the work's «Elige tu dominio» step.
domain: string // ≤ 253
authCode?: string | null
contactId: string // ≤ 64 · Id of a saved holder contact (see the contacts of the domain screen).
confirmPremium?: boolean
}Output
{
domainOrderId: string
brandDomainId: string
order: {
id: string
kind: string
status: string
} // A domain order as the brand sees it: kind, status and what is still due.
}Links a domain registered elsewhere inside the work's domain step, at no charge, and hands the step in with the DNS records to set.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.task_link |
| MCP tool | site_domains_task_link |
| Scope | site.write |
| Minimum role | Member |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
taskId: string // ≤ 64 · Id of the work's «Elige tu dominio» step.
domain: string // ≤ 253
registrar?: string | null
}Output
{
brandDomainId: string
}Hands the «Elige tu dominio» step in once nothing is left for the brand: the order is paid or covered by the contract. payment_pending while it is not.
| Field | Value |
|---|---|
| Kind | Write |
| HTTP method | POST /api/v1/site.domains.task_complete |
| MCP tool | site_domains_task_complete |
| Scope | site.write |
| Minimum role | Member |
| Human confirmation | Yes |
| Doors | API, MCP, Screens, Apps |
| Status | Available |
Input
{
taskId: string // ≤ 64 · Id of the work's «Elige tu dominio» step.
}Output
{
ok: true
}