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_code *StringPostal/ZIP code (validated against country format)Custom: postalCodeValidation, Min: 1, 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
INPUT_001Invalid input data - returns field-specific errors in response body
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)
FIELD_COUNTRY_001Country ID not found in database
DB_001Database error occurred while creating contact
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 codeMin: 1, 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
INPUT_001Invalid input data - invalid country_id or phone number not valid for new country
CONTACT_NOT_FOUNDContact not found
CONTACT_NOT_OWNEDYou do not have permission to update this contact
FIELD_POSTAL_001Postal code format invalid for the specified country
REG_001Domain registry API error occurred
REG_002Failed to update contact at domain registry
REG_004Contact data does not meet domain registry requirements
DB_001Database error occurred while updating contact
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 RTR 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.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
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
CONTACT_NOT_FOUNDContact not found
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
REG_001Failed to update contact at registry or RTR validation failed
DB_001Database error occurred while updating required info

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
INPUT_001Invalid contact ID
CONTACT_NOT_FOUNDContact not found
CONTACT_NOT_OWNEDYou do not have permission to delete this contact
CONTACT_DEFAULTCannot delete default contact
CONTACT_HAS_DOMAINSCannot delete contact with active domain names
DB_001Database error occurred while deleting contact

/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

/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/{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
INPUT_001Invalid domain ID
DOMAIN_NOT_FOUNDDomain not found
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching domain

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
DOMAIN_NOT_FOUNDDomain not found
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
EXT_001Failed to update DNS records

/mcp

GET/mcp

Handler: mcp/ProcessMCPRequest

Description: MCP (Model Context Protocol) endpoint for supplier management. Same permission requirements as POST method.

Try It Out:

POST/mcp

Handler: mcp/ProcessMCPRequest

Description: MCP (Model Context Protocol) endpoint for supplier and domain management. IMPORTANT: MCP tools require BOTH an MCP tool permission AND the corresponding API endpoint permission. For example, getDomainNames requires mcp_tools:["getDomainNames"] AND api_endpoints:["domains.view"]. This dual-permission model provides defense-in-depth security.

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:

/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
INPUT_001Invalid plan ID
GENERAL_001Plan not found
AUTH_006API key lacks required permission: domains.view
DB_001Database error occurred while fetching plan

/tlds

GET/tlds

Handler: tlds/GetTlds

Description: Get all top-level domains with pricing information

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

Try It Out:

Possible Errors:

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

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 via RTR 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
INPUT_002Both contact_id and tld must be provided together
CONTACT_NOT_FOUNDContact not found
DB_001Database error occurred while fetching required info