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 for the current user with optional pagination and sorting. Admins can filter by user to view contacts for specific users. When using API key authentication, requires "contacts.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-
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

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 (validated against country format)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_numberStringUpdate phone number (validated in handler)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. This endpoint uses database-driven organizationAllowed fields to determine when to use clone contacts. For .it domains, requirements are handled through raw_additional_required_info instead of registry files. The endpoint performs comprehensive validation including registry quote checks, and if validation fails, all changes are rolled back. Returns structured field validation errors with INPUT_002 (INVALID_PARAMETERS) error code when field-level issues occur. Use GET /tlds/required_info first to determine what fields are needed - fields not listed there may be auto-generated. When using API key authentication, requires "contacts.required_info" permission.

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

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/{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

/domain_names

GET/domain_names

Handler: domain_names/GetDomainNames

Description: Get all domain names for the current user. Returns an array of domain objects with full details including owner information, TLD properties, status, and associated plans. Supports searching through domain names and TLDs (e.g., "site", "eu", "ite.e", ".nl"). Admins can filter by user to view 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-
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 only available and, when present for unavailable domains, reason.

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, and email blocking status.

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

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}/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: Update DNS records for a domain. This endpoint performs a complete replacement of all DNS records - any records not included in the request will be deleted. The domain must have DNS control enabled and be in active status. Record names must be subdomains of the domain (e.g., "www.example.com." or "example.com."). NS records cannot be set at the root level. CNAME records cannot be set at the root level and cannot coexist with other record types at the same subdomain. Duplicate records (same name, type, and value) are not allowed. When using API key authentication, requires "domains.dns.modify" permission. 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."}]}

Parameters & Try It Out:

ParameterTypeDescriptionValidationTest Value
id *
(Path Parameter)
IntegerID of the domain_nameRequired Integer
dns_records *StringArray of DNS records to set for the domain. Each record must have: name (FQDN with trailing dot), type (A, AAAA, CNAME, MX, TXT, NS, SRV, etc.), ttl (60, 300, 3600, 7200, 14400, 28800, or 86400), and value (record content). This completely replaces all existing DNS records for the domain.-

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}/update_dns_control

Handler: domain_names/UpdateDnsControl

Description: Enable or disable DNS control for a domain. When enabling, the endpoint updates registry nameservers to the application host defaults, recreates the DNS zone using default records, and enables DNSSEC when supported by the TLD. When disabling, it removes the DNS zone, clears registry key data for DNSSEC TLDs, and removes domain redirections. Returns the same domain payload shape as GET /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 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: Update nameservers for an active domain. If DNS control is currently enabled, the endpoint disables DNS control, removes the PowerDNS zone, clears registry DNSSEC key data for DNSSEC TLDs, and enables advanced settings before storing the new nameserver settings. Glue records are created or updated at the registry when ips are supplied. Returns the same domain payload shape as GET /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 domain_nameRequired Integer
domain_name_server_settings *StringNameserver settings object with a name_servers array. Each nameserver must include name and may include comma-separated ips for glue records. Example: {"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

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, and outgoing email block status. 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 PowerDNS 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}/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 PowerDNS zone using application host default nameservers and DNS records. When disabling, it removes the PowerDNS 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 *StringArray of DNS records to set for the external domain. Each record must have: name (FQDN with trailing dot), type, ttl, and value. This completely replaces all existing DNS records for the external domain.-

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

/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.

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 detailed information for a specific all-in-one plan by ID. Returns the plan with all its details including plan specifications, associated domain names (both internal and external), webhosting/reseller accounts, and available upgrade options.

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 what additional information is required for a contact to register a specific TLD. This endpoint now returns ALL fields from raw_additional_required_info (both mandatory and non-mandatory fields). Domains with only non-mandatory missing fields are automatically validated at the registry in the background, and if successful, their handles are saved and they are filtered out from the response. Domains that already have handles saved in extra_handles are also skipped. Different registries have different requirements based on domain extension, contact type (individual/company), and contact country. Without parameters, checks current shopping cart. This endpoint automatically handles field auto-generation in the background - fields that can be auto-generated (e.g., identification numbers for non-Spanish contacts on .es domains) will not appear in the required fields list.

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