Skip to main content

PanelDNS Reseller Handbook

A practical guide for hosting companies and agencies using PanelDNS to manage DNS for their customers.

Table of Contents

  1. What PanelDNS Does for Resellers
  2. Logging In
  3. Plans and Limits
  4. Branding Your Portal
  5. Team Management
  6. Connecting DNS Servers
  7. Managing Sub-Clients
  8. DNS Zones
  9. Working with DNS Records
  10. Zone Tools and Automation
  11. Change Control and Approval Workflows
  12. DNS Failover Monitoring
  13. Uptime Monitors (Standalone)
  14. DMARC Wizard
  15. Domain & SSL Expiry Monitoring
  16. Geo-Routing Policies
  17. Zone Mirrors
  18. Outbound Webhooks
  19. Notification Channels
  20. REST API and API Tokens
  1. Marketplace and Zone Templates
  2. Billing and Invoicing Sub-Clients
  1. Settings Reference
  2. Frequently Asked Questions
  3. Status Page
  4. Web Analytics
  5. Portal Language
  6. Domain Reputation & Zone Suspension Notices
  7. Legal Compliance — Sub-client Consent Setup
  8. Account Closure & Data Rights
  9. Backups & Zone History

1. What PanelDNS Does for Resellers

PanelDNS is a white-label DNS management platform. As a reseller you get:
  • A branded dashboard for your team to manage DNS zones and records across 22 DNS providers.
  • A separate white-label portal that your customers (sub-clients) log into — branded with your logo, colours, and optionally your own domain (e.g. portal.acmedns.com).
  • One unified interface that works whether your DNS infrastructure is hosted on Cloudflare, DirectAdmin, cPanel, PowerDNS, Amazon Route 53, or any other supported provider.
  • Sub-client accounts with configurable zone limits, invitation emails, and a self-contained portal experience — your customers never see the PanelDNS name.
Your team manages everything through the main dashboard. Sub-clients manage their own DNS through the sub-client portal, within whatever limits you have set for them.

2. Logging In

Dashboard (your team)

The main dashboard URL is provided by your platform operator, or your custom portal domain if you have configured one. Supported authentication methods:
First login: After signing up, you are the org owner. Invite team members from /team before sharing the dashboard.
Email verification: After registering, you will receive a confirmation email at the address you signed up with. Click the link in that email before continuing — every page in the dashboard redirects you to a verification notice until your email is confirmed. If the email does not arrive within a few minutes, check your spam folder or contact your platform operator to re-send it.

Dark mode and interface preferences

The reseller dashboard supports light and dark themes. Click the sun / moon icon in the top-right corner of the topbar to toggle between them. The dashboard defaults to light; your choice is remembered across page reloads and sessions, and is shared with the sub-client portal view — so when you impersonate a sub-client or log in as one, the same theme applies.

Interface language

The Interface language picker in Settings sets the language your dashboard is displayed in. Choose from seven languages: English, Español (Spanish), Français (French), Deutsch (German), Português (Portuguese), 简体中文 (Simplified Chinese), and 繁體中文 (Traditional Chinese). Your selection is saved to your account and applies the next time the dashboard loads.
Interface language vs. Portal Language: “Interface language” changes only what you (and your team) see in the reseller dashboard. It is completely separate from Portal Language, which sets the language your customers see in their sub-client portal and in the emails you send them. Changing one never affects the other.

Command palette

Press ⌘K (Mac) or Ctrl+K (Windows / Linux) from anywhere in the dashboard to open the command palette, or click the Search… button in the top bar. Type at least two characters to search your zones by name and your sub-clients by name or email; up to ten matches are shown. Use the arrow keys to move through results and Enter to open the selected one. Press Escape to close without navigating.

Dashboard KPI tiles

The dashboard header shows your headline KPI tiles, each with a live sub-label giving you at-a-glance context beneath the main figure:
  • Zones — how many you have created this month
  • DNS records — how many were added today
  • Sub-clients — the number of pending invites awaiting acceptance
  • Team seats — your seat usage vs. your plan limit
These sub-labels update in real time so you can see recent activity without opening each section.

Getting started checklist

When your account is new, a dismissible Getting started checklist appears on the dashboard home to guide you through initial setup.
1

Brand your portal

Set your brand name, logo, and colour (Branding).
2

Confirm your nameservers

Verify the nameservers your zones will use.
3

Connect a DNS server

Add at least one DNS provider (Connecting DNS Servers).
4

Create your first zone

Add a domain (DNS Zones).
5

Invite your first sub-client

Onboard a customer (Managing Sub-Clients).
Each step ticks itself off automatically as you complete it — including when you complete a step through the REST API rather than the dashboard. Optional steps can be skipped. The checklist disappears on its own once every step is done, and you can dismiss it at any time with the close button if you would rather hide it.

Registration Form

When creating your account at /register, you will be asked for:
The platform blocks known disposable / temporary email addresses at registration (mailinator, guerrillamail, yopmail, and similar services). Use a permanent business or personal address — this is the address that receives billing notices and your welcome email.

Sub-client portal

Sub-clients access a separate portal at:
  • https://your-platform-domain.com/portal/{your-slug}/login (default), or
  • https://portal.yourdomain.com/login if you have configured a custom portal domain (Starter plan and above).
Sub-clients log in with email + password (or passkeys / TOTP if they configure them). They see only the zones assigned to them. They cannot see other sub-clients’ zones, your team management, or your billing.

3. Plans and Limits

Resource limits

Prices and limits shown are indicative defaults. Your actual plan pricing and limits may differ depending on promotional offers or agreements with your platform operator. Check /billing for your current plan.Agency Bundled is a hidden admin-assigned plan — resellers assigned this plan receive full Agency-tier features and full Agency resource limits (2000 zones, unlimited sub-clients, unlimited seats) at $0 as a bundle with their hosting package. It does not appear in the public plan selector.
Free plan zone creation rate limit: Free plan accounts can create a maximum of 3 zones per day (the counter resets at the end of each day). This applies on top of the total zone count limit. To create more zones, upgrade to Starter or above at /billing.

Feature gates

* Multi-brand portals are not enabled on any self-serve tier, including Agency. They are available only on a bespoke Scale arrangement — contact your platform operator. (This row previously read “Yes” for Agency, which did not match the product.)

Plan usage

The Plan Usage panel (on your dashboard and on /billing) shows how much of each limit you have consumed — zones, sub-clients, seats, API tokens, and so on — as live meters against your plan’s caps. If your account is a platform / operator account rather than a normal subscription, the panel instead reads “Platform · Unlimited” and every meter shows the infinity (∞) symbol in place of a numeric cap. Standard reseller plans always show real usage versus your actual limits.

Upgrading and downgrading

Go to /billing to view your current usage against plan limits. Click Upgrade to open Stripe Checkout. To downgrade or cancel, click Manage plan to open the Stripe Customer Portal. Invoices are available for download from the same page.
When a subscription is cancelled or lapses, PanelDNS automatically suspends all your DNS zones in addition to setting your account to suspended status. This means your sub-clients will immediately lose DNS resolution for their domains. To re-activate zones, renew your subscription and contact the platform operator if zones are not unsuspended automatically.

Features your platform operator can switch off

Separately from your plan, the platform operator can switch some features off for the whole platform: passkey sign-in, API tokens (and with them the REST API and the MCP server), outbound webhooks, zone templates and the marketplace, change scheduling, the AI DNS Wizard and query analytics. A switched-off feature disappears from the sidebar and menus, and opening its page directly shows ”… is turned off on this platform”. Your plan cannot turn it back on; ask the operator.

4. Branding Your Portal

White-label your sub-client-facing portal so it looks like your own product. Go to Settings → Branding.

Brand name

Set a brand name (for example, “AcmeDNS”). This replaces “PanelDNS” in the sidebar, email subjects, and portal page titles your sub-clients see. Upload a PNG, JPG, or WEBP file (maximum 2 MB). The logo appears in the portal header and on invitation/transactional emails to sub-clients. Keep the logo wide rather than square for the best fit.

Brand colour

Set a hex colour code. This is applied as the primary CSS variable — it affects buttons, active nav items, and link colours in the sub-client portal.

Custom portal domain

Available on Starter and above. Direct your sub-clients to a domain you control (e.g. portal.acmedns.com) rather than a paneldns.com URL. Setup steps:
  1. Go to Settings → Branding → Portal domain, enter your desired subdomain (e.g. portal.acmedns.com), and save.
  2. At your DNS registrar or DNS provider, add a CNAME record: Copy the target from the hint under the Portal domain field — PanelDNS accepts only that exact name. Pointing the CNAME at any other name, such as the platform’s bare domain, is the most common mistake: the badge stays on Pending and visitors get an SSL error.
  3. PanelDNS detects the CNAME automatically. The badge in Settings changes from Pending to Active once propagation is confirmed (usually under 5 minutes). SSL is provisioned automatically — no certificate management required on your side.
If your domain’s DNS is on Cloudflare, do not enable the Cloudflare proxy (orange cloud) on this CNAME record. Either use DNS-only mode, or ask your platform operator about Cloudflare for SaaS support.
You can set a dedicated Cookie Policy URL in Settings → Advanced → Sub-client Portal Legal, next to your Terms and Privacy Policy URLs (it must start with https://; before v3.103.3 the field was shown but not saved). This URL is linked from the cookie consent banner shown to your sub-clients on the portal.
  • If you have a separate cookie policy page (common when using GA4 or other tracking), enter its URL here.
  • If left blank, the banner falls back to your Privacy Policy URL.
  • The banner on your portal never mentions PanelDNS or links to the platform’s privacy policy — it uses your own URLs exclusively.
The localStorage key that stores the visitor’s cookie preference on your portal is brand-neutral and does not contain paneldns.

Vanity nameservers (Pro and above)

Custom NS hostnames (e.g. ns1.yourdomain.com) let your brand appear in clients’ NS records instead of generic provider NS names.
  1. Go to Settings → Vanity Nameservers and enter your NS hostnames (e.g. ns1.yourdomain.com).
  2. Select which DNS server these hostnames should point to.
  3. Click Save & Push Nameservers.
  4. A Registrar Setup Guide appears below the save button showing the exact glue records to create — e.g. A ns1.yourdomain.com → 1.2.3.4. Each row has a Copy button. Take these values to your domain registrar:
    • Namecheap → Domain → Private DNS
    • GoDaddy → My Products → Domain → Nameservers → Add Nameserver
    • Cloudflare Registrar → DNS → Nameservers → Custom
  5. PanelDNS checks hourly. The ”⚠ Glue not detected” badge changes to ”✓ Glue verified” once propagation completes (24–48 hours).
Until glue is verified, zones continue to use their existing NS records. Once verified, new zones created on PanelDNS-managed nameservers will use your vanity NS hostnames.

5. Team Management

Go to /team to manage who has access to your PanelDNS dashboard.

Roles

Roles apply per organisation — someone can be the owner of one organisation and a viewer in yours. A role change takes effect on the member’s next click. API tokens always follow their owner’s current role: a member who becomes a viewer can no longer write through tokens they created earlier, and removing a member revokes their tokens for your organisation.

Inviting team members

  1. Click Invite member.
  2. Enter the person’s email address and select their role.
  3. Click Send invitation. They receive an email with a link to set their password and join your org.

Changing a member’s role

Pick the new role from the dropdown next to a member’s name; it saves as soon as you choose. The owner’s role cannot be changed, and you cannot change your own.

Removing a member

Click Remove next to the member and confirm. They lose access to this organisation immediately. The owner cannot be removed, and you cannot remove yourself.

6. Connecting DNS Servers

Go to /servers to add and manage the DNS providers you use. This page is labelled DNS Servers in the sidebar navigation (it was previously called “Providers”). PanelDNS supports 22 providers: Cloudflare, PowerDNS, DigitalOcean, Hetzner, Linode, Vultr, Bunny DNS, NS1, DNS Made Easy, Namecheap, Amazon Route 53, Azure DNS, Google Cloud DNS, cPanel/WHM, cPanel DNS Only, DirectAdmin, Plesk, HestiaCP, ISPConfig, CyberPanel, Virtualmin, and BIND via SSH. Platform-global servers (configured by the PanelDNS operator) are available to all resellers automatically. Servers you add at /servers are private to your organisation.

Adding a server

  1. Click Add server.
  2. Select the provider type from the dropdown.
  3. Fill in the required credentials. The form adapts to the selected provider — for example, Route 53 prompts for Access Key ID and Secret Access Key; Google Cloud DNS prompts for a Service Account JSON; Cloudflare prompts for an API Bearer token.
  4. Click Test connection to validate the credentials before saving.
  5. Click Save.
Credentials are encrypted at rest using platform encryption. Never share your server credentials directly — use the server configuration form so they are stored securely.

Geo-routing servers (Agency)

PowerDNS servers with the “Supports Geo Routing” flag enabled appear as eligible targets when configuring geo-routing policies. This requires the PowerDNS GeoIP backend to be configured on the server. Contact your PowerDNS administrator for setup details.

7. Managing Sub-Clients

Go to /clients to manage the end customers on your plan.

Creating a sub-client

  1. Click New client.
  2. Enter their name, email address, and an initial portal password.
  3. Set a zone limit. Enter 0 for unlimited (subject to your own plan’s zone cap).
  4. Click Create.
Password policy: portal passwords must be at least 12 characters. This applies to the initial password you set on the dashboard form, to the optional password field of the POST /api/v1/sub-clients API endpoint, and to the password a sub-client chooses themselves when they follow the portal invitation link.

Inviting a sub-client to the portal

After creating a sub-client account, click Invite to portal. They receive an email with a link to set their password and access the sub-client portal. The Status column shows Invited once the email is sent, and updates to Active once they accept. Sub-clients log in to the portal branded with your logo and colours. They can manage only the zones assigned to them.

Assigning zones to a sub-client

From the client detail page, use the Assign zone button to attach an existing zone to that client. You can also set the sub_client_id when creating a zone from the zone creation form. Zones assigned to a client appear in that client’s portal. A zone can only be assigned to one client at a time. To reassign it, remove the existing assignment first.
Sub-clients are emailed about changes made to their zones by you, the API or the platform — for example a zone created, deleted or suspended, a record created or deleted, or a DNSSEC status change. Each sub-client chooses which of these they receive in their own portal notification preferences (all on by default). Several changes to the same zone and event within 10 minutes are combined into one email, so a bulk import sends a single email. Changes a sub-client makes themselves in the portal are not emailed to them. The emails use the sub-client’s chosen language and your branding.

Editing and deleting sub-clients

From the client list or detail page, click Edit to update their name, zone limit, record limit, or status. Click Delete to remove the client. Deleting a client does not delete their zones — zones revert to unassigned and remain in your account.

Logging in as a sub-client

You can log in as any of your sub-clients to see exactly what they see in the portal — useful for troubleshooting, onboarding support, or verifying that a zone looks correct from their perspective. How to impersonate a sub-client:
  1. Go to Sub-Clients in the sidebar.
  2. Find the client you want to log in as. Only Active clients appear with the “Login as” option.
  3. Click Login as next to their name.
  4. You are now inside the portal as that sub-client. An amber banner at the top of every page reads:
    ⚠ Impersonating: [client name or email]
  5. Browse the portal, check their zones, or reproduce any issue they are experiencing.
  6. When you are done, click Stop impersonating in the amber banner. You are returned to your own reseller dashboard session.
Important notes:
  • Only the reseller account that owns the sub-client can impersonate them. You cannot impersonate sub-clients belonging to another organisation.
  • Suspended sub-clients cannot be impersonated. Reactivate them first if you need access.
  • Your impersonation session is completely separate from the sub-client’s own session — they are not affected or logged out while you are viewing their account.
  • Platform admins can impersonate any sub-client across all organisations.

Sub-client Bulk CSV Import

Navigate to: Dashboard → Sub-Clients → Import CSV Create multiple sub-clients in one operation by uploading a CSV file. CSV format:
The header row is required and must match exactly. Maximum 200 rows per upload (file size limit: 1 MB).
1

Download the template

Use the template link on the import page to get a pre-formatted CSV.
2

Fill in your sub-client data

Add one sub-client per row. The locale column is optional.
3

Upload and import

Upload the file and click Import.
4

Review results

The result screen shows the created count and any rows skipped with the error reason (duplicate email, invalid data, etc.).
Rows with errors are skipped — valid rows in the same file are still created. Each created sub-client receives an invitation email with a set-password link.

Usage Report Export

Navigate to: Dashboard → Usage → Export Download usage data for all sub-clients in your organisation.

CSV export

Columns: sub_client_name, email, zones, records, status. Opens in any spreadsheet application.

PDF export

Formatted report suitable for sharing with clients or for billing records.
Click the Export dropdown on the Usage page and select the format. The file downloads immediately.

Email Template Editor

Navigate to: Dashboard → Email Templates Customise the subject and body of emails sent to your sub-clients. Supported events: Placeholder variables (replaced at send time): Click the placeholder chip in the editor to insert the variable at the cursor position. Click Reset to default to remove your customisation and revert to the platform default for that event.

White-label Nameserver Wizard

Navigate to: Dashboard → Nameserver Wizard Configure the nameservers displayed to your sub-clients as their zone’s NS records.
1

Enter your nameservers

Enter NS1 through NS4 (NS3 and NS4 are optional). Each must be a valid hostname (e.g. ns1.yourcompany.com), maximum 253 characters.
2

Verify

Click the Verify button next to each nameserver to check it resolves to an IP address via a live DNS A-record lookup.
3

Create glue records

Create glue records at your domain registrar pointing ns1.yourcompany.com to your server’s IP address. Contact your registrar’s support for instructions.
4

Save

Click Update to save. Sub-clients will see these nameservers shown on their zone detail pages.
Configuring nameservers here updates the display to sub-clients. Actual DNS delegation (NS records at the registrar, glue records) must be configured separately with your registrar and authoritative DNS server.

Bulk Sub-client Actions

Navigate to: Dashboard → Sub-Clients Manage multiple sub-clients at once using the checkbox select and bulk action bar.
1

Select sub-clients

Tick the checkboxes next to the sub-clients you want to act on, or use the Select all header checkbox to select the current page.
2

Use the action bar

A sticky action bar appears at the bottom of the screen showing the selection count.
3

Apply the action

Click Suspend or Unsuspend to apply the action to all selected sub-clients.
4

Clear selection

Click Clear to deselect all.
Maximum 50 sub-clients per bulk operation.Suspend sets the sub-client’s status to suspended — they cannot log into the portal. Unsuspend restores active status.

8. DNS Zones

Creating a zone

Go to /zones/create.
  1. Enter the domain name (e.g. example.com).
  2. Select the DNS server (provider) where the zone will be hosted.
  3. Optionally select a zone template to pre-populate standard records.
  4. Click Create zone.
PanelDNS creates the zone on the provider and stores it in your account. A zone detail page opens automatically.

Bulk zone import

Go to /zones/bulk-import to discover and import zones in batch from a provider API.
Bulk zone import requires a Starter plan or above. Free plan accounts see an upgrade prompt instead of the import form.
  1. Select the provider.
  2. Click Discover zones — PanelDNS queries the provider API and lists all zones it finds.
  3. Select the zones you want to import.
  4. Click Import selected (maximum 100 per request).
Bulk import is useful when you are migrating an existing client’s zones from another system into PanelDNS.

Bulk Panel Onboarding

Go to /panel-onboard (or click 🖥️ Panel Onboard on the Zones page) to bulk-create zones directly from a connected hosting panel server. Supported panels: cPanel/WHM, DirectAdmin, Plesk, HestiaCP, ISPConfig, CyberPanel, Virtualmin. Pre-requisite: the panel server must already be added under DNS Servers (/servers) and must be one of the seven panel-type providers listed above.
1

Select the panel server

Pick the panel server from the dropdown — only panel-type servers assigned to your account appear.
2

Discover domains

Click Discover domains. PanelDNS queries the panel API and lists all domains (up to 2,000). Each row shows the domain name, the panel account owner, and whether a PanelDNS zone already exists.
3

Select domains

Use the checkboxes to pick which domains to onboard (maximum 500 per batch). Domains that already have a PanelDNS zone are pre-deselected, and the Select all / None buttons help with large lists.
4

Choose a target DNS server

Pick the DNS provider where new zones will be created (Cloudflare, PowerDNS, DigitalOcean, etc.).
5

Optional: create sub-clients

If the panel API returned an owner email address, you can opt to auto-create a PanelDNS sub-client for each domain’s owner and assign the zone to them. Tick the Create sub-clients from panel owner emails checkbox.
6

Start onboarding

Click Start onboarding. The batch is queued and you are taken to the progress page. A background job runs per domain.
Progress page The progress page refreshes automatically every 2 seconds. It shows:
  • Created / Skipped / Failed counters and a percentage progress bar.
  • The currently processing domain (while running).
  • A Failed domains table when any domains could not be created, showing the error message per domain.
Failed domains do not block the rest of the batch — every domain is processed independently.
A domain is counted as skipped (not failed) when a PanelDNS zone with the same name already exists. Re-running the wizard never creates duplicates.
Limits

Zone list features

The /zones list page includes:
  • Search and filter by zone name, status, provider, sub-client, or tags.
  • Bulk actions: suspend, unsuspend, or delete up to 200 zones at once using the checkboxes.
  • Sync Status dashboard at /zones/sync-status: a colour-coded view of when each zone was last synchronised with its provider, useful for spotting stale mirrors or missed syncs.

9. Working with DNS Records

The zone detail page at /zones/{id} is the main workspace for a zone.

Viewing and editing records

The Records tab shows a table of all records: name, type, content, TTL, and priority. Click the edit icon on any row to open the edit form inline. Click the delete icon to remove a record. Protected records (marked with a lock icon) cannot be modified by sub-clients or editors. Admins and owners can lock or unlock individual records from the admin-facing zone view.

Adding a record

Click Add record to open the create form. Fill in the type (A, AAAA, CNAME, MX, TXT, SRV, CAA, NS, etc.), name, content, and TTL. Click Save.

Bulk TTL editor

To change the TTL of multiple records at once:
  1. Select the records using the row checkboxes.
  2. Click Bulk TTL.
  3. Enter the new TTL in seconds.
  4. Click Apply (maximum 200 records per operation).

Import and export

  • Export: Downloads the zone as a BIND-format zone file (.txt). Available from the zone detail page.
  • Import: Upload a BIND zone file to bulk-create or replace records. Imported records are merged with existing ones.

CSV record import

Click CSV Import to upload a spreadsheet of records. The expected column order is: name, type, content, ttl, priority. Rows with invalid data are skipped and listed in the result report.

Propagation checker

Click the lightning bolt icon next to any record to check how it has propagated across public resolvers. PanelDNS queries multiple resolvers in different regions and displays the results. The check runs in the background and results appear in the UI when ready.

10. Zone Tools and Automation

The zone detail page provides a set of specialist tools. Access them via the tabs or action buttons on the page.

Email Wizard

Click Email Wizard (envelope icon) for a guided flow to configure email DNS records:
  1. Select your email provider from the preset list (or enter custom values).
  2. Preview the MX, SPF, DKIM, and DMARC records that will be created.
  3. Click Apply to create all records in one step.
Use this when onboarding a new client who is setting up email hosting.

SPF Builder

A visual editor for SPF records. Add include:, ip4:, ip6:, and other mechanisms using the form controls. The tool assembles a valid SPF string and saves it as a TXT record. It warns you if the resulting record exceeds the 10-lookup limit.

DNS Wizard (AI) — Pro and above

Click DNS Wizard and describe what the client’s domain needs in plain language — for example: “This site runs on Google Workspace, has a Shopify store, and uses Mailchimp for newsletters.” The wizard uses an AI model (configurable in Platform Settings: Anthropic, OpenAI, Gemini, or a self-hosted Ollama instance) to generate the appropriate records and presents a diff of what will be added. Review it, then click Apply to create the records.
Note: Always review AI-generated records before applying. The wizard is a productivity aid, not a replacement for DNS expertise.

CAA Wizard

Click the 🛡 CAA button on the zone detail page to build CAA (Certification Authority Authorisation) records without needing to know the wire format.
  1. Select the certificate authorities you want to allow for this zone. Common options include Let’s Encrypt, ZeroSSL, DigiCert, and Sectigo.
  2. Optionally tick Deny all CAs to block all public certificate issuance entirely — useful for internal or parked domains.
  3. Enter a violation report address (optional): a mailto: email address or an https:// URL. CAs that receive a mis-issuance request for your domain will send a notification there.
  4. Review the CAA record preview and click Apply to create it.
Tip: If you use Cloudflare, Fastly, or another CDN that manages SSL on your behalf, confirm with them which CA they require before applying a CAA record — they may need their own CA included in the list.

Zone Audit

Click Zone Audit for a DNS compliance report on the zone. The audit checks:
  • SPF record presence and correctness (warns if +all is used).
  • DKIM records for each MX sender domain.
  • DMARC alignment.
  • CAA record presence.
  • DNSSEC status (if the provider supports it).
  • NS records matching expected glue.
  • SOA values within RFC-recommended ranges.
The audit gives the zone a letter grade (A through F) based on how many checks pass. Share this report with clients to demonstrate the value you are adding.

History and Snapshots

Every record change creates a snapshot. The History card on the zone detail page shows a timestamped list of the most recent snapshots and who triggered each one. To roll back:
  1. Click the snapshot you want to restore to.
  2. Review the diff showing what will change.
  3. Click Restore to apply it.
Snapshot retention depends on your plan (7 days on Free, up to 365 days on Agency).

DNSSEC

DNSSEC cryptographically signs your DNS records so resolvers can verify they haven’t been tampered with (prevents cache poisoning). After enabling, you must add a DS record to your domain registrar to complete the chain of trust. Enabling DNSSEC:
  1. On the zone detail page, scroll to the DNSSEC card.
  2. Click Enable DNSSEC.
  3. PanelDNS calls your DNS provider’s API to enable DNSSEC. Once enabled, the DS record value is fetched and displayed.
Automatic DS record push (supported registrars): If your domain registrar is configured under Settings → Registrar Profiles, PanelDNS can push the DS record to the registrar automatically or generate a pre-written support email for you. Setting up a registrar profile:
  1. Go to Settings → Registrar Profiles.
  2. Click Add Profile, choose your registrar type, enter the required credentials (API key, username/password etc.), and optionally set it as the default for all zones.
  3. On the zone detail page’s DNSSEC card, choose the registrar from the dropdown and click Generate support email (TPP Wholesale) or Push DS (API-backed registrars).
Manual DS record submission: If your registrar is not in the supported list, copy the DS record displayed in the DNSSEC card and add it manually:
  • Namecheap: Domains → Manage → Advanced DNS → DNSSEC tab → Add DS record
  • GoDaddy (manual): My Products → DNS → DNSSEC → Add
  • Cloudflare Registrar: Zone → DNS → DNSSEC (auto-detects when Cloudflare DNS is used)
  • Other registrars: look for “DNSSEC” or “DS Records” in your domain management panel
Automatic DS record sync: DNS providers (Cloudflare, Route 53, Azure DNS, GCP DNS) periodically rotate their signing keys. PanelDNS automatically re-syncs DS records every week (Sundays, 02:30 UTC) to keep the stored values current. You can also trigger an immediate refresh with the Re-sync DS Records button. If the last sync failed (e.g. provider API was down), an error message is shown in the DNSSEC card. Click Re-sync DS Records once the provider is available again. Disabling DNSSEC: Click Disable DNSSEC. This calls the provider API to disable DNSSEC signatures. Remember to remove the DS record from your registrar afterwards — a DS record pointing to a zone with DNSSEC disabled will cause DNSSEC validation failures and make the zone unresolvable for DNSSEC-validating resolvers.

Registrar Sync

After configuring a registrar profile (see Setting up a registrar profile above), open Registrar Sync (/settings/registrar-sync, also reachable from the Registrar Sync button on the Registrar Profiles page) to import domains, sync nameservers, and enable automatic zone creation for your registrar account.

Setting up registrar sync

1

Add a registrar profile

Go to Settings → Registrar Profiles and click Add Profile. Choose your registrar type and enter the required credentials (API key, username/password, etc.). Optionally set it as the default for all zones, then save.
2

Load Domains

On the Registrar Sync page, click Load Domains — PanelDNS fetches all domains registered with that registrar and shows which ones are already in PanelDNS.
3

Sync Missing Zones

Choose a Target Server, then click Sync Missing Zones to auto-create PanelDNS zones for any domains not yet present, assigning them to the DNS server you chose.
4

Sync Nameservers (optional)

Click Sync Nameservers, enter the nameservers to set on every domain in the registrar account, and confirm. PanelDNS pushes them to all domains at the registrar in one operation, as a background job.
5

Enable Auto-Sync (optional)

Click Enable Auto-Sync to automatically create PanelDNS zones for new domains registered with this account on a daily basis.

Automatic background jobs

Once a registrar profile has Auto-Sync enabled, one job runs on a schedule without manual action:
  • RegistrarSyncJob — runs daily to discover newly registered domains and create PanelDNS zones for them.
Nameserver changes are not scheduled: RegistrarNameserverSyncJob runs only when you click Sync Nameservers.
When DNSSEC is enabled on a zone, PanelDNS automatically attempts to push the DS record to the configured registrar (if one is assigned). This makes DNSSEC fully hands-free for supported registrars.

Zone Clone

Click Clone zone to copy records from this zone to a new zone:
  1. Enter the destination zone name.
  2. Optionally select which record types to copy (all types are selected by default).
  3. Click Clone.
Useful for creating a staging zone from a production zone, or templating a new client’s zone from an existing one.

Zone Migration

Click Migrate zone to move the zone to a different DNS provider:
  1. Select the target server.
  2. PanelDNS re-creates all records on the new provider.
  3. The zone’s server association is updated.
The original records are not deleted from the old provider automatically — do that manually after confirming the migration was successful and DNS has propagated.

Suspend and Unsuspend

Suspended zones are inaccessible to sub-clients. Records remain in the database but the sub-client portal shows the zone as suspended and does not allow changes. Use this when a client’s account is overdue or has violated terms of service.

Query Analytics (Pro and above)

The Analytics tab on the zone detail page shows DNS query volume, top queried record types, NXDOMAIN rate, and an hourly sparkline. This data is available only for zones hosted on PanelDNS-managed nameservers (PowerDNS cluster with the Lua query hook enabled). Zones on external providers (Cloudflare, Route 53, etc.) do not have analytics — those providers own the query data.

Account-wide Analytics page (Pro and above)

The Analytics item in the sidebar (under DNS) aggregates query statistics across all of your zones in one place — no need to open each zone individually. It shows:
  • Total queries and an average per day over the selected period
  • Active zones — how many of your zones received traffic
  • NXDOMAIN rate — the share of lookups that returned “no such record” (a high rate can mean missing records or stale references)
  • Daily query volume bar chart
  • Query types breakdown and your busiest zones
Use the 1d / 7d / 30d / 90d buttons to change the window. As with per-zone analytics, only zones on PanelDNS-managed nameservers contribute data. The page appears only when your plan includes query analytics.

11. Change Control and Approval Workflows

Approval workflow (Starter and above)

When a team member with the Editor role creates or edits a record, the change is queued as a pending change rather than applied immediately. Owners and admins review pending changes at /pending-changes. For each pending change:
  • A diff shows exactly what will be added, modified, or removed.
  • Click Approve to apply the change to the provider.
  • Click Reject to discard it (the editor is notified).
This is useful for agencies where junior staff make changes that a senior engineer reviews before they go live.

Enabling and disabling approval workflows

Approval workflows are on by default when your plan includes them. To toggle:
  1. Go to Settings → Portal & Team Options
  2. Check or uncheck Require approval for editor record changes
  3. Click Save Options
When disabled, editors apply changes directly — no queue, no review step. Re-enable at any time.

Change scheduling (Pro and above)

When creating or editing a record, check Schedule for later and set a future date and time. The change is stored with status = scheduled. The ApplyScheduledChanges cron job runs at the configured interval and applies due changes automatically. Scheduled changes appear in the zone’s record list with a clock icon until they are applied.

Freeze windows (Pro and above)

Freeze windows prevent DNS changes during critical periods (for example high-traffic events or change-freeze policies). Set time windows during which no DNS changes are allowed on a zone.
  1. Open the zone detail page at /zones/{id} and choose Tools → Freezes (the same list also appears in the Freeze Windows card further down the page).
  2. Under Add freeze window, set Starts at (it must be in the future), Ends at, and an optional Reason (e.g. “Black Friday traffic — no changes”).
  3. Click Add Freeze Window.
During an active freeze window, record create, edit, and delete actions (and applying a record set to the zone) are rejected with a “Zone is frozen” message that includes your reason. The freeze applies to everyone working in your organisation — editors, admins, owners, and sub-clients alike — and also to changes made through the REST API. To lift a freeze early, remove it from the same list. A scheduled change or an approved pending change that comes due while a freeze is active is rejected like any other change; after its retries run out it is marked as failed. Schedule changes for after the window ends. Freeze windows are available on Pro and above. On lower plans the Freezes option is still visible, but adding a window is refused with a message that a Pro plan or higher is required.

12. DNS Failover Monitoring

Available on Pro (up to 10 monitors) and Agency (unlimited). Go to /monitors. A failover monitor watches an A or AAAA record and automatically swaps the IP to a fallback address if the primary becomes unreachable.

Creating a monitor

  1. Click New monitor.
  2. Select the zone and record to monitor.
  3. Choose the check type:
    • HTTP: Sends a GET request to a URL and checks for an expected HTTP status code.
    • TCP: Opens a connection to a host and port.
    • Ping (ICMP): Sends ICMP echo requests to the IP address.
  4. Set the check interval (in seconds), timeout, and consecutive failure threshold (how many failures must occur before the failover triggers).
  5. Enter the Primary IP (the normal value) and Fallback IP (the replacement value).
  6. Click Save.

How failover works

When the failure threshold is reached, PanelDNS automatically updates the monitored record’s content to the fallback IP using the same ZoneManager::updateRecord() path as a manual edit — it works across all 22 providers with no provider-specific code. A real-time alert is broadcast to the dashboard (MonitorTripped event via Reverb). When the primary IP becomes reachable again, the record is restored automatically.
Tip: Set a low TTL (60–300 seconds) on monitored records before enabling failover. A high TTL means caches hold the old IP long after the swap occurs, delaying recovery.

Pausing and resuming

Click Pause on a monitor to suspend checking without deleting the configuration. This is useful during planned maintenance.

13. Uptime Monitors (Standalone)

Available on plans where Failover monitoring is enabled. Go to /monitors. Standalone uptime monitors check any URL on a schedule (every 30 seconds to 60 minutes) and alert you by email when it goes down — without needing a DNS record swap. Use these for websites, APIs, or services that are not in PanelDNS zones.

Creating a standalone monitor

1

Go to Monitors

Click Monitors in the sidebar.
2

Create a monitor

Click New monitor. Enter a name, the URL (must start with http:// or https://), check interval (30 seconds to 60 minutes), and consecutive-failure threshold (default: 3).
3

Save

Monitoring begins immediately. You’ll receive email alerts on trip and recovery.

How alerts work

When the failure threshold is reached, PanelDNS emails your organisation’s notification address with the monitor name, URL, and failure time. A recovery email is sent when the endpoint responds successfully again.
Standalone monitors alert only — they do not swap DNS records. For automatic DNS failover, create a monitor linked to a zone record from the zone detail page.

Pausing and resuming

Click Pause on any monitor to suspend checking without deleting it. Useful during planned maintenance windows.

14. DMARC Wizard

The DMARC wizard builds and applies a _dmarc TXT record for a zone based on your policy choices. It sits alongside the CAA wizard and Email wizard on the zone detail page.

Running the wizard

1

Open the wizard

Zone detail page → click DMARC Wizard.
2

Choose policy

Choose a policy: none (monitor only), quarantine (send to spam), or reject (block). Start with none to collect reports without affecting mail flow. Move to quarantine or reject after reviewing reports for 2–4 weeks.
3

Set aggregate report address

Enter an aggregate report address (rua). This receives daily XML summary reports from receiving mail servers. Use a dedicated inbox or a DMARC reporting service address.
4

Optional settings

Optionally set a forensic report address (ruf), percentage (pct), subdomain policy (sp), and DKIM/SPF alignment modes.
5

Apply

Click Apply — the wizard creates or replaces the _dmarc.{zone} TXT record.
Start with p=none and monitor the aggregate reports for 2–4 weeks before moving to quarantine or reject.
Do not jump straight to p=reject without reviewing aggregate reports first — legitimate mail can be blocked if SPF or DKIM is misconfigured.

What the record looks like

Optional settings (ruf, pct, sp, adkim, aspf) are added only when you set them. A percentage of 100 and relaxed alignment are left out of the record because they are the defaults.

15. Domain & SSL Expiry Monitoring

PanelDNS automatically tracks expiry dates for domains and SSL certificates and warns you before they lapse. Domains and certificates expiring within 60 days also show a badge on the zones list: grey at first, yellow within 14 days, and red within 7 days.

Domain expiry

When a registrar is connected (see Registrar Sync) and Auto-Sync is enabled, PanelDNS retrieves the expiry date for each domain. Domains expiring within 60 days show a badge on the zones list. You receive an email alert once a domain is within 30 days of expiry, repeated roughly weekly until it is renewed.
Domain expiry tracking requires a connected registrar with Auto-Sync enabled. Domains managed outside a connected registrar show no expiry badge.

SSL certificate expiry

PanelDNS checks the SSL certificate on port 443 for each active zone once per week. Zones expiring within 60 days show an SSL badge on the zones list. Email alerts begin once a certificate is within 30 days of expiry and are repeated roughly weekly until it is renewed. SSL checks run silently — zones without HTTPS (HTTP-only or no web server) are skipped without error.

Alert emails

Both expiry alerts go to the Notification address set in Settings → Email (Email & notifications). Make sure this is a monitored inbox.

16. Geo-Routing Policies

Available on Agency only, and only for zones hosted on PanelDNS-managed nameservers (PowerDNS cluster with GeoIP backend). Geo-routing lets you route A or AAAA queries to different IP addresses depending on the visitor’s country or continent. For example, route European visitors to a Frankfurt server and North American visitors to a New York server.

Creating a policy

  1. On the zone detail page, click Geo-Routing → New policy.
  2. Select the record name and type (A or AAAA).
  3. Add rules. Each rule has:
    • Region codes: One or more country/XX or continent/XX codes (e.g. country/US, country/CA, continent/EU).
    • Content: The IP address to return for visitors matching this rule.
    • Priority: Lower numbers have higher priority. Use this when rules overlap.
  4. Add a default rule with no region restriction — this is the fallback for visitors who do not match any other rule. A default rule is required.
  5. Click Save and deploy.
Deployment generates a PowerDNS GeoIP YAML configuration and applies it to the assigned geo-routing server via SSH.
Important: Geo-routing operates at the DNS level — it routes queries, not HTTP traffic. Visitors’ authoritative resolver location is used, not their actual IP. This is accurate at country level but not at city level. For city-level routing, use a provider with native anycast or HTTP-level routing.

Enabling and disabling policies

Toggle individual policies on or off using the Enable / Disable switch without deleting the configuration. This is useful for temporarily falling back to standard DNS during an incident.

17. Zone Mirrors

Available on Agency. Zone mirroring replicates a zone’s records to one or more additional DNS providers in real time. Every record create, update, or delete on the primary zone is dispatched as a background job to each mirror target. This allows you to maintain redundant DNS across providers.

Adding a mirror

  1. On the zone detail page, click Mirrors → Add mirror.
  2. Select the target server (a different provider from the zone’s primary server).
  3. Click Save.
PanelDNS performs an initial full sync to populate the mirror, then keeps it in sync automatically.

Mirror status badges

Manual resync

Click Resync on a mirror to force a full re-synchronisation from the primary zone. Use this after resolving an error condition.

Limits

Check your plan for the mirror_limit. Free, Starter, and Pro plans do not include zone mirroring.

18. Outbound Webhooks

Go to /webhooks to set up HMAC-signed HTTP callbacks when DNS events occur.

Creating a webhook endpoint

  1. Click New webhook.
  2. Enter the URL of your endpoint.
  3. Select the events you want to subscribe to (listed below). Leave all of them unticked to subscribe to every event.
  4. Click Save. PanelDNS generates a secret key for this endpoint.
Available events:
Zone health-check alerts and domain and SSL expiry alerts are not webhook events. They are available as events on Notification Channels.

Verifying payloads

Each webhook delivery includes an X-PanelDNS-Signature header containing an HMAC-SHA256 signature of the request body, signed with your endpoint’s secret key. Verify this signature in your endpoint handler before processing the payload. Example (PHP):

Delivery log and retries

Click on a webhook endpoint to view its delivery log — a timestamped list of every delivery attempt with the HTTP response code and body. Failed deliveries are retried automatically with exponential backoff.

19. Notification Channels

Notification Channels deliver real-time alerts to your team’s chat and messaging tools (Slack, Microsoft Teams, Discord, Telegram, or WhatsApp) when DNS events occur in your account. Unlike Outbound Webhooks — which send signed HTTP payloads to a custom endpoint for programmatic processing — Notification Channels send human-readable messages directly to chat platforms so your team sees alerts without writing any integration code.
Use Outbound Webhooks when you need machine-readable event payloads for a custom integration, CI pipeline, or provisioning system. Use Notification Channels when you want your team to see alerts instantly in Slack, Teams, or another messaging tool.
Go to /notification-channels to manage your channels.

Supported channels

Slack

Incoming Webhook. Needs a webhook URL from your Slack app.

Microsoft Teams

Incoming Webhook connector. Needs a webhook URL from a Teams channel connector; posts to any Teams channel without a bot account.

Discord

Discord Webhook URL. Delivers messages to any Discord server channel.

Telegram

Bot API. Needs a bot token (from @BotFather) and a Chat ID. Works for direct messages, groups, and supergroups.

WhatsApp

Two drivers: Meta Cloud API (Phone Number ID, Access Token, recipient number, and a pre-approved message template) or Twilio Messaging API (Account SID, Auth Token, Twilio WhatsApp number, recipient number).

Creating a channel

1

Add a channel

Click + Add Channel.
2

Choose the channel type

Select the channel type from the cards. The type cannot be changed after the channel is created.
3

Enter the credentials

Fill in the credentials for your chosen channel — see Setting up a channel for the details of each type. Slack, Teams, and Discord webhook URLs must use HTTPS — HTTP is rejected.
4

Add a label (optional)

Give the channel a label — it helps when you have multiple channels of the same type.
5

Choose events

Under Events to notify on, choose which events trigger this channel. Leave all events unchecked to receive notifications for every event.
6

Save

Click Create Channel.

Setting up a channel

  1. Create an Incoming Webhook at api.slack.com/apps → your app → Incoming Webhooks → Add New Webhook to Workspace, and choose the channel you want alerts posted to.
  2. Copy the Webhook URL (starts with https://hooks.slack.com/services/…).
  3. In PanelDNS, click + Add Channel, choose Slack, and paste the URL into Webhook URL.
  4. Select the events to subscribe to and click Create Channel.
  5. Click Test on the channel row to verify a message arrives in the Slack channel.

Events

Leave every event unticked to receive all of them — including any added in future releases. Tick only the ones you want to narrow it down.

Testing a channel

After saving, click Test on the channel row. PanelDNS sends a test message immediately and shows success or a detailed error. Use this to confirm credentials before relying on alerts in production.
The Test button cannot be used for WhatsApp Cloud because Meta requires an approved template to send — verify your credentials in Meta Business Manager instead.

Managing channels

Editing — click Edit on the channel row to update the label, credentials, or subscribed events. Leave a token field blank to keep the existing secret. Changes take effect immediately. Pausing — untick Enabled in the edit form to pause delivery without deleting the channel. A paused channel shows a grey Disabled badge. Events that occur while a channel is paused are not replayed when you re-enable it. Deleting — click Delete on the channel row and confirm. Deletion is permanent and removes the channel’s delivery history. Delivery counters — each row shows how many deliveries succeeded (✓) and failed (✗) and when the channel last sent. A failed send is retried automatically (up to three attempts in total, with growing delays) before it counts as failed. Notification channels keep counters rather than a per-attempt log; use Outbound Webhooks if you need a delivery log.

Differences from outbound webhooks

Both features can be active simultaneously — they are independent and complement each other.

Plan limits

Notification channels are not counted against your plan’s webhook allowance, and PanelDNS does not enforce a separate plan limit on how many channels you create. Only your outbound webhooks count towards the Webhooks limit in Plans and Limits.

20. REST API and API Tokens

The REST API lets you integrate PanelDNS with your own systems — billing platforms, provisioning scripts, client portals, and automation workflows.

Creating an API token

Go to /api-tokens:
  1. Click New token.
  2. Enter a label (e.g. “Provisioning script”).
  3. Select the scopes you need:
  4. Click Create. Copy the token immediately — it is shown only once. Tokens are stored as SHA-256 hashes; the raw value cannot be recovered.
The number of tokens you can create depends on your plan (Starter 3, Pro 10, Agency unlimited). All of your organisation’s tokens share one rate limit, set by your plan: Starter 60, Pro 300, Agency 1,200 requests per minute.

IP allowlist

When creating a token, you can optionally restrict it to specific IP addresses. Enter a comma-separated list of CIDRs in the Allowed IPs field (e.g. 203.0.113.10/32, 198.51.100.0/24). When set, requests from any other source IP return 403 Forbidden — even if the token is otherwise valid. Leave Allowed IPs blank to allow requests from any IP address (the default). Use IP allowlists for long-lived provisioning tokens where the calling server has a known static IP. For tokens used in dynamic environments (CI pipelines, developer machines), leave the field blank and rotate the token regularly instead.

API base URL

Authentication

Pass the token in the Authorization header:

Key endpoints

Full OpenAPI documentation is available at /api/docs once you are signed in. The raw specification at /api/docs.json needs no sign-in, so code generators can fetch it directly.

Response format

AI / MCP access (manage DNS from Claude)

PanelDNS hosts a Model Context Protocol (MCP) server at /mcp/reseller. MCP lets an AI assistant such as Claude (Claude Desktop, or any MCP-compatible client) connect directly to your account so you can read and manage DNS in plain language — for example, “list my zones”, “add an A record for api.example.com pointing to 1.2.3.4”, or “delete the old TXT record from acme.com”. This is a reseller-tier feature. It uses the API tokens you already manage at Settings → API Tokens — there is no separate credential to create.
1

Create or reuse an API token

Go to /api-tokens and create a token with the scopes you need. For read-only access use zones:read + records:read. For full read/write use all four scopes.
2

Add the MCP server to your client

In your MCP client (e.g. Claude Desktop), add a server pointing at /mcp/reseller on your PanelDNS instance and authenticate with that token (Authorization: Bearer dnsm_<your-token>).
3

Manage your DNS through the agent

Ask the agent to list, look up, create, update, or delete zones and records.
Available tools:
Write operations go through the same validation, provider sync, and protected-record enforcement as the REST API — the agent cannot bypass ownership checks or modify records marked as protected.
Sub-clients do not have API tokens or MCP access — this feature is for you, the reseller.

ACME / DNS-01 Certificate Automation

PanelDNS provides three external integration packages for automating TLS certificate issuance via DNS-01 challenges (v3.56.0). These allow your infrastructure or your sub-clients’ infrastructure to automatically obtain Let’s Encrypt (or any ACME CA) certificates without manual DNS management.

Available integrations

acme.sh hook

Shell-script environments, cron-based renewal

lego provider

Go-based stacks, Traefik, Caddy

cert-manager webhook

Kubernetes clusters using cert-manager

Setup

1

Create an API token

In your PanelDNS portal, go to API Tokens and create a new token with records:write scope.
2

Note your zone IDs

Note the zone ID(s) you need DNS-01 access to.
3

Configure the integration

Follow the README of the relevant integration package to configure the API base URL and token.
4

Run a dry-run

Run a dry-run certificate request to confirm the TXT record is created and cleaned up correctly.
Create a dedicated token per ACME client — never share tokens across services. Revoke tokens individually if a service is decommissioned.

21. Marketplace and Zone Templates

Browsing and applying templates

The marketplace at /marketplace contains public zone templates — pre-built sets of DNS records for common scenarios (e-commerce platforms, email providers, CDN configurations, etc.). No login is required to browse. To apply a template:
  1. Find a template and click Apply to zone.
  2. Select the zone from your account.
  3. Review the records that will be created.
  4. Click Apply.
Records from the template are added to the zone. Existing records are not removed.

Creating your own templates

On Pro and above, you can create private zone templates at Settings → Zone Templates (or from the zone detail page via Save as template).
  1. Enter a title, description, and tags.
  2. Define the records to include. Use the {zone} placeholder in record names — it is replaced with the actual zone name when the template is applied (e.g. mail.{zone} becomes mail.example.com).
  3. Click Save.
Private templates appear only within your organisation and are available when creating a new zone.

Publishing to the public marketplace

On Pro and above, you can publish a template so any PanelDNS user can apply it:
  1. Open the template and click Submit for review.
  2. The template enters an approval queue. The platform administrator reviews it and either approves (making it public) or rejects it with a reason.

Curating the marketplace for sub-clients

You can control which public marketplace templates your sub-clients can see and use:
  1. Go to Marketplace → Manage for clients.
  2. Toggle individual templates on or off for your sub-clients.
This lets you curate a focused set of templates relevant to your clients without overwhelming them with unrelated options.

22. Billing and Invoicing Sub-Clients

Your PanelDNS subscription

Your own PanelDNS subscription is managed at /billing. Current plan, usage meters, upgrade/downgrade, and invoice downloads are all available here. Usage meters show your real-time consumption against plan limits (zones, sub-clients, seats, API calls, monitors). Overages on zones, clients, and seats are reported to Stripe daily.

Annual Billing

If your PanelDNS plan is billed annually, your subscription renews once per year at the discounted annual rate. Impact on sub-clients: Your sub-clients are billed according to your own billing configuration (monthly or annually as you set up for them). The platform’s annual billing cadence for your reseller account is independent of how you bill your own customers. Proration: Mid-cycle upgrades are prorated to the next renewal date. Downgrades take effect at renewal.

Accepting payments from sub-clients (Stripe Connect)

Connect your Stripe account to charge sub-clients directly — payments go to your Stripe account, not to PanelDNS.
  1. Go to Settings → Billing → Connect Stripe.
  2. Complete the Stripe OAuth flow. You are redirected to Stripe to authorise the connection, then back to PanelDNS.
  3. Once connected, your invoices have a Pay online option that opens Stripe Checkout for the sub-client.
To disconnect, go to Settings → Billing → Disconnect Stripe.

Creating invoices for sub-clients

Go to /invoices → New invoice.
  1. Select the sub-client.
  2. Add line items: description, quantity, and unit price.
  3. Apply tax percentage if required. The total is calculated automatically.
  4. Optionally enter a coupon code (see Coupon codes below). The discount is calculated and previewed live in the totals summary.
  5. Set the due date.
  6. Click Save as draft or Send now.
Sending: Clicking Send emails the invoice to the sub-client’s registered email address and changes the status from draft to sent. Invoice statuses: Recording a manual payment: On a sent or overdue invoice, click Record payment to mark it as paid without going through Stripe. PDF: Click Download PDF on any invoice to get a formatted PDF for your records. Voiding: Click Void to cancel an invoice. Voided invoices are retained for audit purposes.

Coupon codes

Create named coupon codes for promotional pricing — for example, a new-client discount, a loyalty reward, or a service bundle deal.

Creating a coupon

Go to Dashboard → Coupons → New coupon (requires a plan with billing enabled).

Applying a coupon to an invoice

When creating or editing a draft invoice, type the coupon code into the Coupon code field and click Apply. The dashboard validates the code immediately and, if valid, shows:
  • A confirmation label (e.g. 10% off — WELCOME20)
  • A live discount preview in the totals breakdown below the line items
The discount label and discounted amount also appear in the invoice PDF and in the sub-client’s email.
The coupon field is only shown on the invoice form when your org has at least one active coupon. If you don’t see it, go to Dashboard → Coupons and create one first.

Coupon usage tracking

Each coupon tracks how many times it has been claimed:
  • used_count is incremented the first time you send an invoice with that coupon. Re-sending the same invoice does not increment the count again.
  • If you void a sent invoice, the usage slot is returned (decremented). Voiding a draft invoice — which was never sent — does not affect the count.
  • Once used_count reaches max_uses, the code is rejected on new invoices. The existing invoices that already carry the coupon are unaffected.

Deleting a coupon

A coupon that is attached to one or more active (non-void) invoices cannot be deleted — the dashboard shows how many invoices are affected. To stop accepting new redemptions without disturbing existing invoices, toggle Active off instead.

23. Settings Reference

Go to /settings for all account and organisation settings. The page is organised into tabs: Profile, Password, Security, Branding, Nameservers, Email, and Advanced (analytics, legal documents, portal language, marketing preferences, and the danger zone). You can deep-link to a tab with ?tab= — e.g. /settings?tab=security.

Profile

Update your display name and email address. Your email is used for login and system notifications. Changing your email address requires re-verification — a verification link is sent to the new address and your account is locked to the old email until confirmed.

Password

Change your account password. You must enter your current password to set a new one.

Security — Passkeys

Register a WebAuthn passkey (hardware security key or device biometrics) for passwordless login. You can register multiple passkeys. Remove any passkey from this page.

Security — Authenticator app (2FA)

Enable two-factor authentication using an authenticator app (Google Authenticator, Authy, 1Password, etc.) from Settings → Security:
  1. Click Enable 2FA.
  2. Scan the QR code with your authenticator app (or enter the manual key shown).
  3. Enter the current 6-digit code and click Confirm.
  4. Save your recovery codes. Once 2FA is enabled, the card shows eight single-use recovery codes — store them somewhere safe (a password manager is ideal). Each one works once if you lose your authenticator device. You can Regenerate recovery codes later (which invalidates the old set).
Once enabled, every sign-in asks for a 6-digit code after your password. If you don’t have your authenticator to hand, choose Use a recovery code instead on the challenge screen. To disable 2FA, enter your current password and click Disable 2FA (this also clears your recovery codes).

SSO (OIDC)

Configure an OIDC identity provider for your team’s login. Fields required:
  • Issuer URL — PanelDNS auto-discovers the provider’s endpoints from {issuer}/.well-known/openid-configuration. Click Test discovery to verify.
  • Client ID and Client secret — obtained from your identity provider’s application settings.
  • Scopes — typically openid email profile.
  • Auto-provision — when enabled, PanelDNS creates a new account on first SSO login for users not yet in your org.
You can also configure SSO for the sub-client portal separately, allowing your clients to log in via their own identity provider.

Email driver

Configure how PanelDNS sends transactional emails on your behalf (zone alerts, sub-client invitations, invoice emails): Using your own email driver means sub-client emails come from your domain, which improves deliverability and keeps your brand consistent.

Currency

Set the display currency for invoices. This is a display setting — Stripe handles actual currency conversion based on your Stripe account settings.

Portal & Team Options

Control portal-level and team behaviours:
  • Allow or prevent sub-clients from viewing propagation check results.
  • Enable or disable the marketplace for sub-clients.
  • Set whether sub-clients can export zone files.
  • Allow sub-clients to schedule record changes (subclient_can_schedule — requires Pro+ plan with change scheduling enabled).
  • Require approval for editor record changes — when enabled, changes made by team members with the Editor role are held in a pending queue for owner or admin review before being applied (requires Starter plan or above).

Sub-client Support

Set a support email address that your sub-clients can use to reach you. When configured, a Contact support button appears in the footer of every sub-client’s portal sidebar. Clicking it opens a mailto: link addressed to this email. Path: /settings → scroll to Sub-client Support card This is intentionally low-friction — no ticket system integration required. Use any email address you actively monitor: a shared helpdesk inbox, a personal address, or an alias that forwards to your support system.
Platform-level docs and support links (shown to you as the reseller in your own dashboard) are configured by the platform operator in their admin panel, not in your settings.

Marketing Preferences

Open Settings → Advanced and scroll to the Marketing preferences card. This controls whether PanelDNS may send you marketing and lifecycle emails — product updates and announcements, tips, onboarding guidance, feature highlights, promotional offers, and newsletters. Transactional emails (invoices, zone alerts, password reset, security notices) are always sent regardless of this setting. Opt-in at registration: The registration form includes an optional checkbox (“I’d like to receive product updates, tips, and occasional news by email.”). It is not pre-checked. If you checked it when signing up, your opt-in is recorded with a timestamp. If you did not, you will not receive marketing emails until you opt in here. To change your preference at any time, tick or untick Receive product updates, tips, and lifecycle emails from PanelDNS. The change saves as soon as you toggle the checkbox. Unticking it records your opt-out (marketing_opted_out_at) and unsubscribes you; ticking it again re-subscribes you. You can also opt out via the Unsubscribe link in the footer of any marketing email (no login required). The unsubscribe link is a tokenised URL (/unsubscribe/{token}) that works independently of your account status — you can opt out even after requesting account closure.
Your sub-clients’ marketing opt-in: When a sub-client accepts a portal invitation, they are shown an optional opt-in checkbox for your own marketing communications. This is not pre-checked. You can view each sub-client’s opt-in status in the Sub-clients section of your dashboard.
PanelDNS uses a cookie preference centre. A Cookie preferences item is available in the user menu (as well as the sidebar footer) so you can re-open the consent centre at any time — including after you have already accepted or dismissed the initial cookie banner — to change your choices. Your preference is stored in localStorage under ck_prefs on your current device and browser. It is not synced across devices. If the platform operator has configured Google Analytics, it loads only when you have given analytics consent. Cookieless providers (Plausible, Fathom) are not gated on consent and do not appear in the preference centre.

24. Frequently Asked Questions

Can sub-clients see other sub-clients’ zones? No. The sub-client portal enforces strict ownership isolation. A sub-client can only see and manage zones that are explicitly assigned to their account. Zone IDs submitted from the portal are always verified against the sub-client’s assignment before any action is taken. What happens if I exceed my plan’s zone limit? Zone creation is blocked once you reach the limit. Overages on zones, clients, and seats are reported to Stripe and charged at metered rates. Upgrade your plan at /billing to increase your limits. Can I use multiple DNS providers at the same time? Yes. Different zones can be hosted on different providers. You might use Cloudflare for high-traffic zones and a cPanel server for shared hosting zones. Each zone is associated with one primary server, but you can add mirrors to replicate a zone to additional providers. How do I transfer a zone from one sub-client to another? From the zone detail page, use the Transfer zone action (available to admins and owners). Select the destination sub-client. The zone’s sub_client_id is updated and any package association is cleared. The zone records remain unchanged on the DNS provider. Do sub-clients know they are using PanelDNS? Not if you configure your branding correctly. Set your brand name, logo, and brand colour in Settings → Branding, and use a custom portal domain. With these in place, sub-clients interact with a portal that carries your branding exclusively. PanelDNS is not mentioned. What DNS record types are supported? All standard types across all providers: A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, CAA, PTR, NAPTR, and others where the provider supports them. Provider-specific limitations apply — for example, Namecheap does not support SRV, CAA, NS, or PTR records. Check the provider’s documentation for its specific constraints. How do I give a client view-only access to their DNS records without letting them make changes? Do not invite the sub-client to the portal. Instead, use the Zone Audit report or export the zone as a BIND file and share it with them manually. If you want them to have read-only portal access, PanelDNS’s sub-client portal does not currently offer a viewer-only sub-client role — all sub-client portal users can make changes to their assigned zones. What happens to a zone when I suspend a sub-client’s account? Suspending individual zones (via the Suspend action on the zone) sets the zone’s status to suspended and prevents sub-client access. Deleting a sub-client from /clients does not automatically suspend or delete their zones — you need to take zone-level action separately. Can I automate zone provisioning when a new hosting account is created? Yes. Use the REST API (POST /api/v1/zones) to create zones programmatically. Combine this with webhooks from your billing or provisioning system. A typical flow: new hosting order → your provisioning script calls PanelDNS API to create the zone and assign it to the sub-client → sub-client is invited to the portal automatically. How long are backups and snapshots retained? Retention depends on your plan: 7 days (Free), 30 days (Starter), 90 days (Pro), 365 days (Agency). Auto-backups run nightly. Snapshots are created on every record change. You can restore any snapshot within the retention window from the zone’s History card. Where do I find the PanelDNS API documentation? Full OpenAPI documentation is available at /api/docs on your platform instance once you are signed in. It includes every endpoint, request and response schema, and the authentication details. The raw specification at /api/docs.json is available without signing in, which is what you want when pointing a code generator at it.

25. Status Page

Your PanelDNS plan includes a white-label public status page — a dedicated page your sub-clients can visit to see the live health of your DNS services. It reflects your monitors, components and incidents in real time, and carries your brand name, logo and colour.

Enabling Your Status Page

  1. Go to Dashboard → Status Page → Settings
  2. Toggle Enable public status page on
  3. Optionally set a custom Page title and Description
  4. Click Save Settings
Your status page is immediately live at:
  • https://{your-portal-domain}/status — if you have a custom portal domain
  • https://{your-slug}.paneldns.com/status — if using the default subdomain
A Preview Status Page ↗ button appears on the Settings page once your status page is enabled — click it to open your live page in a new tab.

What Sub-Clients See

The page shows:
  • Overall status banner — All Systems Operational / Degraded / Partial Outage / Major Outage
  • Component list — one row per monitor you have configured, with green/red status
  • Active incidents — any incidents you have opened with their latest update
  • Past incidents — last 5 resolved incidents
The page uses your brand colour and logo automatically — no extra configuration needed.

If the Page Stops Updating

Your status page is refreshed from PanelDNS every few minutes. If those updates stop — maintenance, a network problem, anything — the page does not keep showing the last green result, because a page confidently reporting “all systems operational” throughout a disruption is worse than no page at all. After 15 minutes without an update, the page changes: Two things worth knowing:
  • Incidents you have already posted stay visible and stay accurate. Only the automatic “everything is fine” claim is withdrawn, because that is the one thing that cannot be verified while updates are stopped.
  • The wording is in your portal language and names no supplier. Your customers see a neutral message about your monitoring; nothing identifies PanelDNS or any provider behind your service. Set your language under Dashboard → Settings → Portal Language.
This is a safety net, not a substitute for telling your customers what is happening. If you know there is a problem, post an incident — and if your dashboard is unreachable, use the emergency API key described below, which works even when PanelDNS does not.

Managing Incidents

When a service disruption occurs:
  1. Go to Dashboard → Status Page → Incidents → New Incident
  2. Set a title, impact level (None / Minor / Major / Critical), and initial message
  3. Set the status to Investigating
  4. Click Create Incident — it appears on your public status page immediately
As the situation develops, post updates from the incident detail page:
  • Change status to Identified when you know the cause
  • Change to Monitoring once a fix is deployed
  • Change to Resolved to close the incident — it moves to Past Incidents

Email Subscriptions

Visitors to your status page can subscribe for email updates using the Subscribe form at the bottom of the page. Subscriptions use double opt-in — the visitor receives a confirmation link and is only added once they click it (so nobody can sign someone else up). When you open a new incident (any status other than Resolved), every confirmed subscriber is emailed automatically — sent through your configured mail driver, branded as your organisation, with a one-click Unsubscribe link in every message. Incidents created already-resolved do not send notifications.

Custom Status Domain (Starter plan and above)

Instead of yourportal.com/status, you can host your status page at a dedicated subdomain like status.yourportal.com:
  1. Go to Dashboard → Status Page → Settings → Custom Status Domain
  2. Enter your desired hostname (e.g. status.yourdomain.com)
  3. Add a CNAME record in your DNS:
  4. Click Save Custom Domain — TLS is provisioned automatically within a few minutes
The custom domain status page is served from Cloudflare’s global edge — it stays online even if the PanelDNS platform is undergoing maintenance.

Custom Components

Instead of the default view (which shows your DNS failover monitors), you can define your own named components that appear on your public status page:
  1. Go to Dashboard → Status Page → Components → Add Component
  2. Enter a name (e.g. “DNS”, “Email Routing”, “API”, “Web Hosting”)
  3. Set the initial status (Operational by default)
  4. Click Add Component
To update a component’s status (e.g. when there’s a partial disruption):
  • Go to Dashboard → Status Page → Components
  • Change the dropdown next to the component to the appropriate status
  • The change appears on your public status page within 5 minutes
Custom components take priority over failover monitor data. Up to 20 components per status page.

Emergency Incident Posting (No Dashboard Required)

If the PanelDNS platform is under maintenance and you cannot access your dashboard, you can still post incidents directly to your status page using your Emergency API Key. Generate your API key: The Status API Key card is at the bottom of Dashboard → Status Page → Settings.
  1. Click Generate Key (or Regenerate Key to rotate an existing one)
  2. Copy the raw key immediately using the Copy button — it is only shown once. The stored value is a SHA-256 hash; if you lose the key, regenerate it.
  3. Your key is active immediately — it is pushed to Cloudflare’s edge in real time
Post an incident via API:
Valid values: impact = none/minor/major/critical; status = investigating/identified/monitoring/resolved Emergency form (no API client needed): Visit https://your-portal-domain.com/status/post in any browser, enter your API key, fill in the form, and click Post Incident. This page is served from Cloudflare’s edge — it works even when the platform is down. Update an existing incident: POST the same title to update the existing active incident with a new status and message. POST with "status": "resolved" to close it and move it to Past Incidents.

Status Page and Plan Limits


26. Web Analytics

Track how your customers use your dashboard and their sub-client portal in your own analytics account. Go to Settings → Web Analytics and choose a provider: Enter your tracking ID (e.g. GA4 G-XXXXXXX, Plausible domain, Fathom site ID, or PostHog key) and save. Your tag fires on your reseller dashboard and your sub-clients’ portal — you only see traffic for your own org, not other resellers.
Custom analytics (v3.79.2+): the “Custom” option accepts an external, src-only <script> tag — the URL it points to must be https://, and the tag must have no inline JavaScript between its opening and closing tags. This runs the same tag on every one of your sub-clients’ portal pages, so inline JS is no longer accepted for security reasons (a reseller-supplied inline script would otherwise execute in your sub-clients’ browser sessions). If you previously used an inline snippet here, switch to that provider’s hosted script-tag embed instead — most analytics providers (Matomo, Umami, Clarity, etc.) offer one.
GDPR: Google Analytics sets cookies. PanelDNS’s built-in cookie preference centre (sidebar footer → Cookie preferences) gates GA4 loading behind analytics consent — GA4 only fires after the visitor explicitly allows analytics cookies. Plausible, Fathom, and Umami are cookieless and are not gated on consent. For EU visitors using GA4, no separate third-party consent banner is required — the built-in preference centre satisfies the requirement.

27. Portal Language

You can set the language your sub-client portal and customer-facing emails (invitations, password resets) are displayed in. Go to Settings → Portal Language, choose a language, and click Save Language. Currently available: English, Español (Spanish), Français (French), Deutsch (German), Português (Portuguese), 简体中文 (Simplified Chinese), and 繁體中文 (Traditional Chinese). Notes:
  • The setting is the org-wide default for all of your sub-clients.
  • Individual sub-clients can override it — each can pick their own language in their portal under Settings → Language (“Account default” keeps your org default). Their invitation and password-reset emails follow their personal choice too.
  • Your own reseller dashboard and the platform admin panel remain in English.
  • More languages are added over time; if your language isn’t listed yet, let the platform operator know.

28. Domain Reputation & Zone Suspension Notices

v3.45.0 — P1 + P2 + P5 live. Zone-creation blocking, automatic suspension, and GDPR Art. 22 safeguards (decision records, appeal form with SLA, audit trail) are all deployed. Monitor mode is on by default — the platform operator must explicitly disable it before zones are suspended. When monitor mode is off, the behaviour below applies.
PanelDNS checks every new zone against external threat-intelligence databases. If a domain scores above a threshold, the platform may automatically suspend the zone or flag it for staff review. This protects the platform’s nameserver IPs — a phishing campaign on shared nameservers can cause providers to blocklist the entire IP, affecting every customer.
Scoring sources active from v3.47.0: Google Web Risk (sync, +75), Phishing.Database (async, +90 — 30k+ aggregated phishing domains), RDAP domain age (+10/+20), high-risk TLD (+10), brand pattern match (+50). Zones are also re-scanned nightly for up to 500 domains not checked in the last 24 hours, so a domain listed after creation will be caught.

What you (or your sub-clients) might receive

If a zone is suspended (or restricted) by the reputation system, the zone owner receives an email explaining:
  • What happened (the action taken, the reputation score against the threshold, and the threat categories)
  • That no personal data was processed — only the domain name was checked
  • Their GDPR Article 22 rights: the right to contest and request human review
  • A direct link to appeal the decision, and the response deadline (typically 72 hours)
The zone detail page in the dashboard also shows a banner with the action taken and an “Appeal this decision” button.

How to appeal

1

Open the zone

Go to Zones in your dashboard and open the suspended zone.
2

Click Appeal

Click “Appeal this decision” in the suspension banner.
3

Add context (optional)

Explain why you believe the suspension is incorrect.
4

Submit and await response

Click Submit appeal. You’ll receive a confirmation email. The platform’s trust and safety team will review your appeal within the configured SLA (typically 72 hours) and contact you with the outcome.
If the appeal is upheld: the zone is reinstated immediately. If appropriate, the domain is added to a permanent whitelist so it is never flagged again.
If rejected: the zone stays suspended. The rejection email includes the reviewer’s notes. Contact the platform operator if you believe the outcome is incorrect.

What counts as a false positive?

Common legitimate reasons a domain may be flagged: New domains are statistically higher risk, but age alone does not trigger a suspension — the score combines multiple signals.
These checks apply at zone creation time and also nightly for all active zones, so a domain can be flagged after creation if it later appears on a threat list.

Can I see reputation data for my sub-clients’ zones?

Not beyond the notices described above. The suspension email and the banner on the zone’s detail page are the only places you see a decision; the full reputation records are surfaced in the platform’s admin panel only, and sub-clients do not see reputation scores or records in their portal. What a sub-client does see is a red notice on the suspended zone’s page saying the zone was suspended automatically by a domain-reputation check, that you have been notified, and that you can ask for the decision to be reviewed on their behalf. If a sub-client reports a suspension, use the appeal flow above.

Why this matters

When a sub-client follows their invitation link to set a password, they must explicitly agree to your legal documents before they can access the portal. Under GDPR Article 7, consent must be freely given, specific, informed, and unambiguous. Under Article 13, you must provide certain information about how their data is processed at the time it is collected — which is that moment. PanelDNS builds the consent gate into the invite flow. What it cannot do is supply your legal documents — those must be your own, covering how you (the reseller) process your sub-clients’ personal data. Go to Settings → Sub-client Portal Legal.
  1. Portal Terms of Service URL — enter the publicly accessible HTTPS URL of your sub-client terms. This must be your own terms, not PanelDNS’s. Example: https://acmedns.com/terms
  2. Portal Privacy Policy URL — enter the URL of your privacy notice. Same rule applies. Example: https://acmedns.com/privacy
  3. Policy version — enter a string that identifies the current version of your terms. You control the format: 2026-06-07 and v1.2 are both fine. When you update your terms, bump this string to signal sub-clients that re-consent is needed (see Bumping your terms version below).
  4. Click Save.
You cannot send invitations until both URL fields are filled in. If either is blank, clicking Invite to portal returns an error.

What sub-clients see

When a sub-client follows their invitation link to set a password, the form includes:
  • Links to your Terms of Service and Privacy Policy (the URLs you entered above).
  • A mandatory checkbox: I agree to the Terms of Service and Privacy Policy. The sub-client cannot set their password without checking it.
  • A notice that their domain names are checked against third-party threat intelligence services as part of the platform’s security. This is disclosed in the platform’s Data Processing Agreement and is surfaced in the consent notice so sub-clients are aware of it before they submit any data.
PanelDNS records the following for every sub-client consent event:
  • The sub-client’s account ID (actor_id), the document URLs they accepted, and the version string they accepted.
  • Their IP address and user-agent at the time of consent.
These records are append-only — they are never modified or deleted. A CSV export of your consent records is available at /consent/export.csv while you are signed in (there is no button for it in Settings; the re-acceptance page links to it). Keep this file for your GDPR records; it is the evidence you would produce to a supervisory authority if asked to demonstrate consent.

Bumping your terms version

If you update your terms:
  1. Publish the updated document at the URL you have already configured (or publish new URLs and update the fields).
  2. Go to Settings → Advanced → Sub-client Portal Legal → Policy version and enter the new version string.
  3. Click Save.
Any sub-client who accepted an older version — or who never accepted any, for example because their account was created through SSO or the API — will see a banner on every portal page: “Your provider has updated its Terms of Service and Privacy Policy”, with a Review and accept link. When they tick the checkbox and click Accept and continue, PanelDNS records the acceptance with the same proof as at invitation (version, time, IP address and browser) and the banner goes away. By default the portal stays usable while the banner is showing — GDPR does not require you to gate access pending re-consent for material changes to processor terms once an initial valid consent is on record, and the banner serves as the required notice under Article 13.
The platform operator can instead choose to block the portal until sub-clients accept (Admin → Platform Settings → Legal → Sub-client re-consent). In that mode every portal page redirects to the acceptance page until the sub-client accepts, although they can always sign out. This is a platform-wide setting that you cannot change yourself; ask the platform operator if you need it.
Two other things to know:
  • If you leave Policy version empty, sub-clients are never asked to accept anything.
  • When you view the portal as a sub-client (see Logging in as a sub-client), you are never asked to accept the terms, and you cannot accept on their behalf.

What you accepted when you signed up

When you registered your reseller account, you accepted PanelDNS’s own Terms of Service, Privacy Policy, and Data Processing Agreement. The DPA covers PanelDNS acting as a data processor for the personal data of your sub-clients. Permanent archive links for the version you accepted are at /legal/archive/2026-06-07/terms and equivalent paths for the other documents. If the platform legal documents are updated, what you see depends on how significant the change is:
  • Minor changes — a dismissible orange banner appears in your dashboard: “Our legal documents have been updated — please review and accept.” Click through to read and confirm. You can keep working without immediately accepting.
  • Material changes — a blocking re-acceptance interstitial at /consent/reaccept is shown on your next login. You cannot access the dashboard until you accept. However, you can still export your data, close your account, or log out before accepting — you are never fully locked out of your own data.

WHMCS-provisioned accounts

If your reseller account was created automatically by a WHMCS hosting provider — rather than by you registering directly — the WHMCS module records your acceptance of platform terms on your behalf as part of the API provisioning flow. On your first login after automated provisioning, you will see a one-time Action required banner. Click through to review the Terms of Service, Privacy Policy, and DPA and accept them directly. Until you do, certain features (including sending sub-client invitations) remain locked.

Re-acceptance: what changed and why

When the platform operator issues a material document change that requires your re-acceptance, the blocking interstitial now shows which version you previously accepted and which version is new — e.g. “Documents updated from version 2026-01-01 to 2026-07-01”. This makes it easy to check the archive links for the diff before clicking Accept. Archive links for every version are permanent and immutable at /legal/archive/{version}/{document}.

Sub-processor change notices (DPA §7)

PanelDNS may use sub-processors (third-party services) to help deliver the platform. When a sub-processor is added or removed, you will receive:
  1. An in-app notice in your dashboard notification bar.
  2. An email sent to your account’s primary email address.
For additions, you will receive at least 30 days advance notice (GDPR Art. 28(2)) before the sub-processor is engaged. You have the right to object to the addition by contacting the address given in the notice email. If no objection is raised before the effective date, the addition proceeds. For removals, no objection period applies — this is informational only. Sub-processor notices reference the DPA document and do not require you to re-accept the DPA. A new re-acceptance is only required when the DPA text itself changes materially (you will see the re-acceptance wall for that).
When the platform operator publishes new legal documents, you may see an in-app notice banner in your dashboard — before or instead of the consent wall: For material changes, the blocking interstitial is shown on your next login. You can still export your data, close your account, or log out before accepting — you are never fully locked out of your own data. The platform operator can update the legal document version at any time from their admin panel — no code release is required on your end. When they do:
  • You will see either a dismissible banner (minor change) or the blocking re-acceptance interstitial (material change) on your next login to the reseller dashboard.
  • The same prompt appears for every reseller on the platform — it is not targeted at you specifically.
  • If you manage sub-clients, their own re-consent prompts (governed by your portal terms version, not the platform version) are unaffected by this change.
If you see a re-consent prompt unexpectedly, the platform operator has published an update to the platform Terms, Privacy Policy, or DPA. Review the updated documents and accept to continue. Contact the platform operator if you have questions about what changed.

Sub-client anonymisation on deletion

When you delete a sub-client from the Sub-clients page, their personal data (name, email, password hash) is anonymised inside a database transaction before the account is removed. Consent records are retained for audit purposes but are no longer linked to identifiable information. This satisfies GDPR Article 17 (right to erasure) while preserving your audit trail. DNS zones previously assigned to the sub-client are not deleted — they remain under your org with no sub-client assignment.

30. Account Closure & Data Rights

Closing your reseller account

Only the account owner can close the account. Go to Settings → Close Account (/settings/close-account), enter your password and type your organisation name to confirm. The closure process works as follows:
  1. You submit a closure request. A confirmation email is sent, and you stay signed in.
  2. A 90-day cooling-off period begins. Your account keeps working normally, and the Close Account page shows the date the closure will happen, with a Cancel the closure button. Nothing is deleted until then.
  3. Seven days before that date, the account owner receives a reminder email.
  4. On the closure date, the closure is processed automatically:
    • Your Stripe subscription is cancelled. It keeps billing during the 90 days — cancel it sooner from Billing → Manage if you prefer.
    • All zones are deleted, then removed from the DNS provider 7 days later. Move your nameservers elsewhere before the closure date if your domains need to keep resolving.
    • Sub-client accounts are anonymised and locked.
    • Personal data (names, email addresses, passwords) is anonymised, and API tokens, passkeys and saved sign-ins stop working.
    • Team members who also belong to another organisation are removed from yours but keep their own account.
    • Your organisation is marked as cancelled.
This is irreversible after the 90-day window. Cancel the closure before the date if you change your mind. Your platform admin can also cancel a pending closure on your behalf.
What your sub-clients see. Once your account is closed or terminated, the sub-client portal is no longer available to your sub-clients. If a terminated account is reactivated, sub-client access returns unchanged. If you have a blocking re-acceptance interstitial active, you can still reach the Close Account page — and cancel a pending closure — without accepting; it is a soft-exit route.

Submitting a GDPR data rights request

For formal data subject rights requests (access, erasure, rectification, portability, or objection), use the Privacy Request Form at /privacy-request. This form is publicly accessible — no login is required. Request types: Requests are logged with a 30-day SLA. You will receive an acknowledgement by email.
For erasure requests, account closure (above) is the fastest path. The formal privacy request route is for cases where you need only partial erasure, or where you want a written record of the request independent of the account closure process.

31. Backups & Zone History

Accessing zone history

Every time records change in a zone, PanelDNS takes a snapshot. To view the history for a zone:
1

Open Zones

Go to Zones in the sidebar.
2

Open the zone

Click the zone name to open the zone detail page.
3

Find the History card

Scroll to the History card.
The History card lists the most recent snapshots (up to 50 per zone): Click ± Diff on any row to expand the full record diff — added records are shown in green, removed records in red.

Point-in-time restore

To restore a zone to a previous state:
1

Pick a snapshot

On the History card, find the snapshot you want to restore to.
2

Review the diff

Review the diff to confirm what will change.
3

Restore

Click Restore and confirm the action.
The restore replaces the current record set with the snapshot content and applies the change to the DNS provider. The restore itself is recorded as a new snapshot, so it is auditable and reversible.
Snapshot retention depends on your plan: 7 days on Free, 30 days on Starter, 90 days on Pro, and 365 days on Agency. Snapshots older than your plan’s window are removed automatically. Contact your platform operator if you need extended retention.

Nightly backups

PanelDNS takes a nightly backup of all zone data. From v3.46.0, these backups are stored on the configured S3 storage (see your platform operator for storage details) in addition to local disk, for off-VPS redundancy. Downloading a backup:
1

Open Backups

Go to Dashboard → Backups (sidebar).
2

Find the backup

The Backups page lists all available nightly backup files with their date and size.
3

Download

Click Download on any row to stream the .json.gz file directly to your browser.
Backup filenames follow the pattern {date}.json.gz. The download is streamed server-side; filenames are validated to prevent path traversal. What is included: all zones and DNS records for your org at the time of the backup. Team members, billing data, and sub-client accounts are not included — those are managed by the platform operator.

Sub-client zone history

Sub-clients can view the change history for their zones in the portal zone page. The diff view is the same as the reseller dashboard (trigger badge, +/- change counts, expandable diff). Sub-clients cannot restore a previous version. Direct them to contact you if they need a rollback — you can restore from the reseller dashboard on their behalf.
For operator-level documentation (server setup, Docker deployment, Cloudflare for SaaS, PowerDNS cluster), see the other files in this docs/ directory.