API Documentation - V2

Authentication: This API supports two authentication methods:

API Key Configuration

Enter your API key here to use it for all test requests. The key will be saved in your browser.

/contacts

GET/contacts

Handler: contacts/GetContacts

Description: Get all contacts of the current user, with optional pagination and sorting. Admins can filter by user. phone_number is a string of national digits (keep leading zeros) and address.country.callingCode is the country calling code. VAT percentages can have decimals. API keys need contacts.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of items per pageMin: 1, Max: 100
paginationBooleanEnable or disable pagination-
sort_byStringField to sort by. Currently only supports "id". Default is "id"One of: id
sort_orderStringSort order - accepts "ASC" or "DESC" (case-insensitive). Default is "ASC"One of: ASC, DESC, asc, desc
userIntegerFilter by user ID (admin only)Min: 1
searchStringSearch contacts by first name, last name, company name, or full name combinationsMin: 1, Max: 255

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: contacts.view
DB_001Database error occurred while fetching contacts

GET/contacts/{id}

Handler: contacts/GetContact

Description: Get a specific contact by ID using the same contact format as GET /contacts. phone_number contains national significant digits as a string, preserving significant leading zeros; combine it with address.country.callingCode when submitting a country-prefixed phone number.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
CONTACT_NOT_FOUNDContact not found
DB_001Database error occurred while fetching contact

POST/contacts

Handler: contacts/CreateContact

Description: Create a new contact for the current user. When using API key authentication, requires "contacts.create" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
first_name *StringContact first nameMin: 1, Max: 100
last_name *StringContact last nameMin: 1, Max: 100
company_nameStringCompany name (optional)Max: 200
email *EmailContact email addressMax: 255
phone_number *StringPhone number as a string: national digits, or the country calling code followed by the national digits (for example 390212345678). Without + or 00.Custom: phoneCountryValidation
vat_numberStringVAT number (validated via VIES for EU countries)Max: 50
is_defaultBooleanSet as default contact-
address.address_line_first *StringPrimary address lineMin: 1, Max: 255
address.address_line_secondStringSecondary address line (optional)Max: 255
address.address_line_thirdStringThird address line (optional)Max: 255
address.city *StringCity nameMin: 1, Max: 100
address.postal_codeStringPostal/ZIP code (required only when country has postal codes; validated against country format when applicable)Max: 20
address.stateStringState or province (optional)Max: 100
address.country_id *IntegerCountry ID from countries tableMin: 1

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: contacts.create
DB_001Database error occurred while creating contact
FIELD_COUNTRY_001Country ID not found in database
FIELD_PHONE_001Phone number format invalid for the specified country
FIELD_POSTAL_001Postal code format invalid for the specified country
FIELD_VAT_001VAT number validation failed via VIES API (EU countries only)
INPUT_001Invalid input data - returns field-specific errors in response body
Field Validation Error Response Format:

When field validation fails (error code INPUT_001), the response includes field-specific error details:

{
    "status": "error",
    "code": "INPUT_001",
    "message": "Invalid input data",
    "fields": {
        "phone_number": [
            "phone.constraint.invalid"
        ],
        "address.postal_code": [
            "postalCode.constraint.invalid"
        ],
        "address.country_id": [
            "country.not.found"
        ]
    }
}

Validation Details:

PATCH/contacts/{id}

Handler: contacts/UpdateContact

Description: Update contact fields (email, phone, VAT info, address). Country changes are not allowed - create a new contact instead. VAT percentage and type are automatically recalculated when postal_code or vat_number change. Changes are synced with domain registries if applicable. When using API key authentication, requires "contacts.modify" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the contactRequired Integer
emailEmailUpdate email addressMax: 255
phone_numberStringPhone number as a string: national digits, or the country calling code followed by the national digits (for example 390212345678). Without + or 00.Max: 20
vat_numberStringUpdate VAT numberMax: 50
is_defaultBooleanSet as default contact-
address.address_line_firstStringUpdate primary address lineMin: 1, Max: 255
address.address_line_secondStringUpdate secondary address lineMax: 255
address.address_line_thirdStringUpdate third address lineMax: 255
address.cityStringUpdate cityMin: 1, Max: 100
address.postal_codeStringUpdate postal/ZIP code (required only for countries with postal codes)Max: 20
address.stateStringUpdate state or provinceMax: 100

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: contacts.modify
CONTACT_NOT_FOUNDContact not found
CONTACT_NOT_OWNEDYou do not have permission to update this contact
DB_001Database error occurred while updating contact
FIELD_POSTAL_001Postal code format invalid for the specified country
INPUT_001Invalid input data - invalid country_id or phone number not valid for new country
REG_001Domain registry API error occurred
REG_002Failed to update contact at domain registry
REG_004Contact data does not meet domain registry requirements
Automatic Behaviors:
Example Request:
{
    "vat_number": "DE123456789",
    "company_name": "New Company GmbH",
    "address": {
        "country_id": 81
    }
}

PATCH/contacts/{id}/required_info

Handler: contacts/UpdateContactRequiredInfo

Description: Add registry-specific required information to a contact. Use GET /tlds/required_info first to see which fields are needed; fields not listed there are filled in automatically. The information is checked at the registry: if that fails, nothing is saved and field errors are returned (INPUT_002). API keys need contacts.required_info.

Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the contactRequired Integer
registry *
(Request Body)
StringRegistry name (e.g., "Esnic", "Tci", "IisSe")Required String
tld *
(Request Body)
StringTop-level domain (e.g., ".es", ".tk", ".se")Required String
properties
(Request Body)
ObjectRegistry-specific fields as key-value pairs. The required fields vary by registry and TLD. Some fields may be auto-generated based on contact country and type. Use GET /tlds/required_info to check what fields are required for your specific case. Leave empty if all fields are auto-generated.
Example: {"RegistryName.fieldName":"value"}
Object

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: contacts.required_info
CONTACT_NOT_FOUNDContact not found
DB_001Database error occurred while updating required info
INPUT_001Invalid contact ID or JSON format
INPUT_002Missing required fields, field validation errors, or invalid registry/TLD combination. Returns structured field errors in response body
REG_001Failed to update contact at registry or registry validation failed
REG_003Contact is not synchronized with registry
REG_004Field validation failed - invalid format
REG_005Contact already has all required properties for this registry
REG_006Contact type (individual/organization) does not meet domain requirements

DELETE/contacts/{id}

Handler: contacts/DeleteContactById

Description: Delete a specific contact by ID. When using API key authentication, requires "contacts.delete" permission.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: contacts.delete
CONTACT_DEFAULTCannot delete default contact
CONTACT_HAS_DOMAINSCannot delete contact with active domain names
CONTACT_NOT_FOUNDContact not found
CONTACT_NOT_OWNEDYou do not have permission to delete this contact
DB_001Database error occurred while deleting contact
INPUT_001Invalid contact ID

/countries

GET/countries

Handler: countries/GetCountries

Description: Get all countries with optional sorting. callingCode is the international country calling code as an integer, without + or 00 (for example, 1 for Antigua and Barbuda and Barbados). For contact phone requests, concatenate callingCode with the national significant digits as strings, preserving significant leading zeros. vatPercentage is a number that may include decimals, such as 25.5.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of items per pageMin: 1, Max: 100
paginationBooleanEnable or disable pagination-
sort_byStringField to sort by. Options: "id", "countryCode". Default is "countryCode"One of: id, countryCode
sort_orderStringSort order - accepts "ASC" or "DESC" (case-insensitive). Default is "ASC"One of: ASC, DESC, asc, desc
searchStringSearch for exact country code match (e.g., "NL", "SG", "US"). Must be exactly 2 characters. Case-insensitive.-

Possible Errors:

DB_001Database error occurred while fetching countries

GET/countries/{id}

Handler: countries/GetCountry

Description: Get a specific country by ID

Try It Out:

Possible Errors:

COUNTRY_001Country not found
DB_001Database error occurred while fetching country

/dns_templates

GET/dns_templates

Handler: dns_templates/GetDnsTemplates

Description: Get DNS templates for the authenticated user. Returns templates with integer domain IDs and public DNS records only. When using API key authentication, requires "dns_templates.view" permission.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: dns_templates.view
DB_001Database error occurred while fetching DNS templates

GET/dns_templates/{id}

Handler: dns_templates/GetDnsTemplate

Description: Get a single DNS template by ID. Returns integer domain IDs and public DNS records only. When using API key authentication, requires "dns_templates.view" permission.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: dns_templates.view
DNS_TEMPLATE_001DNS template not found

POST/dns_templates

Handler: dns_templates/CreateDnsTemplate

Description: Create a DNS template for the authenticated user. Applies application-host default DNS records. domain_names must be an array of integer domain IDs owned by the user. When using API key authentication, requires "dns_templates.modify" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
nameStringName field-
domain_namesStringParameter value-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: dns_templates.modify
DNS_TEMPLATE_003A DNS template with this name already exists
DNS_TEMPLATE_004One or more domains are invalid or not owned by the user
DNS_TEMPLATE_005DNS template validation failed
INPUT_001Invalid payload shape or data types

PATCH/dns_templates/{id}

Handler: dns_templates/UpdateDnsTemplate

Description: Update DNS template metadata (name and/or linked domains). domain_names must be an array of integer domain IDs owned by the user. Does not modify dns_records. When using API key authentication, requires "dns_templates.modify" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the dns_templateRequired Integer
nameStringName field-
domain_namesStringParameter value-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: dns_templates.modify
DNS_TEMPLATE_001DNS template not found
DNS_TEMPLATE_003A DNS template with this name already exists
DNS_TEMPLATE_004One or more domains are invalid or not owned by the user
DNS_TEMPLATE_005DNS template validation failed
INPUT_001Invalid payload shape or data types

PATCH/dns_templates/{id}/update_dns_records

Handler: dns_templates/UpdateDnsTemplateDnsRecords

Description: Replace DNS records of a DNS template. Uses the same DNS validation/normalization logic as PATCH /domain_names/{id}/dns_records and preserves %domain% placeholders. Returns public records only. When using API key authentication, requires "dns_templates.modify" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the dns_templateRequired Integer
dns_recordsStringParameter value-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: dns_templates.modify
DNS_001DNS record validation failed. Check error.fields for indexed field details.
DNS_TEMPLATE_001DNS template not found
DNS_TEMPLATE_005DNS template validation failed
INPUT_001Invalid payload shape or data types

DELETE/dns_templates/{id}

Handler: dns_templates/DeleteDnsTemplate

Description: Delete DNS template by ID. Domain links are cleared by database foreign-key constraints. When using API key authentication, requires "dns_templates.modify" permission.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: dns_templates.modify
DNS_TEMPLATE_001DNS template not found

/domain_name_emails

GET/domain_name_emails

Handler: domain_name_emails/GetDomainNameEmails

Description: Get email addresses, forwarders, and catch-all addresses for owned regular and external domains. API key authentication requires domains.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
domain_name_idIntegerFilter by regular domain name IDMin: 1
domain_idIntegerAlias for domain_name_idMin: 1
external_domain_name_idIntegerFilter by external domain name IDMin: 1
userIntegerFilter by user ID (admin only)Min: 1

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching domain emails

GET/domain_name_emails/sync/process/{id}

Handler: domain_name_emails/GetSyncProcess

Description: Get the status of a domain email sync process. API key authentication requires domains.email.sync.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.email.sync
DB_001Database error occurred while fetching sync process
GENERAL_001Sync process not found

POST/domain_name_emails

Handler: domain_name_emails/CreateDomainNameEmail

Description: Create a mailbox, forwarder, or catch-all address on a regular or external domain. Requires an active plan, active regular domain status, linked mail server, and available plan email quota. API key authentication requires domains.email.manage.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
domain_name_idIntegerRegular domain name ID. Provide exactly one of domain_name_id/domain_id or external_domain_name_id.Min: 1
domain_idIntegerAlias for domain_name_id.Min: 1
external_domain_name_idIntegerExternal domain name ID. Provide exactly one of domain_name_id/domain_id or external_domain_name_id.Min: 1
emailStringMailbox/forwarder source email. Required for mailbox and forwarder creation. For catch-all, omit this field; if provided, it is ignored and @domain.tld is derived from the selected domain.Max: 512
type *StringEmail entry type: email, forwarder, or catchall.One of: email, forwarder, catchall
passwordStringMailbox password. Required for type=email.-
targetStringForwarder/catch-all target. Must be an existing mailbox in the authenticated user account. Forwarders may use comma-separated targets.Max: 512

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.email.manage
DB_001Database error occurred while creating domain email
INPUT_001Domain, plan, quota, or mail-server validation failed
INPUT_002Missing or invalid email fields

POST/domain_name_emails/{id}/sync

Handler: domain_name_emails/StartSync

Description: Start an async mailbox import from the remote mailbox into the local mailbox. Returns HTTP 202 with sync_direction, local_mailbox, remote_mailbox, and process status details. API key authentication requires domains.email.sync.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_name_emailRequired Integer
local_password *StringPassword for the local destination mailbox.-
remote_mail_server *StringRemote IMAP mail server hostname.-
remote_email_address *StringRemote mailbox email address.-
remote_password *StringRemote mailbox password.-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.email.sync
DB_001Database error occurred while starting sync
GENERAL_001Domain email not found
INPUT_001Sync validation failed or another sync is already running
INPUT_002Missing or invalid sync fields

PATCH/domain_name_emails/{id}/change_target

Handler: domain_name_emails/ChangeTarget

Description: Change the target for a forwarder or catch-all address. API key authentication requires domains.email.manage.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_name_emailRequired Integer
target *StringNew forwarder or catch-all target email. Must be an existing mailbox in the authenticated user account. Forwarders may use comma-separated targets.Max: 512

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.email.manage
DB_001Database error occurred while changing target
GENERAL_001Domain email or mail-server forwarding not found
INPUT_001Target change validation failed
INPUT_002Missing or invalid target

PATCH/domain_name_emails/{id}/change_password

Handler: domain_name_emails/ChangePassword

Description: Change mailbox password. Forwarders and catch-all addresses are rejected. API key authentication requires domains.email.manage.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_name_emailRequired Integer
password *StringNew mailbox password. Must contain uppercase, lowercase, number, and at least 6 characters.-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.email.manage
DB_001Database error occurred while changing password
GENERAL_001Domain email or mail-server user not found
INPUT_001Password change validation failed
INPUT_002Missing or invalid password

DELETE/domain_name_emails/{id}

Handler: domain_name_emails/DeleteDomainNameEmail

Description: Delete a mailbox, forwarder, or catch-all address. Mailbox deletion also creates a mail-server todo delete task. API key authentication requires domains.email.delete.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.email.delete
DB_001Database error occurred while deleting domain email
GENERAL_001Domain email not found

/domain_name_orders

GET/domain_name_orders

Handler: domain_name_orders/GetDomainNameOrders

Description: Get a concise list of domain name orders currently visible in the sidebar pending/problem product or pending domain views. Returns the same base fields as GET /domain_name_orders/{id}, without process attempts or live registry information. Results are ordered by ID descending. Admins can filter by user; other users only see their own orders. When using API key authentication, requires "domains.view" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of domain name orders per pageMin: 1, Max: 100
paginationBooleanEnable or disable pagination (default: true)-
userIntegerFilter by user ID (admin only)Min: 1

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching domain name orders
INPUT_001Invalid input parameters

GET/domain_name_orders/{id}

Handler: domain_name_orders/GetDomainNameOrder

Description: Get a domain name order by ID. Only rows currently visible in the sidebar pending/problem product or pending domain views are returned. Includes generic domain registry process attempt metadata and live registry process information with transfer information when available. When using API key authentication, requires "domains.view" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_name_orderRequired Integer
registry_process_idIntegerFetch live registry process information for this process ID. The process ID must belong to this domain name order. Defaults to the latest registry process ID for the order.Min: 1

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching domain name order
GENERAL_001Domain name order not found
INPUT_001Invalid domain name order ID

PATCH/domain_name_orders/{id}/cancel

Handler: domain_name_orders/CancelDomainNameOrder

Description: Cancel a pending domain name order. Supported products: Registration or Transfer. Eligible statuses: awaiting_required_info and transfer_failed. Non-admin users can only cancel their own orders; admin users can cancel any user's order. Positive-price orders are credited to the order owner's wallet through a manual invoice; zero-price orders are cancelled without an invoice. API key authentication requires "domains.order.cancel" permission.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.order.cancel
DB_001Database error occurred while cancelling domain name order
GENERAL_001Domain name order not found
INPUT_001Invalid domain name order ID or the order is not cancellable

/domain_names

GET/domain_names/premium_quote

Handler: domain_names/GetPremiumQuote

Description: Get the price of a premium domain name for registration, transfer or renewal. Renewal requires authentication (API keys need domains.view) and ownership of the domain name. Returns the total price in cents excluding VAT, the currency, the period and a quote_id that stays valid until expires_at (7 days). For a regular domain name only domain_name and premium: false are returned (plus available).

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
domain_name *StringFull domain name, for example example.com. The extension must be offered by this website.-
actionStringregistration (default), transfer or renewal. Renewal requires ownership of the domain name.One of: registration, transfer, renewal
order_periodIntegerNumber of minimum registration periods of the extension (default 1). Premium domain names can be ordered for at most 3 years.Min: 1, Max: 5

Possible Errors:

AUTH_002User session has expired
AUTH_003Authentication required (renewal)
AUTH_004Two-factor authentication incomplete
AUTH_006Missing domains.view permission (renewal)
DOMAIN_NOT_AVAILABLEDomain name no longer available (registration) or not registered (transfer)
DOMAIN_NOT_FOUNDDomain not found or not owned by caller (renewal)
DOMAIN_PERIOD_NOT_ALLOWEDPeriod longer than 3 years or not offered for this domain name
INPUT_002Invalid domain name, action or period
REG_001Price temporarily unavailable; try again later

GET/domain_names/{id}/incoming_spam_filter

Handler: domain_names/GetIncomingSpamFilter

Description: Get the incoming spam filter setting. Requires domains.email.spam_filter.view. Returns preset, enabled, status (applied, updating, failed, unknown or unavailable), can_change and a message that explains the status. While status is updating, read it again later.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003Authentication required
AUTH_004Two-factor authentication incomplete
AUTH_006Missing domains.email.spam_filter.view permission
DOMAIN_NOT_FOUNDDomain not found or not owned by caller
INPUT_001Invalid domain ID

GET/domain_names

Handler: domain_names/GetDomainNames

Description: Get all domain names of the current user, with owner, extension, status and plan details, and is_premium (true for a premium domain name). Supports searching domain names and extensions (see search). Admins can filter by user. API keys need domains.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of items per pageMin: 1, Max: 100
paginationBooleanEnable or disable pagination-
statusStringFilter by domain statusMax: 32
searchStringSearch domain names and TLDs. Examples: "site" finds site.eu, "eu" finds all domains with "eu" in name or TLD, "ite.e" finds site.eu and site.es, ".nl" finds all .nl domains-
userIntegerFilter by user ID (admin only)Min: 1
sort_byStringField to sort by. Valid options: id, registration_date, expiration_date, order_date, statusOne of: id, registration_date, expiration_date, order_date, status
sort_orderStringSort order. Valid options: asc (ascending) or desc (descending). Default: ascOne of: asc, desc, ASC, DESC

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching domain names
INPUT_001Invalid input parameters

GET/domain_names/check_availability

Handler: domain_names/CheckAvailability

Description: Check domain name availability at the domain registry. The endpoint validates that the TLD is offered by the current application host before calling the registry. Returns available, an optional reason for unavailable domains, and premium=true when the registry identifies a premium domain.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
domain_name *StringThe domain name to check for availability. The TLD must be offered for the current application host.-

Possible Errors:

INPUT_002Missing or invalid domain_name, unsupported domain format, subdomain input, or TLD not offered by this application host
REG_001Domain registry availability check failed

GET/domain_names/{id}

Handler: domain_names/GetDomainName

Description: Get detailed information for a specific domain by ID. Returns the domain with all its details including DNS records (if DNS control is enabled), domain name tags, email blocking status, incoming_spam_filter when email is enabled, and is_premium.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching domain
DOMAIN_NOT_FOUNDDomain not found
INPUT_001Invalid domain ID

GET/domain_names/{id}/logs

Handler: domain_names/GetDomainNameLogs

Description: Get the log book entries for a domain. Only the domain owner or an admin can view the logs. When using API key authentication, requires "domains.view" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of log entries per pageMin: 1, Max: 100
paginationBooleanEnable or disable pagination-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching domain logs
DOMAIN_NOT_FOUNDDomain not found
INPUT_001Invalid domain ID

GET/domain_names/{id}/dnssec

Handler: domain_names/GetDnssec

Description: Get the DNSSEC state for an owned registered domain. The response reports whether DNSSEC is supported and enabled, whether keys are managed automatically or manually, the registrar key data, TLD limits and algorithms, and an optimistic-concurrency hash. API key authentication requires domains.dnssec.view.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dnssec.view
DOMAIN_NOT_FOUNDDomain was not found or is not owned by the caller
EXT_001Failed to read DNSSEC state from the domain registry

POST/domain_names/punycode

Handler: domain_names/ConvertPunycode

Description: Convert a Unicode domain label or full domain name into ASCII punycode (UTS46 non-transitional mode). Example: "münchen" -> "xn--mnchen-3ya". If input contains a dot, TLD is extracted from input (first-pass) for IDN policy checks. language_codes is returned only when the extracted TLD matches domain_top_level and idn_language_codes contains a non-empty list.

Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
input *
(Request Body)
StringUnicode domain label or full domain name to convert. When input contains a dot, TLD is extracted from input and must exist in domain_top_level; unknown TLDs, non-IDN TLDs, and unsupported IDN characters for that TLD are rejected. On such errors, response may include error.supported_tlds for frontend suggestions.Required String

Possible Errors:

INPUT_002Missing or invalid input, unknown TLD, unsupported IDN characters for TLD, or TLD does not support IDN (may include error.supported_tlds suggestions)

POST/domain_names/unicode

Handler: domain_names/ConvertPunycodeToUnicode

Description: Convert an ASCII punycode domain name to Unicode. Input must start with "xn--", contain a dot, and use a TLD that exists in domain_top_level. Example: "xn--mnchen-3ya.com" -> "münchen.com".

Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
input *
(Request Body)
StringASCII punycode domain name to convert. Must start with "xn--" and include a known TLD (for example: xn--mnchen-3ya.com).Required String

Possible Errors:

INPUT_002Missing or invalid input, input does not start with xn--, missing dot/tld, unknown tld, or punycode conversion failed

PATCH/domain_names/{id}/incoming_spam_filter

Handler: domain_names/UpdateIncomingSpamFilter

Description: Change the incoming spam filter setting. Requires domains.email.spam_filter.manage. Settings can be saved as soon as active email hosting is enabled. The change is applied in the background: the response (HTTP 202) has the same fields as GET with status updating. A non-default preset waits for initial mail routing setup and verification before it is applied. Read GET until the status is applied.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
preset *StringSpam filter sensitivity for the whole domain name. off turns spam filtering off; virus and security checks stay active.One of: default, more_strict, very_strict, less_strict, even_less_strict, off
Example Request:
{
    "preset": "more_strict"
}

Possible Errors:

AUTH_002User session has expired
AUTH_003Authentication required
AUTH_004Two-factor authentication incomplete
AUTH_006Missing domains.email.spam_filter.manage permission
DOMAIN_NOT_FOUNDDomain not found or not owned by caller
INCOMING_SPAM_001Spam filter settings are temporarily unavailable
INCOMING_SPAM_002Only default is possible without active email hosting
INCOMING_SPAM_003Another change is in progress, or the setting needs a review by support
INPUT_001Invalid preset or unexpected request fields

PATCH/domain_names/{id}/assign_to_plan

Handler: domain_names/AssignToPlan

Description: Link an active registered domain name to an active all-in-one plan. The domain and plan must belong to the authenticated user unless the caller is an admin. The plan domain limit counts both registered and external domains. Returns the same domain payload shape as GET /domain_names/{id}. Requires API key permissions: domains.plan.manage and domains.view.

Parameters, Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
plan_id *IntegerAll-in-one plan ID to link this domain name toMin: 1
plan_id *
(Request Body)
IntegerAll-in-one plan ID to link this domain name toRequired Integer

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.plan.manage or domains.view
DB_001Database error occurred while linking domain to plan
DOMAIN_NOT_FOUNDDomain not found
EXT_001Failed to synchronize DNS side effects after linking domain to plan
GENERAL_001Plan not found
INPUT_001Invalid domain ID, inactive plan, inactive domain, already linked domain, or plan domain limit reached

PATCH/domain_names/{id}/remove_from_plan

Handler: domain_names/RemoveFromPlan

Description: Unlink a registered domain name from its all-in-one plan. Email and website builder must be disabled first; active webhosting does not block unlinking. Returns the same domain payload shape as GET /domain_names/{id}. Requires API key permissions: domains.plan.manage and domains.view.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.plan.manage or domains.view
DB_001Database error occurred while unlinking domain from plan
DOMAIN_NOT_FOUNDDomain not found
INPUT_001Invalid domain ID, domain is not linked to a plan, email is enabled, domain email entries exist, or website builder is enabled

PATCH/domain_names/{id}/dns_records

Handler: domain_names/UpdateDnsRecords

Description: Replace all DNS records of the domain name: records that are not in the request are deleted. The domain name must be active with DNS control enabled. Record names must be the domain name or a subdomain of it. NS and CNAME records are not allowed at the root, and a CNAME cannot share its name with other records. API keys need domains.dns.modify.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
dns_records *StringDNS records to set. Each record has name (with trailing dot), type (A, AAAA, CNAME, MX, TXT, NS, SRV, ...), ttl (60, 300, 3600, 7200, 14400, 28800 or 86400) and value.-
Example Request:
{
    "dns_records": [
        {
            "name": "www.example.com.",
            "type": "A",
            "ttl": 3600,
            "value": "192.0.2.1"
        },
        {
            "name": "example.com.",
            "type": "MX",
            "ttl": 3600,
            "value": "10 mail.example.com."
        }
    ]
}

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006User does not own this domain OR API key lacks required permission: domains.dns.modify
DNS_001DNS record validation failed. Check the fields array for specific validation errors with array indices (e.g., dns_records[2].name)
DNS_002DNS control is not enabled for this domain
DOMAIN_NOT_FOUNDDomain not found
EXT_001Failed to update DNS records

PATCH/domain_names/{id}/dnssec/keys

Handler: domain_names/UpdateDnssecKeys

Description: Replace manually managed DNSSEC keys at the registrar. This is allowed only for an active owned registered domain when DNS management is disabled. TLD record limits and allowed algorithms are enforced. API key authentication requires domains.dnssec.modify.

Parameters, Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
key_data *StringComplete desired registrar DNSSEC key set. Every key requires flags, protocol, algorithm, and public_key. Sending an empty array disables manually managed DNSSEC.-
expected_dnssec_hashStringOptional dnssec_hash from a prior GET. The update is rejected if the registrar key set changed.-
key_data *
(Request Body)
ArrayComplete desired DNSSEC key set; [] disables manual DNSSEC.Required Array
expected_dnssec_hash
(Request Body)
StringOptional optimistic-concurrency hash returned by GET /domain_names/{id}/dnssec.String

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dnssec.modify
DNSSEC_001DNSSEC key validation failed, including record limits or algorithms
DNSSEC_002Manual DNSSEC keys cannot be changed while DNS management is enabled or processing
DNSSEC_003The TLD does not support DNSSEC
DNSSEC_004The supplied DNSSEC state hash is stale
DOMAIN_NOT_FOUNDDomain was not found or is not owned by the caller
EXT_001Failed to update DNSSEC at the domain registry

PATCH/domain_names/{id}/dnssec/status

Handler: domain_names/UpdateDnssecStatus

Description: Enable or disable platform-managed DNSSEC for an active owned registered domain while DNS management is enabled. Enabling creates managed DNSSEC keys with registry-supported algorithm fallback and publishes the KSK. Disabling clears the registrar delegation before removing the authoritative DNSSEC keys. API key authentication requires domains.dnssec.modify.

Parameters, Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
is_dnssec_enabled *BooleanTrue to enable platform-managed DNSSEC; false to disable it.-
expected_dnssec_hashStringOptional dnssec_hash from a prior GET. The update is rejected if the registrar key set changed.-
is_dnssec_enabled *
(Request Body)
BooleanRequested platform-managed DNSSEC state.Required Boolean
expected_dnssec_hash
(Request Body)
StringOptional optimistic-concurrency hash returned by GET /domain_names/{id}/dnssec.String

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dnssec.modify
DNSSEC_001The domain is inactive or its managed DNS zone is unavailable
DNSSEC_002Managed DNSSEC cannot be toggled while DNS management is disabled or processing
DNSSEC_003The TLD has no supported DNSSEC algorithm
DNSSEC_004The supplied DNSSEC state hash is stale
DOMAIN_NOT_FOUNDDomain was not found or is not owned by the caller
EXT_001Failed to synchronize DNSSEC between the DNS provider and registry

PATCH/domain_names/{id}/update_dns_control

Handler: domain_names/UpdateDnsControl

Description: Enable or disable DNS control. Enabling recreates the DNS zone with default records and switches the nameservers, with DNSSEC where the extension supports it. Disabling removes DNSSEC, the DNS zone and the domain redirections. Returns the same domain object as GET /domain_names/{id}. API keys need domains.dns.control and domains.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
dns_control_enabled *BooleanEnable or disable DNS control.-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dns.control or domains.view
DNS_001DNS control state validation failed (already enabled/disabled, processing, or inactive domain)
DOMAIN_NOT_FOUNDDomain not found
EXT_001Failed to synchronize DNS control with external providers
INPUT_001Invalid domain ID or payload

PATCH/domain_names/{id}/update_name_servers

Handler: domain_names/UpdateNameServers

Description: Set the nameservers of an active domain name. If DNS control is enabled it is turned off first: the DNS zone and DNSSEC are removed and advanced settings are enabled. Glue records are created when ips are given. Returns the same domain object as GET /domain_names/{id}. API keys need domains.dns.control and domains.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
domain_name_server_settings *StringObject with a name_servers array. Each nameserver has a name and optional comma-separated ips (for glue records).-
Example Request:
{
    "domain_name_server_settings": {
        "name_servers": [
            {
                "name": "ns1.example.com",
                "ips": ""
            },
            {
                "name": "ns2.example.com",
                "ips": ""
            }
        ]
    }
}

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dns.control or domains.view
DNS_001Nameserver validation failed, domain must be active, or registry rejected the nameserver update
DOMAIN_NOT_FOUNDDomain not found
EXT_001Failed to synchronize nameservers with external providers
INPUT_001Invalid domain ID or payload

PATCH/domain_names/{id}/advanced_settings

Handler: domain_names/UpdateAdvancedSettings

Description: Enable or disable access to advanced settings for a domain. Only the domain owner can update this setting, and the domain must be active. Disabling also unlinks DNS template sync fields and repairs DNS records for linked services. Returns the same domain payload shape as GET /domain_names/{id}. API key authentication is allowed and requires domains.dns.control and domains.view permissions.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
access_to_advanced_settings *BooleanEnable or disable access to advanced settings.-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dns.control or domains.view
DB_001Database error occurred while updating advanced settings
DNS_001Domain advanced settings validation failed (domain must be active)
DOMAIN_NOT_FOUNDDomain not found
EXT_001Failed to synchronize DNS side effects
INPUT_001Invalid domain ID or payload

/external_domain_names

GET/external_domain_names/{id}/incoming_spam_filter

Handler: external_domain_names/GetIncomingSpamFilter

Description: Get the incoming spam filter setting. Requires domains.email.spam_filter.view. Returns preset, enabled, status (applied, updating, failed, unknown or unavailable), can_change and a message that explains the status. While status is updating, read it again later.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003Authentication required
AUTH_004Two-factor authentication incomplete
AUTH_006Missing domains.email.spam_filter.view permission
DOMAIN_NOT_FOUNDDomain not found or not owned by caller
INPUT_001Invalid domain ID

GET/external_domain_names

Handler: external_domain_names/GetExternalDomainNames

Description: Get all external domain names for the current user. Returns an array of brief external domain objects with linked plan and mail server information where available. Admins can filter by user to view external domains for specific users. When using API key authentication, requires domains.view permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of items per pageMin: 1, Max: 100
paginationBooleanEnable or disable pagination-
searchStringSearch external domain namesMin: 1, Max: 255
userIntegerFilter by user ID (admin only)Min: 1
sort_byStringField to sort by. Valid options: id, name, created_atOne of: id, name, created_at
sort_orderStringSort order. Valid options: asc (ascending) or desc (descending). Default: ascOne of: asc, desc, ASC, DESC

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching external domains
INPUT_001Invalid input parameters

GET/external_domain_names/{id}

Handler: external_domain_names/GetExternalDomainName

Description: Get detailed information for a specific external domain name by ID. Returns the external domain with linked plan, mail server, DNS records, domain redirections, email accounts, DNS record checks, outgoing email block status, and incoming_spam_filter when email is enabled. Only the owner or an admin can view the external domain. API key authentication is allowed and requires domains.view permission.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching external domain
DOMAIN_NOT_FOUNDExternal domain not found
INPUT_001Invalid external domain ID

POST/external_domain_names

Handler: external_domain_names/CreateExternalDomainName

Description: Create an external domain name for the current user. This endpoint only creates the external domain record; it does not enable DNS control, create managed DNS zones, attach plans, or update webhosting accounts. When using API key authentication, requires domains.create permission.

Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
name *
(Request Body)
StringExternal domain name to add, for example example.comRequired String

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.create
DB_001Database error occurred while creating external domain
INPUT_001Missing, invalid, duplicate, excluded, or already registered domain name

PATCH/external_domain_names/{id}/incoming_spam_filter

Handler: external_domain_names/UpdateIncomingSpamFilter

Description: Change the incoming spam filter setting. Requires domains.email.spam_filter.manage. Settings can be saved as soon as active email hosting is enabled. The change is applied in the background: the response (HTTP 202) has the same fields as GET with status updating. A non-default preset waits for initial mail routing setup and verification before it is applied. Read GET until the status is applied.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the external_domain_nameRequired Integer
preset *StringSpam filter sensitivity for the whole domain name. off turns spam filtering off; virus and security checks stay active.One of: default, more_strict, very_strict, less_strict, even_less_strict, off
Example Request:
{
    "preset": "more_strict"
}

Possible Errors:

AUTH_002User session has expired
AUTH_003Authentication required
AUTH_004Two-factor authentication incomplete
AUTH_006Missing domains.email.spam_filter.manage permission
DOMAIN_NOT_FOUNDDomain not found or not owned by caller
INCOMING_SPAM_001Spam filter settings are temporarily unavailable
INCOMING_SPAM_002Only default is possible without active email hosting
INCOMING_SPAM_003Another change is in progress, or the setting needs a review by support
INPUT_001Invalid preset or unexpected request fields

PATCH/external_domain_names/{id}/assign_to_plan

Handler: external_domain_names/AssignToPlan

Description: Link an external domain name to an active all-in-one plan. The external domain and plan must belong to the authenticated user unless the caller is an admin. External domains do not have a domain status check; the plan domain limit counts both registered and external domains. Returns the same external-domain payload shape as GET /external_domain_names/{id}. Requires API key permissions: domains.plan.manage and domains.view.

Parameters, Request Body & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the external_domain_nameRequired Integer
plan_id *IntegerAll-in-one plan ID to link this external domain name toMin: 1
plan_id *
(Request Body)
IntegerAll-in-one plan ID to link this external domain name toRequired Integer

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.plan.manage or domains.view
DB_001Database error occurred while linking external domain to plan
DOMAIN_NOT_FOUNDExternal domain not found
EXT_001Failed to synchronize DNS side effects after linking external domain to plan
GENERAL_001Plan not found
INPUT_001Invalid external domain ID, inactive plan, already linked external domain, or plan domain limit reached

PATCH/external_domain_names/{id}/remove_from_plan

Handler: external_domain_names/RemoveFromPlan

Description: Unlink an external domain name from its all-in-one plan. Email and website builder must be disabled first; active webhosting does not block unlinking. Returns the same external-domain payload shape as GET /external_domain_names/{id}. Requires API key permissions: domains.plan.manage and domains.view.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.plan.manage or domains.view
DB_001Database error occurred while unlinking external domain from plan
DOMAIN_NOT_FOUNDExternal domain not found
INPUT_001Invalid external domain ID, external domain is not linked to a plan, email is enabled, domain email entries exist, or website builder is enabled

PATCH/external_domain_names/{id}/update_dns_control

Handler: external_domain_names/UpdateDnsControl

Description: Enable or disable DNS control for an external domain. When enabling, the endpoint recreates the managed DNS zone using application host default nameservers and DNS records. When disabling, it removes the managed DNS zone. Returns the same external-domain payload shape as GET /external_domain_names/{id}. Requires API key permissions: domains.dns.control and domains.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the external_domain_nameRequired Integer
dns_control_enabled *BooleanEnable or disable DNS control.-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dns.control or domains.view
DB_001Database error occurred while updating DNS control
DNS_001DNS control state validation failed (already enabled/disabled)
DOMAIN_NOT_FOUNDExternal domain not found
EXT_001Failed to synchronize DNS control with DNS provider
INPUT_001Invalid external domain ID or payload

PATCH/external_domain_names/{id}/advanced_settings

Handler: external_domain_names/UpdateAdvancedSettings

Description: Enable or disable access to advanced settings for an external domain. Disabling ensures external DNS control is enabled, repairs DNS records for linked services, and returns the same external-domain payload shape as GET /external_domain_names/{id}. Requires API key permissions: domains.dns.control and domains.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the external_domain_nameRequired Integer
access_to_advanced_settings *BooleanEnable or disable access to advanced settings.-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dns.control or domains.view
DB_001Database error occurred while updating advanced settings
DNS_001External domain advanced settings validation failed
DOMAIN_NOT_FOUNDExternal domain not found
EXT_001Failed to synchronize DNS side effects
INPUT_001Invalid external domain ID or payload

PATCH/external_domain_names/{id}/dns_records

Handler: external_domain_names/UpdateDnsRecords

Description: Update DNS records for an external domain. This endpoint performs a complete replacement of all DNS records except system-managed apex NS/SOA records. The external domain must have DNS control enabled. Record validation matches PATCH /domain_names/{id}/dns_records. When using API key authentication, requires domains.dns.modify permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the external_domain_nameRequired Integer
dns_records *StringDNS records to set. Each record has name (with trailing dot), type, ttl and value. Replaces all existing records.-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.dns.modify
DB_001Database error occurred while updating DNS records
DNS_001DNS record validation failed. Check the fields array for specific validation errors with array indices (e.g., dns_records[2].name)
DNS_002DNS control is not enabled for this external domain
DOMAIN_NOT_FOUNDExternal domain not found
EXT_001Failed to update DNS records
INPUT_001Invalid external domain ID or payload

/incoming_mail

GET/domain_names/{id}/incoming_sender_rules

Handler: domain_names/GetSenderRules

Description: View domain defaults covering all recipients, including future and catch-all addresses, or effective personal sender rules. The additive has_manage_permission field describes caller permission; gateway contains state (ready, waiting, review), reason, and verified_at. can_manage remains the effective save capability. Requires domains.email.sender_rules.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
scopeStringdomain or an owned recipient address-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

GET/domain_names/{id}/quarantine

Handler: domain_names/GetQuarantine

Description: List owned-domain quarantine metadata (40 queries, 10 seconds, 5,000 rows). complete=false means partial results; limited=true means a limit was reached. total counts checked matches. filter_recipients includes discovered catch-all addresses; recipients lists configured addresses. Narrow large lists by recipient/reason. sender_gateway reports sender-rule availability. Requires domains.email.quarantine.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
recipientStringall or an owned recipient-
reasonStringall, spam, virus, or attachment-
searchStringSubject or sender text, at most 200 characters-
pageIntegerPage starting at 1-
page_sizeInteger1 to 100; default 25-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

GET/domain_names/{id}/quarantine/{message_id}

Handler: domain_names/GetQuarantineMessage

Description: Get a bounded plain-text spam preview. Security holds expose metadata only. Requires domains.email.quarantine.content.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
message_id *
(Path Parameter)
StringMessage ID returned by the quarantine list.Required; 64 lowercase hexadecimal characters
recipientStringRecipient from the listing to avoid a broad rescan; ownership is rechecked-
reasonStringQuarantine reason from the listing-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
GENERAL_002Message is unavailable or no longer held
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

GET/external_domain_names/{id}/incoming_sender_rules

Handler: external_domain_names/GetSenderRules

Description: View domain defaults covering all recipients, including future and catch-all addresses, or effective personal sender rules. The additive has_manage_permission field describes caller permission; gateway contains state (ready, waiting, review), reason, and verified_at. can_manage remains the effective save capability. Requires domains.email.sender_rules.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
scopeStringdomain or an owned recipient address-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

GET/external_domain_names/{id}/quarantine

Handler: external_domain_names/GetQuarantine

Description: List owned-domain quarantine metadata (40 queries, 10 seconds, 5,000 rows). complete=false means partial results; limited=true means a limit was reached. total counts checked matches. filter_recipients includes discovered catch-all addresses; recipients lists configured addresses. Narrow large lists by recipient/reason. sender_gateway reports sender-rule availability. Requires domains.email.quarantine.view.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
recipientStringall or an owned recipient-
reasonStringall, spam, virus, or attachment-
searchStringSubject or sender text, at most 200 characters-
pageIntegerPage starting at 1-
page_sizeInteger1 to 100; default 25-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

GET/external_domain_names/{id}/quarantine/{message_id}

Handler: external_domain_names/GetQuarantineMessage

Description: Get a bounded plain-text spam preview. Security holds expose metadata only. Requires domains.email.quarantine.content.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
message_id *
(Path Parameter)
StringMessage ID returned by the quarantine list.Required; 64 lowercase hexadecimal characters
recipientStringRecipient from the listing to avoid a broad rescan; ownership is rechecked-
reasonStringQuarantine reason from the listing-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
GENERAL_002Message is unavailable or no longer held
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

POST/domain_names/{id}/incoming_sender_rules

Handler: domain_names/ChangeSenderRules

Description: Queue one sender-rule change. Address rules override domain defaults for the same sender pattern. Returns updating until PMG verification. Temporary shared gateway waits can queue a change; configurations requiring review reject saves. Existing fields and status values are unchanged. Requires domains.email.sender_rules.manage.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
scope *Stringdomain or an owned recipient address-
sender *StringOne sender email or wildcard pattern, e.g. *@example.com or sales?@example.com. * matches any text; ? matches one character. Unsupported legacy entries can only be removed. Empty string for retry-
action *Stringallow, block, normal (address only), remove, or retry (retry current policy without changing rules)-
version *IntegerVersion from the latest GET-
request_key *StringUnique retry key, 16 to 80 alphanumeric characters or hyphens-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

POST/domain_names/{id}/quarantine/actions

Handler: domain_names/ActOnQuarantine

Description: Act on owned spam messages with per-message results. Unknown delivery outcomes must not be retried under a new key. Requires domains.email.quarantine.release or domains.email.quarantine.delete.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
recipientStringRecipient filter used for the listing; ownership is rechecked-
reasonStringReason filter used for the listing-
ids *String1 to 50 opaque message IDs from GET quarantine-
action *Stringrelease or delete; spam only-
request_key *StringUnique retry key, 16 to 80 alphanumeric characters or hyphens-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

POST/external_domain_names/{id}/incoming_sender_rules

Handler: external_domain_names/ChangeSenderRules

Description: Queue one sender-rule change. Address rules override domain defaults for the same sender pattern. Returns updating until PMG verification. Temporary shared gateway waits can queue a change; configurations requiring review reject saves. Existing fields and status values are unchanged. Requires domains.email.sender_rules.manage.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
scope *Stringdomain or an owned recipient address-
sender *StringOne sender email or wildcard pattern, e.g. *@example.com or sales?@example.com. * matches any text; ? matches one character. Unsupported legacy entries can only be removed. Empty string for retry-
action *Stringallow, block, normal (address only), remove, or retry (retry current policy without changing rules)-
version *IntegerVersion from the latest GET-
request_key *StringUnique retry key, 16 to 80 alphanumeric characters or hyphens-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

POST/external_domain_names/{id}/quarantine/actions

Handler: external_domain_names/ActOnQuarantine

Description: Act on owned spam messages with per-message results. Unknown delivery outcomes must not be retried under a new key. Requires domains.email.quarantine.release or domains.email.quarantine.delete.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domainRequired Integer
recipientStringRecipient filter used for the listing; ownership is rechecked-
reasonStringReason filter used for the listing-
ids *String1 to 50 opaque message IDs from GET quarantine-
action *Stringrelease or delete; spam only-
request_key *StringUnique retry key, 16 to 80 alphanumeric characters or hyphens-

Possible Errors:

AUTH_006Missing the required permission
DOMAIN_NOT_FOUNDDomain not owned or unavailable
INCOMING_SPAM_001Mail gateway or feature unavailable
INCOMING_SPAM_002Active email hosting is required
INCOMING_SPAM_003Refresh current state before changing settings
INPUT_001Invalid input

/mcp

GET/mcp

Handler: mcp/ProcessMCPRequest

Description: MCP (Model Context Protocol) endpoint for supplier, domain, invoice, and translation management. Same permission requirements as POST method.

Try It Out:

POST/mcp

Handler: mcp/ProcessMCPRequest

Description: MCP (Model Context Protocol) endpoint for supplier, domain, invoice, and translation management. API-key authenticated MCP tool calls require the corresponding mcp_tools permission. Direct API endpoint calls use api_endpoints permissions.

MCP tool permissions:

Try It Out:

Possible Errors:

AUTH_003Invalid or missing authentication token
AUTH_006API key lacks required MCP tool permission

HEAD/mcp

Handler: mcp/ProcessMCPRequest

Description: MCP (Model Context Protocol) endpoint - HEAD request for connection verification

Try It Out:

OPTIONS/mcp

Handler: mcp/ProcessMCPRequest

Description: MCP (Model Context Protocol) endpoint - CORS preflight support

Try It Out:

/plans

GET/plans

Handler: plans/GetPlans

Description: Get all all-in-one plans for the current user. Returns an array of plan objects with full details including plan specifications (CPU, RAM, disk, bandwidth), associated domain names, webhosting accounts, and available upgrade options. Admins can filter by user to view plans for specific users. When using API key authentication, requires "domains.view" permission.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of items per pageMin: 1, Max: 100
paginationBooleanEnable or disable pagination-
statusStringFilter by plan status. Valid options: active, manually_expired, expired, deletedOne of: active, manually_expired, expired, deleted
userIntegerFilter by user ID (admin only)Min: 1
sort_byStringField to sort by. Valid options: id, created_at, expires_at, status, nameOne of: id, created_at, expires_at, status, name
sort_orderStringSort order. Valid options: asc (ascending) or desc (descending). Default: descOne of: asc, desc, ASC, DESC

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching plans
INPUT_001Invalid input parameters

GET/plans/{id}

Handler: plans/GetPlan

Description: Get one all-in-one plan by ID with its specifications, linked domain names, hosting accounts, upgrade options and usage. Usage covers storage, this month's hosting bandwidth, the number of domain names and the number of email addresses. Each metric has used, limit (null means unlimited), unit, status (ready, partial or unavailable) and observed_at; partial values are lower bounds.

Try It Out:

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching plan
GENERAL_001Plan not found
INPUT_001Invalid plan ID

/tlds

GET/tlds

Handler: tlds/GetTlds

Description: Get all top-level domains with pricing information and related TLD recommendations

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
pageIntegerPage number for paginationMin: 1
itemsPerPageIntegerNumber of items per page (max 100)Min: 1, Max: 100
paginationBooleanEnable or disable pagination (default: true)-
extensionStringFilter by TLD extension (e.g., ".com", ".net")Max: 512
tagStringFilter by TLD tagMax: 255

Possible Errors:

DB_001Database error occurred while fetching TLDs

GET/tlds/{id}

Handler: tlds/GetTld

Description: Get a specific top-level domain by ID, including related TLD recommendations

Try It Out:

Possible Errors:

DB_001Database error occurred while fetching TLD
GENERAL_001TLD not found
INPUT_001Invalid TLD ID

GET/tlds/required_info

Handler: tlds/GetRequiredInfo

Description: Check which extra information a contact needs to register domain names with a given extension. Returns mandatory and optional fields; requirements depend on the extension, the contact type (person or company) and the contact's country. Without parameters, the domain names in the current shopping cart are checked. Fields that are filled in automatically, and domain names that are already complete, are left out.

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
contact_idIntegerContact ID to check. If provided, tld must also be provided-
tldStringTLD to check (e.g., ".es", ".com"). If provided, contact_id must also be provided-

Possible Errors:

AUTH_002User session has expired
AUTH_003User is not logged in
AUTH_0042FA authentication not complete
CONTACT_NOT_FOUNDContact not found
DB_001Database error occurred while fetching required info
INPUT_002Both contact_id and tld must be provided together