ISPmanager Integration
NexDNS is fully compatible with the DNSmanager API, so you can connect NexDNS to ISPmanager as a secondary (slave) DNS server. ISPmanager stays the primary and, once you allow zone transfer (AXFR) from the NexDNS source IP, transfers each zone to NexDNS, so you keep managing records in ISPmanager. The full DNSmanager domain and record API is also available for direct use through a single compatibility endpoint.
Endpoint
All compatibility API calls are routed through a single endpoint:
https://api.nexdns.tech/dnsmgr
Authentication
The compatibility API authenticates with a dedicated integration login and secret that you generate in NexDNS under Account → Integrations (not your account password). ISPmanager sends them on every request; you can also open a session manually with the func=auth function and reuse the returned token.
curl -X POST "https://api.nexdns.tech/dnsmgr?func=auth" \
-d "username=your_integration_login" \
-d "password=your_integration_secret"
Successful response (XML):
<doc><auth id="SESSION_ID"/></doc>
You can request JSON output by adding out=json to any request. Repeated failed logins are temporarily throttled.
Supported Functions
The compatibility API dispatches operations based on the func query parameter:
| Function | Description |
|---|---|
auth |
Open a session with the integration login and secret |
domain |
List all domains for the authenticated account |
domain.edit |
Create or update a domain (with sok=ok); when ISPmanager sends its master IP, NexDNS creates a secondary zone that transfers from ISPmanager. Without sok, returns domain info |
domain.delete |
Delete a domain (pass elid=domain.name) |
domain.refresh |
Force a secondary zone to re-transfer from ISPmanager immediately (pass elid=domain.name). ISPmanager calls this after records change |
domain.record |
List records for a domain (pass elid=domain.name) |
domain.record.edit |
Create or update a record (with sok=ok) |
domain.record.delete |
Delete a record (pass elid and rkey) |
dnsparam |
Get the nameserver configuration for your account |
slaveserver |
List the nameservers assigned to your zones |
Connecting ISPmanager to NexDNS
To connect ISPmanager to NexDNS:
- Register a NexDNS account at nexdns.tech and choose a plan that includes ISPmanager integration and secondary DNS.
- Set up the integration in NexDNS: open Account → Integrations, click Generate secret, then turn on ISPmanager access (off by default). The channel bypasses two-factor authentication, so optionally pin it to a fixed IP address.
- In ISPmanager, add NexDNS as a secondary (slave) DNS server for your domains (Domain names → secondary name servers).
-
Enter connection details:
- URL:
https://api.nexdns.tech/dnsmgr - Login: your integration login from Account → Integrations
- Secret: your integration secret
- URL:
- Allow zone transfer (AXFR): on your primary DNS server, permit zone transfer from the NexDNS source IP shown in Account → Integrations. Without this, ISPmanager creates the secondary zone but it stays empty.
ISPmanager stays the primary and you keep managing records there; NexDNS pulls each zone as a secondary over AXFR. One-time step on your side: on your primary DNS server, allow zone transfer (AXFR) from the NexDNS source IP shown in Account → Integrations – otherwise zones appear empty. Authentication uses the integration login and secret from Account → Integrations; make sure ISPmanager access is enabled and your plan includes secondary DNS.
Record Parameters
When creating or updating records via domain.record.edit, the following parameters are used depending on the record type:
| Type | Parameters |
|---|---|
A / AAAA |
name, ip (or value), ttl |
CNAME / NS / PTR |
name, value, ttl |
MX |
name, value, priority, ttl |
SRV |
name, value, priority, weight, port, ttl |
TXT |
name, value, ttl |
CAA |
name, caa_value (or value), flag, tag, ttl |
For updates, pass rkey with the existing record ID. Omit rkey (or send empty) to create a new record.
Output Format
By default, all responses are returned as XML. Add out=json to any request to receive JSON responses instead.
API Key Management
API keys are used to authenticate requests to the NexDNS REST API. Each key is scoped with specific permissions and can optionally have an expiration date.
Creating an API Key
You can create API keys in two ways:
- Panel UI: Go to Settings > API Keys and click "Create API Key"
- REST API:
POST /v1/account/api-keys(requires an existing API key)
Key Format
API keys follow the format nxd_ followed by 40 random alphanumeric characters. The full key is shown only once at creation time. NexDNS stores only a hashed form of the key, so it cannot be recovered if lost.
nxd_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789abcd
Permissions
Each API key must be assigned at least one permission. Available permissions:
| Permission | Grants access to |
|---|---|
zones.read |
List zones, view zone details, export zones, view DNSSEC status |
zones.write |
Create zones, delete zones, enable/disable DNSSEC |
records.read |
List records, view individual records |
records.write |
Create, update, and delete records |
webhooks.read |
List and view webhooks |
webhooks.write |
Create, update, and delete webhooks |
We recommend granting each key only the permissions it needs.
Expiration
API keys can optionally have an expiration date. When set, the key will stop working after the specified date (checked at midnight UTC). Expired keys return a 401 Unauthorized response.
Revoking a Key
You can revoke any API key at any time from the Settings page or via the API. Revocation is immediate and permanent – the key is deleted, not disabled.
curl -X DELETE "https://api.nexdns.tech/v1/account/api-keys/{id}" \
-H "Authorization: Bearer nxd_your_api_key"
Plan Requirements
API access requires a subscription plan that includes the api_access feature.
Rate Limiting
The NexDNS API enforces rate limits to ensure fair usage and service stability. Rate limits are applied per user account (not per API key), so using multiple API keys does not increase your limit.
Limits
| Scope | Limit | Window | Policy |
|---|---|---|---|
| API requests | 60 |
1 minute | Sliding window |
Unauthenticated requests (or requests with invalid keys) are rate-limited by IP address.
Rate Limit Headers
Every API response includes headers indicating your current rate limit status:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Maximum number of requests allowed in the window |
X-RateLimit-Remaining |
Number of requests remaining in the current window |
X-RateLimit-Reset |
Unix timestamp when the rate limit window resets |
Retry-After |
Seconds to wait before retrying (only present on 429 responses) |
Exceeding the Limit
When the rate limit is exceeded, the API returns 429 Too Many Requests:
{
"status": "error",
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests. Please retry after {timestamp}."
}
}